Back to projects
04

Resume Analyzer

AI-powered resume analysis — Gemini reads your PDF and coaches you to a better job.

Solo Build Next.jsTypeScriptGemini AISupabaseDockerPDF Parsing Live
Resume Analyzer walkthrough

Overview

Upload a resume PDF, get a Gemini-powered analysis: ATS score, keyword gaps, and experience critique. Beyond the scan, a section-by-section rewrite tool and a coaching chat grounded in your specific results.

Analyses persist to Supabase so users can revisit past results. Containerised with Docker, rate-limited, and shipping as a PWA.

My Role

  • Built the PDF ingestion pipeline — handles multi-column layouts, unicode edge cases, and column-split sentences.
  • Designed the Gemini prompt system: separate prompts for analysis, rewrite, and coaching, each tuned for consistent JSON output.
  • Multi-client Gemini setup that rotates API keys to stay within rate limits.
  • Built the analysis workspace — a split-pane UI with the analysis on one side and streaming chat on the other.
  • Set up Supabase auth, migration-backed schema, and a middleware-protected dashboard.

Tech Stack

Next.jsTypeScriptGemini AISupabaseDockerPDF Parsing

Challenges & Learnings

PDF parsing is messier than it sounds. Resumes use every conceivable layout — two-column designs, tables, embedded fonts — and naive extractors butcher them. The fix was custom normalisation that collapses whitespace artefacts and re-stitches lines split mid-sentence by column boundaries.

Getting Gemini to return parseable JSON was a fight. Early prompts produced markdown-fenced JSON, trailing commas, and hallucinated fields. Strict JSON-mode, a schema in the prompt, and a retry-with-correction loop that asks Gemini to fix its own broken syntax did it.


© 2026 Leul Tesfaye