Inspiration
What it does
Inspiration
Job hunting is stressful enough without wondering whether your resume will even survive an ATS filter or catch a recruiter's eye in the few seconds they spend on it. Most resume feedback online is generic ("use more action verbs!") — I wanted something that gives specific, line-level feedback like a real editor would.
What it does
Redline lets you upload a resume (PDF, DOCX, or TXT) and get back:
- An overall score and a separate ATS-survivability score
- Section-by-section feedback (Education, Skills, Experience, etc.) with concrete strengths and issues
- Actual bullet-point rewrites — before/after, with a reason for each change
- A ranked list of top-priority fixes to tackle first
How we built it
- Backend: Python + FastAPI, with a clean separation between file parsing (
pdfplumber/python-docx), AI review logic, and API routes — each independently testable. - AI: Google Gemini, prompted to return structured JSON matching a strict schema, validated with Pydantic before it ever reaches the frontend — so a malformed AI response fails loudly instead of silently breaking the UI.
- Frontend: A single-page app with drag-and-drop upload, an animated score reveal, and staggered card animations rendering the AI's structured feedback — not just a dumped wall of text.
Challenges we ran into
Getting the full pipeline working end-to-end took real debugging: a broken Tailwind CDN link silently killed our show/hide logic (all sections rendered at once instead of switching states), a couple of missing Python imports (os, json) caused the backend to crash mid-request, and our AI model string got deprecated by the provider partway through and had to be swapped. We also accidentally committed our .env file to git — GitHub's push protection caught it before it went public, so we rotated the API key immediately and cleaned up the git history before re-pushing.
Accomplishments that we're proud of
Going from a script-style idea to an actual typed API contract — the AI's output is validated against a strict schema before the frontend ever sees it, so bad AI responses fail with a clear error instead of breaking silently. Also proud of debugging a fully broken end-to-end flow systematically, including handling a real API key leak correctly under time pressure.
What we learned
How to design a prompt that reliably returns structured, parseable JSON output, why separating concerns (parsing vs. AI logic vs. routing) makes debugging dramatically easier, how to read a Python traceback to find the actual root cause, and how to respond properly to an accidental secret leak in git.
What's next for Redline
- Support pasting resume text directly, not just file upload
- Cache reviews to avoid re-billing the API on repeat uploads
- A "compare two resume versions" mode to track improvement over time ## How we built it