PG-Tailor
AI career platform: résumé tailoring, job-matching & a career assistant
A full-stack AI career platform built on Next.js App Router route handlers. It parses a résumé, tailors it to any job description token-by-token over Server-Sent Events, and exports PDF/DOCX in seven templates. A cached SerpAPI job board feeds an Autopilot that scores every listing against your profile with Gemini, alongside application history with status tracking and a career-assistant chat grounded in your tailored résumé.
$ cat problem.md
Tailoring a CV to every role, tracking applications, and judging which jobs are worth chasing by hand is slow, and generic AI output doesn't hold up under real job-hunt volume.
$ whoami --role
Design & build (solo)
- Next.js
- TypeScript
- React
- Gemini
- SerpAPI
- Prisma
- SSE
- Docker
$ cat approach.md
- 01Next.js App Router route handlers serving a typed API on the same origin as the UI
- 02Streamed résumé tailoring over Server-Sent Events; PDF/DOCX export across seven templates
- 03Cached SerpAPI job board with archiving, plus a Gemini-scored Autopilot that ranks jobs against your profile
- 04Application history with status tracking and a career-assistant chat grounded in a tailored résumé
$ ls highlights/
$ cat api.md
PG-Tailor's API parses a résumé, AI-tailors it to a job description (streamed token-by-token over SSE), and exports PDF/DOCX in seven templates. On top sits a cached SerpAPI job board, an Autopilot that scores every job against your profile with Gemini, history with status tracking, and a career chat grounded in a tailored résumé.
// Backend is Next.js App Router route handlers on the same origin as the UI; tailoring and the career chat stream Server-Sent Events. Everything but /api/auth/* sits behind a cookie gate.
Tailoring
/api/parse-pg
Extract text from an uploaded PDF/DOCX résumé (≤10MB).
/api/tailor
SSE: stream a résumé tailored to a job description.
/api/generate
Render tailored markdown to PDF/DOCX across 7 templates.
Jobs board & autopilot
/api/jobs
Search the cached job board (SerpAPI-backed, paginated).
/api/jobs/refresh
Pull fresh jobs from SerpAPI and archive stale ones.
/api/autopilot/scan
Score every cached job vs your profile with Gemini (skips 24h).
/api/autopilot/results
Ranked matches, score-desc; results ≥70 count as matches.
History, saved résumés & chat
/api/records
Save a tailored résumé to history with application status.
/api/saved-pgs
Stored master résumés, de-duped by name + length.
/api/chats/{id}/messages
SSE: career assistant grounded in a tailored résumé.
/api/auth/login
Cookie-based login gate (sets httpOnly auth-token).
Examples
curl -N -X POST $API/api/tailor \
-H 'Content-Type: application/json' --cookie 'auth-token=…' \
-d '{"pgText":"<your résumé>","jobDescription":"<job description>"}'data: {"type":"text","text":"## Gabriel Isuekebho\n"}
data: {"type":"text","text":"- Backend & systems engineer…"}
data: {"type":"done"}