A modern, AI-powered tool that analyzes resumes against job descriptions, flags ATS pitfalls, scores alignment, and provides actionable feedback to help you land more interviews.
- ATS-Ready: Checks 20+ resume formatting rules that cause ATS systems to reject applications
- Keyword Optimization: Matches your resume against job description keywords
- Impact Analysis: Evaluates action verbs and impact language
- AI Suggestions: Get rewritten bullet points and summary improvements
- Privacy-First: Optional PII redaction, no data stored externally
- Self-Deployable: Run it yourself on Vercel in minutes
https://resumelytics.vercel.app
| Layer | Technology |
|---|---|
| Frontend | Next.js 14 (App Router), TypeScript, Tailwind CSS, shadcn/ui |
| Server | Next.js Route Handlers (Node.js runtime) |
| Deployment | Vercel (serverless) |
| PDF Parsing | Client-side PDF.js (browser-native) |
| DOCX Parsing | mammoth (server-side) |
| NLP/Analysis | natural (TF-IDF), compromise |
| JD Fetching | jsdom + @mozilla/readability |
| Export | Markdown, PDF (PDFKit) |
- 📄 Resume: Upload PDF/DOCX or paste text directly
- 📋 Job Description: Paste text or fetch from URL
- ATS Compliance (20+ checks): File name, headings, layout, fonts, bullet points, contact info
- Keyword Matching: TF-IDF based matching with missing keyword suggestions
- Impact Signals: Action verbs, quantified achievements, power words
- Clarity & Style: Sentence structure, readability, repetition detection
- 📊 Scores: Overall, ATS, Keywords, Impact, Clarity (0-100%)
- 🚩 Flags: Issues found with severity levels
- 💡 Suggestions: Missing keywords, rewrite recommendations
- ✨ AI Improvements: Rewritten bullet points, improved summaries
- ⚖️ Adjustable Weights: Tune scoring priorities in the UI
- 🔒 PII Redaction: Toggle to remove personal info from analysis
- 📛 File Name Linting: Checks if filename contains special characters
- 📥 Export: Download analysis as Markdown or PDF
PDF parsing happens in the browser using PDF.js. This was necessary because:
- Vercel serverless limitation: Node.js workers don't work in serverless functions
- Browser-native: Web Workers are fully supported in browsers
- Self-hosted worker: No external CDN dependencies for security and reliability
User uploads PDF → Browser parses with PDF.js → Text sent to API → Analysis → Results
| Endpoint | Method | Description |
|---|---|---|
/api/analyze |
POST | Main analysis: accepts resume (file/text) + JD, returns full analysis |
/api/fetch-jd |
POST | Fetches job description from URL using Readability |
/api/export |
POST | Exports analysis to Markdown or PDF |
# With file upload
curl -X POST https://resumelytics.vercel.app/api/analyze \
-F "[email protected]" \
-F "jd=Software Engineer at ACME"
# With pasted text
curl -X POST https://resumelytics.vercel.app/api/analyze \
-F "resume_text=John Doe\nSoftware Engineer..." \
-F "jd=Looking for a software engineer..."
# With custom weights
curl -X POST https://resumelytics.vercel.app/api/analyze \
-F "resume_text=..." \
-F "jd=..." \
-F "weights={\"ats\":0.20,\"keywords\":0.50,\"impact\":0.20,\"clarity\":0.10}"# Clone and install
git clone https://github.com/miguelaram2016/resume-ats-reviewer.git
cd resume-ats-reviewer
npm install
# Run development server
npm run dev
# Open http://localhost:3000- Fork or push this repo to GitHub
- Go to vercel.com and import the project
- Ensure Node.js Runtime is selected (default)
- Deploy — that's it!
The public folder (including pdf.worker.min.js) is automatically included in deployments.
This project uses better-icons for AI-powered icon search, integrated via MCP.
The project includes an MCP config at mcp.json — Codex can search and add icons using natural language:
"Search for UI icons""Get lucide:file-text as SVG""Add a download icon to my export button"
- Default weights: ATS 30%, Keywords 35%, Impact 20%, Clarity 15% — adjustable in the UI
- PII redaction is a first pass; extend
lib/pii.tsfor additional patterns - PDF export uses a simple text render for maximum compatibility
- Prisma schema is included for future persistence (not currently used)
MIT — use it however you'd like.