cd ../projects
AI · Career Platform·2026·private repository

PG-Tailor

AI career platform: résumé tailoring, job-matching & a career assistant

private repository
pg-tailor · tailor a résumé

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

  1. 01Next.js App Router route handlers serving a typed API on the same origin as the UI
  2. 02Streamed résumé tailoring over Server-Sent Events; PDF/DOCX export across seven templates
  3. 03Cached SerpAPI job board with archiving, plus a Gemini-scored Autopilot that ranks jobs against your profile
  4. 04Application history with status tracking and a career-assistant chat grounded in a tailored résumé

$ ls highlights/

Streamed (SSE) résumé tailoring
Gemini job-match scoring (Autopilot)
PDF/DOCX export · 7 templates
SerpAPI job board + history

$ cat api.md

REST · OpenAPI 3.1 · Next.js route handlers·/api·auth: Cookie (auth-token) · 2 SSE streams

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

POST

/api/parse-pg

Extract text from an uploaded PDF/DOCX résumé (≤10MB).

POST

/api/tailor

SSE: stream a résumé tailored to a job description.

POST

/api/generate

Render tailored markdown to PDF/DOCX across 7 templates.

Jobs board & autopilot

GET

/api/jobs

Search the cached job board (SerpAPI-backed, paginated).

POST

/api/jobs/refresh

Pull fresh jobs from SerpAPI and archive stale ones.

POST

/api/autopilot/scan

Score every cached job vs your profile with Gemini (skips 24h).

GET

/api/autopilot/results

Ranked matches, score-desc; results ≥70 count as matches.

History, saved résumés & chat

POST

/api/records

Save a tailored résumé to history with application status.

GET

/api/saved-pgs

Stored master résumés, de-duped by name + length.

POST

/api/chats/{id}/messages

SSE: career assistant grounded in a tailored résumé.

POST

/api/auth/login

Cookie-based login gate (sets httpOnly auth-token).

Examples

stream a tailored résumé (SSE)
curl -N -X POST $API/api/tailor \
  -H 'Content-Type: application/json' --cookie 'auth-token=…' \
  -d '{"pgText":"<your résumé>","jobDescription":"<job description>"}'
response
data: {"type":"text","text":"## Gabriel Isuekebho\n"}
data: {"type":"text","text":"- Backend & systems engineer…"}
data: {"type":"done"}

$ ls screenshots/

pg-tailor · classic template
pg-tailor · two-column template
pg-tailor · job listings
pg-tailor · autopilot