AI-powered resume optimization studio. Paste or drop a resume (PDF/DOCX), feed a job description, and get:
- A match score with missing skills and actionable suggestions.
- A rewritten, ATS-friendly Markdown resume.
- An “ideal” 100% match reference resume.
- Next.js 16 (App Router) + TypeScript
- Groq SDK (
llama-3.1-8b-instant) - Framer Motion (lightly used), Lucide icons
- Parsing:
pdfjs-dist(PDF via worker),mammoth(DOCX)
- Install deps
npm install- Create
.env.local
GROQ_API_KEY=your_key_here
- Run dev server
npm run devApp lives at http://localhost:3000.
npm run dev— start dev servernpm run build— production buildnpm run start— run production build
- Client (
src/app/page.tsx) collects resume + JD. - API route (
src/app/api/analyze/route.ts) callsanalyzeResumeinsrc/lib/llm.ts(Groq prompt/parse). - Response includes score, missing skills, suggestions, rewritten resume, and ideal resume. Client adds
id/datelocally for history. - Results render in
ResultsView; history stored in localStorage viauseHistory.
src/app/layout.tsx— fonts, layout shell, hydration suppression.src/app/globals.css— theme tokens/base styles.src/app/page.tsx— hero + form/results toggle.src/app/api/analyze/route.ts— POST handler to Groq.src/components/*— UI modules (form, results, history, footer, background).src/lib/groq.ts— typed Groq client;llm.ts— prompt/parse logic;fileParser.ts— PDF/DOCX text extraction.src/hooks/useHistory.ts— localStorage history (lazy init).src/types— shared types.
POST /api/analyze
{ "resumeText": "string", "jobDescription": "string" }Returns
{
"score": number,
"missingSkills": ["string"],
"suggestions": ["string"],
"fixedResume": "markdown",
"idealResume": "markdown",
"id": "uuid",
"date": "ISO"
}- PDF worker served from
public/pdf.worker.min.mjs. - Extension-induced hydration noise is suppressed on
<html>(layout.tsx). - Data privacy: history is localStorage only; no server persistence.

