A JD-to-resume tailoring engine that produces truthful, targeted resume rewrites with match scoring, gap analysis, and side-by-side PDF proof artifacts. Built with Next.js, Groq AI, and TypeScript.
- Match Scoring — 0–100 score across skills, responsibilities, keywords, and seniority alignment
- Smart Rewriting — AI rewrites bullets to emphasize JD-relevant skills with explainable change reasons
- Gap Analysis — Identifies missing skills and qualifications grouped by high/medium/low importance
- Guardrails — Truthfulness checks flag fabricated employers, inflated metrics, and seniority bumps
- File Upload — Upload PDF, DOCX, or TXT resumes (text extracted automatically)
- Side-by-Side Diff — Visual comparison of original vs tailored bullets with confidence badges
- PDF Export — Download tailored resume + comparison report with score delta and gap details
- Demo Mode — Click "Try Demo" on the landing page to instantly pre-fill samples and run analysis
Live Demo (once deployed)
Walk through in under 60 seconds:
- Click Try Demo → samples auto-load
- Analyze → see match score and gaps
- Generate Tailored Resume → review side-by-side diffs
- Confirm disclaimer → download comparison PDF
| Layer | Technology |
|---|---|
| Frontend | Next.js (App Router), React 19, Tailwind CSS 4, Shadcn UI |
| AI | Groq API (Llama 3.3 70B), Zod for structured output |
| Playwright (HTML → PDF) | |
| Storage | Browser sessionStorage only |
| Validation | Zod schemas on every boundary |
See architecture.md for the full system design, service boundaries, data flow, prompt structure, and guardrail architecture.
# 1. Install dependencies
npm install
# 2. Configure environment variables
cp .env.local.example .env.local
# Edit .env.local with your Groq API key:
# GROQ_API_KEY=your_key_here
# GROQ_MODEL=llama-3.3-70b-versatile
#
# For fast UI testing without API calls, set:
# MOCK_MODE=true
# 3. Run the development server
npm run dev
# 4. Open http://localhost:3000app/ Next.js App Router pages + API routes
├── api/analyze POST — parse resume + JD, score, gaps
├── api/tailor POST — full tailoring pipeline
├── api/export/pdf POST — generate PDF documents
└── tailor/ Wizard page (4-step UI)
components/ React UI components (15 domain + 10 primitives)
lib/ Core logic
├── schemas.ts All Zod schemas + parseOrThrow helper
├── llm/ Groq LLM client with retry + repair
├── services/ Domain services (parsers, engines, guardrails, PDF)
├── mocks/ Sample data for development
└── storage/ sessionStorage helpers
prompts/ LLM prompt templates (7 modules)
types/ TypeScript type exports
public/samples/ Sample resume + JD text files
| Method | Path | Description |
|---|---|---|
| POST | /api/analyze |
Parse resume + JD, original score, gap analysis |
| POST | /api/tailor |
Full pipeline: parse → score → tailor → gaps → assemble |
| POST | /api/parse/resume |
Parse resume text only |
| POST | /api/parse/jd |
Parse job description text only |
| POST | /api/export/pdf |
Generate tailored resume or comparison PDF |
npm run dev # Dev server on :3000
npm run build # TypeScript + production build
npm run lint # ESLint- Multi-column PDFs — PDF text extraction may reorder content from multi-column layouts
- No URL scraping — Paste JD text manually; URL auto-fetch is post-MVP
- No ATS guarantee — Tailored content is AI-generated; always review before submitting
- No persistent storage — Data lives in browser session only; refresh clears it
- PDF generation — Relies on Playwright; serverless deployment may need alternative
No account required. Your resume data is stored only in your browser session and sent to Groq AI for processing. No data is logged or persisted on the server.