The Problem
Job seekers spend hours rewriting resumes for every application, and 75% of them never make it past the Applicant Tracking System (ATS) that ranks candidates before a human ever opens the file. The mismatch is rarely about qualifications. It's about keywords, formatting, and how the resume is parsed.
I wanted to build something that closes that gap automatically: paste a resume, paste the job description, get an honest ATS score and concrete edits in seconds.
Approach
The system runs in three stages: parse, score, rewrite. Parsing normalizes the resume into a structured JSON shape regardless of source format. Scoring compares it against the job description across four dimensions, skills, keywords, format, and action verbs, using a combination of embedding similarity and rule-based checks. Rewriting is the part where GPT-4 earns its keep: it generates targeted edits to specific bullets, never hallucinating experience the candidate doesn't have.
The Stack
What I Built
- A four-dimension ATS scoring engine, skills match, keyword density, format compliance, action-verb usage.
- A streaming GPT-4 rewrite pipeline that edits one bullet at a time so the UI stays responsive.
- A diff-based review surface so users can accept, reject, or tweak every suggestion individually.
- A Stripe-powered subscription with per-rewrite quotas and a usage dashboard.
- A PDF export pipeline that preserves the original layout while applying accepted edits.
Lessons
The biggest unlock was constraining the model. Early prototypes asked GPT-4 to rewrite the whole resume in one pass, output was inconsistent and slow. Breaking the task into bullet-level edits, each with a strict JSON schema, made responses dramatically faster, cheaper, and more trustworthy.
It also turned out that users don't want a black-box score. They want to see why a keyword was missed or what a recruiter would search for. Adding inline explanations next to every score component doubled the conversion rate from free trial to paid.