Inspiration
We were heavily inspired by SWElist and how smoothly they deliver curated software engineering internship opportunities. As a CS student at UCF, I noticed everyone around me was completely burnt out from the internship search. Scrolling through LinkedIn, Indeed, or Handshake every single day is a massive grind. I wanted to build something that just did the heavy lifting for you, a tool where you set your preferences once, and the absolute best, freshest roles get dropped right into your inbox.
What it does
FirstStep is basically an autopilot for your internship and new-grad job hunt. You hit our site, tell us what kind of roles you're looking for (Software Engineering, Marketing, Design, etc.), and choose if you want daily or weekly updates. Then, you literally just chill. Our automated backend engine continuously scrapes the web for fresh roles and sends a beautifully formatted, email straight to your inbox with direct links to the applications.
How we built it
We built the entire platform using Next.js (App Router). The UI is completely custom-styled with Tailwind CSS to give it this fun, chunky, neo-brutalist vibe with the Fredoka font.
The backend is where the magic happens. The architecture is completely decoupled:
The Scraper: We use Apify to scrape job boards, clean the JSON data, and extract the actual direct ATS links (like Greenhouse/Lever).
The Database: We take those clean jobs and securely upsert them into a Supabase PostgreSQL database.
The Engine: We wrote a custom matching algorithm that checks our active users, finds jobs that match their specific industry, and hands them off to Resend to blast out the styled HTML emails.
The Autopilot: The entire pipeline runs completely hands-free using Vercel Cron Jobs.
Challenges we ran into
The biggest headache by far was the data pipeline. Honestly, we didn't really know how to scrape efficiently at first. In our early iterations, we were mashing multiple search queries together, which confused the scraper and just spit back useless Google Search redirect URLs instead of actual application links. We had to completely rethink our architecture, wrap our API calls in clean loops, and dig deep into the nested JSON payloads to pull out the real company links. Also, dealing with domain reputation and DNS records to keep our automated emails out of the spam folder was a huge learning curve.
Accomplishments that we're proud of
Getting the end-to-end automated pipeline working perfectly! Seeing that first Vercel Cron Job silently trigger in the background, scrape the web, match a job to a user, and successfully drop a UCF-gold email into an inbox without us touching a single button was an insane feeling. We're also super proud of the UI, taking it from a standard layout to something that actually feels bouncy and engaging for students.
What we learned
We learned a ton about backend architecture and bridging different services. Before this, writing the logic to connect Next.js serverless routes, Supabase upserts, third-party APIs, and Vercel Crons seemed incredibly daunting. Now we really understand how to build a decoupled system where the data ingestion is totally separate from the user notification engine. (I also learned the hard way that DNS propagation tests your patience!)
What's next for FirstStep
Right now, it's all about scaling up the scraper queries to cover every single major at UCF, not just tech and business. After that, we want to add a feature so students can track which jobs they've actually applied to directly from the email. For now, the goal is getting this into the hands of more Knights and helping them land that first step in their career!
Built With
- apify
- cron
- next.js
- resend
- supabase
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.