Inspiration

Every recruiting season, we watched friends at UMass send dozens of applications with the same generic resume, track deadlines across scattered spreadsheets, and guess at which roles they were actually qualified for. UMass has great resources (CICS courses, research labs, Career Services), but students rarely connect them to the jobs they want. And when they turn to AI resume tools, those tools often invent experience. We wanted a career coach that knows UMass and never lies.

What it does

Scout helps UMass students go from "where do I start?" to "ready to apply":

  • Sign up with your @umass.edu email and upload your resume; Gemini autofills your profile.
  • Get real postings from Greenhouse and Lever, ranked by an explainable match score.
  • Close your gaps: every missing skill maps to a real CICS course or research lab.
  • Tailor truthfully: bullets are rewritten for each posting and shown as a before/after diff, and we check that nothing is fabricated.
  • Track applications from Saved to Offer, sorted by deadline.
  • Practice interviews with job-specific questions and STAR-method feedback.
  • Stay current automatically: Scout's Grok-powered job bot runs on a schedule, finding new internships and logging every run.

How we built it

We started by having Cursor formalize our brainstorm into a full PRD with prioritized requirements, a data model, and API routes. We then had Cursor break the PRD into focused feature prompts and fed each one to a fresh agent to build the code, with each teammate owning separate folders so agents never collided.

  • Frontend: Next.js (App Router, TypeScript), Tailwind, shadcn/ui
  • Backend: Supabase (Postgres, Auth restricted to umass.edu, Storage), deployed on Vercel
  • AI: Gemini with structured JSON output, validated by zod; Grok (xAI API) for the job bot
  • Data: Greenhouse and Lever public job APIs; CICS course descriptions and lab directory, synced on a schedule

The match score combines required-skill coverage $R$, preferred-skill coverage $P$, and the share of requirement checks passed $Q$ (major, graduation year, location, sponsorship, pay):

$$ \text{score} = 0.5\,R + 0.2\,P + 0.3\,Q $$

Skills a posting doesn't mention are ignored rather than counted against the student, and hard mismatches (like needing sponsorship for a role that won't sponsor) are flagged instead of averaged away.

Challenges we ran into

  • Keeping AI honest. Prompting alone wasn't enough to stop fabricated resume content, so we added a deterministic check that rejects any tailored bullet introducing a skill, employer, or number not in the original.
  • Messy inputs. Resumes come in every layout imaginable, and job postings name the same skill a dozen ways ("JS" vs. "JavaScript"). We built a canonical skill list with aliases and used text positions from the PDF to detect multi-column layouts.
  • Scraping university pages reliably. Course and lab pages change and vary in structure, so we hash page content, re-parse only on changes, and fall back to the last good data.
  • Scope. Eight features in 36 hours meant ruthless prioritization: protect the core demo path first, polish later.

Accomplishments that we're proud of

A working end-to-end flow, from resume upload to scored job, gap plan, tailored resume, and mock interview, that keeps every AI output grounded in real data.

What we learned

  • Structured output plus schema validation turns an LLM from a liability into a dependable component.
  • Splitting a PRD into small, self-contained prompts for fresh agents produced far cleaner code than one long-running AI session.
  • "Truthful by design" has to be enforced in code, not just requested in a prompt.

What's next for Scout

Partnering with UMass Career Services, adding more job sources, cover letters with the same no-fabrication guarantees, and expanding to other schools' course and resource catalogs.

Built With

Share this project:

Updates

Submission history