Most job seekers have no idea whether their CV will survive an ATS (Applicant Tracking System) filter. Professional review services cost between $50 and $200 per resume, so a lot of qualified candidates get silently rejected before a human ever sees their file.
Project notes / Web application · Development
Hireon - AI Resume Analyzer
- React
- TypeScript
- Tailwind CSS
- Claude 3.7
- Zustand

The problem
My role
Solo. I handled design, frontend, AI integration, and deployment.
The approach
I built a browser-based tool that parses the candidate's PDF on the client, extracts its text, and sends structured prompts to Claude 3.7 Sonnet for an ATS-aware review. Feedback comes back in categorized sections (formatting, keyword coverage, clarity, impact) so the user gets actionable edits instead of a generic score.
Technical decisions
Zustand over Redux / Context
The app has a handful of cross-cutting pieces of state (uploaded file, parse result, analysis response, loading flags) and no server. Redux would be ceremony; prop-drilling through Context would re-render half the tree on every analysis update. Zustand gave me selector-based subscriptions in ~50 lines of boilerplate.
Claude 3.7 Sonnet instead of a cheaper model
Earlier Claude and GPT-3.5 class models produced generic 'make your resume stronger' feedback that felt worse than a Google search. Sonnet 3.7 was the first model I tested that consistently caught ATS-specific issues like missing keywords for the target role, odd column layouts, and inconsistent verb tenses.
Parse the PDF in the browser
Uploading the raw PDF to a server means handling storage, deletion, and privacy disclosures for a file that often contains a home address and phone number. Parsing client-side keeps the file on the user's machine. Only the extracted text goes to the model.
The stack
React + TypeScript for the UI, Tailwind for styling, Zustand for state, pdf.js for in-browser PDF text extraction, Claude 3.7 Sonnet via the Anthropic API for the analysis step. Deployed on Vercel.
The outcome
I shipped it as a free tool. I used it on my own CV, and iterated on the prompts after watching where it gave weak feedback on real resumes from friends who tested it.
What I learned
Prompt design is the product. The difference between a 'meh' analyzer and a useful one was almost entirely in how I structured the system prompt and forced the model to return categorized, specific, rewrite-style suggestions instead of vague advice.