An extensible personal command center for projects, tasks, knowledge, documents, automations, AI workflows, and career development. The original AI Resume Generator and Job Application Tracker are preserved as the Career workspace.
The new product information architecture, shared data contracts, and staged Supabase migration are documented in docs/personal-ai-workspace-architecture.md.
Cloud deployment instructions are in docs/cloud-deployment.md.
- Smart JD Parsing — Extracts skills, keywords, responsibilities, soft requirements, deal-breakers from any job description. Includes noise cleaning to remove benefits/legal/salary sections and save API tokens.
- Intelligent Bullet Retrieval — 5-priority strategy (deal-breaker match, responsibility mirror, keyword density, soft requirement proof, bonus signal match) to select the most relevant bullets from your profile.
- LaTeX Resume Generation — Fills your LaTeX template with tailored content, mirrors JD terminology and action verbs, bolds key metrics.
- ATS Scoring + Auto-Optimization — Keyword matching + Claude semantic analysis. Iteratively refines the resume (up to 3 rounds) until it meets score thresholds (overall: 80, keyword: 60%, relevance: 80, impact: 80).
- Cover Letter Generation — Produces a tailored 3-4 paragraph cover letter that addresses the JD's technical and soft requirements.
- Multiple Templates — Switch between
classic,modern(blue accents), andconsulting(conservative) styles. - Job Search — Search Indeed and Adzuna, deduplicate results, and rank jobs against your profile with Claude.
- Application History — Tracks every resume generated: company, role, ATS scores, template, and application status. Expandable detail view with content preview.
- PDF Compilation — Compiles LaTeX resumes and cover letters to PDF via pdflatex, downloadable from both CLI and web UI.
- Web UI — Full-featured Next.js frontend with FastAPI backend: dashboard with stats, generate page with step-by-step progress, job search, template picker, profile management, and file downloads (LaTeX/PDF/TXT).
profile.json + JD text input
|
[1] JD Noise Cleaner -> removes benefits, legal, salary noise
[2] JD Parser -> extracts structured requirements (Claude API)
[3] Bullet Retriever -> selects top-k relevant bullets (Claude API)
[4] Resume Generator -> fills LaTeX template (Claude API)
[5] ATS Scorer -> keyword + semantic scoring (Claude API)
|--- below threshold? -> refine and re-score (up to 3 rounds)
[6] Cover Letter -> tailored cover letter (Claude API)
[7] PDF Compiler -> pdflatex compilation
|
output/*.tex, *.txt, *.pdf, *_cover_letter.txt
# Windows: one-click launcher
start.bat
# Or manually:
# Terminal 1 — Backend
pip install -r requirements.txt
uvicorn api.server:app --reload --port 8000
# Terminal 2 — Frontend
cd frontend && npm install && npm run devOpen http://localhost:3000 in your browser.
I used Codex as a coding agent to move Auto-Resume from a local resume prototype toward a deployable personal AI workspace. This is separate from the product's runtime AI: the application uses the Anthropic API to analyze jobs and generate career materials.
The repository history records this work in agent/* and codex/* branches. Between July 15 and July 21, 2026, I opened 11 agent-assisted pull requests; PRs #1–#9 were merged through GitHub, while #10–#11 remain open.
| Pull requests | Recorded Codex-assisted work |
|---|---|
| #1 | Moved a machine-specific Notion/Indeed job tracker into the repository, replaced local paths with portable ones, documented setup, and protected credentials and runtime files. |
| #2 | Completed the secure MVP across 7 commits: cloud workspace APIs, career automation, OAuth, invite-only registration, persistent quotas, durable generation jobs, safer PDF compilation, editable document history, UI refinement, CI, and regression tests. |
| #3–#4 | Diagnosed two Vercel deployment problems from their root causes: excluded frontend source files and stale client API URLs bypassing the same-origin proxy. |
| #5–#7 | Built user-facing career workflows: full profile editing, restored Indeed + Adzuna search with source labels and graceful fallback, and explicit multi-job selection before spending AI quota on resume generation. |
| #8–#9 | Hardened AI and deployment reliability by retrying truncated structured responses and ensuring the three LaTeX templates are included in the Vercel bundle. |
| #10–#11 | Proposed a narrowly allow-listed PDF glyph-map fix, separated job-match scores from generated-resume ATS scores, and improved the first-run career experience. |
The PR record also shows how I worked with Codex:
- Each PR starts from a concrete product problem or production failure and states the intended outcome.
- Several PR descriptions record a root-cause investigation before the fix, including the missing Vercel source bundle, proxy bypass, absent Indeed integration, missing user-selection step, and excluded LaTeX templates.
- Changes were made on isolated branches, including backend, frontend, tests, and documentation when the task crossed those boundaries.
- Each PR records its relevant verification. Across these PRs, the backend suite grew from 16 to 23 tests; validation also included ESLint, Hua UI rules, Next.js production builds, Python compilation, live JobSpy checks, PDF generation, and diff checks.
- Accepted work reached
mainthrough GitHub PR merges; the two unmerged changes remain isolated on their branches.
This history reflects how I use Codex: not just to generate code, but to investigate failures, preserve safety boundaries, add regression coverage, and leave each change in a reviewable state. I remain responsible for the requirements, product decisions, credentials, deployment approval, and final merge.
# 1. Install dependencies
pip install -r requirements.txt
cd frontend && npm install && cd ..
# 2. Create .env with your API key
echo "ANTHROPIC_API_KEY=sk-ant-..." > .env
# 3. (Optional) For job search, add Adzuna keys — free at https://developer.adzuna.com/
echo "ADZUNA_APP_ID=your_id" >> .env
echo "ADZUNA_APP_KEY=your_key" >> .env
# 4. (Optional) Install pdflatex for PDF output
# Windows: install MiKTeX — https://miktex.org/downloadThe web frontend provides a complete interface for all features:
- Dashboard — Stats, application history with expandable rows to preview and download generated files
- Generate — 3-step flow: paste JD, analyze, generate & optimize. Download resume PDF, LaTeX, cover letter
- Job Search — Search Adzuna jobs, Claude-ranked by profile fit with match scores
- Templates — Visual template picker (classic, modern, consulting) — click to generate
- Profile — Manage personal info, skills, experience, and projects
Click any history row to expand and access:
- Resume PDF / LaTeX source download
- Cover Letter PDF / TXT download
- Tab preview of resume LaTeX and cover letter content
- Inline status updates (generated → applied → interview → offer/rejected)
# From a JD file
python main.py generate --jd path/to/jd.txt
# Interactive mode (paste JD in terminal)
python main.py generate
# Choose a template
python main.py generate --jd jd.txt --template modern
# Skip cover letter
python main.py generate --jd jd.txt --no-cover-letter
# More bullets
python main.py generate --jd jd.txt --top-k 15python main.py search --query "Machine Learning Engineer" --location canada
python main.py search --query "Data Scientist" --location us --top-n 5python main.py history
python main.py history --update 1:applied
python main.py history --update 1:interviewStatus flow: generated -> applied -> interview -> offer / rejected
python main.py templatesAvailable: classic (default), modern (blue accents), consulting (conservative)
Each run produces:
output/
20260309_143022_ml_engineer.tex # LaTeX source
20260309_143022_ml_engineer.txt # Plain text (for Overleaf)
20260309_143022_ml_engineer.pdf # Compiled PDF
20260309_143022_ml_engineer_cover_letter.txt # Cover letter
| Method | Path | Description |
|---|---|---|
| GET | /api/health |
Health check |
| GET | /api/profile |
Get profile with stats |
| PUT | /api/profile/personal |
Update personal info |
| PUT | /api/profile/skills |
Update skills |
| POST | /api/profile/experience |
Add experience |
| DELETE | /api/profile/experience/{id} |
Delete experience |
| POST | /api/profile/project |
Add project |
| DELETE | /api/profile/project/{id} |
Delete project |
| GET | /api/templates |
List templates |
| POST | /api/parse-jd |
Parse job description |
| POST | /api/retrieve-bullets |
Select relevant bullets |
| POST | /api/generate |
Generate resume + cover letter |
| POST | /api/score |
ATS score a resume |
| POST | /api/refine |
Refine resume with ATS feedback |
| POST | /api/generate-full |
Full pipeline in one call |
| POST | /api/generation-jobs |
Queue an idempotent generation |
| GET | /api/generation-jobs/{id} |
Poll generation status/result |
| GET | /api/profile/completeness |
Validate profile readiness |
| GET | /api/history |
List history (light) |
| GET | /api/history/{id} |
Get record with full content |
| PATCH | /api/history/{id} |
Update status |
| POST | /api/history |
Save new record |
| POST | /api/compile-pdf |
Compile LaTeX to PDF |
| POST | /api/compile-cover-letter-pdf |
Compile cover letter to PDF |
| POST | /api/search-jobs |
Search + rank jobs |
Edit data/profile.json. Each bullet needs:
{
"id": "b001",
"text": "Built a production RAG system processing 100+ meetings/week...",
"tags": ["RAG", "NLP", "Python"]
}Tags help the retriever match bullets to JD keywords more accurately.
main.py # CLI entry point with subcommands
api/
server.py # FastAPI backend (REST API)
frontend/
src/app/ # Next.js App Router pages
page.tsx # Personal workspace dashboard
career/ # Career overview, applications, and interview prep
projects/page.tsx # Project workspace
tasks/page.tsx # Task workspace
knowledge/page.tsx # Knowledge workspace
documents/page.tsx # Generated documents and versions
automations/page.tsx # Schedules and run history
integrations/page.tsx # Connected services
generate/page.tsx # Generate resume flow
search/page.tsx # Job search
templates/page.tsx # Template picker
profile/page.tsx # Profile management
src/components/ # Shared components (Sidebar, Header)
src/lib/api.ts # API client
src/
jd_parser.py # JD noise cleaning + structured parsing
retriever.py # 5-priority bullet selection
generator.py # LaTeX resume generation + refinement
ats_scorer.py # Keyword + semantic ATS scoring
cover_letter.py # Cover letter generation
templates.py # Multi-template manager
job_finder.py # Indeed and Adzuna job search
history.py # Application history tracking
data/
template.tex # Classic LaTeX template
template_modern.tex # Modern template (blue accents)
template_consulting.tex # Consulting template (conservative)
profile.json # Your profile (gitignored)
sample_jd.txt # Example JD
start.bat # One-click launcher (Windows)
- AI: Claude API (
claude-sonnet-4-6by default, configurable withANTHROPIC_MODEL) - Backend: FastAPI + Uvicorn
- Frontend: Next.js 16 (App Router) + TypeScript + Tailwind CSS
- Resume: LaTeX templates + pdflatex compilation
- Job Search: Indeed via JobSpy, with optional Adzuna API results
- Icons: Custom Birch icon set
Scheduled career discovery, deduplication, review items, material generation, retries, notifications, and hosted worker setup are documented in Career automation workflow.
- CLI prototype with Claude API pipeline
- LaTeX output with custom templates
- ATS scoring with iterative optimization
- Cover letter generation
- Job search + ranking
- Application history tracking
- Multi-template support
- Web UI (Next.js + FastAPI)
- PDF compilation + download (resume & cover letter)
- Profile management (CRUD)
- Vertex AI embeddings for better retrieval
- LinkedIn profile import
- Batch resume generation
- Vercel frontend and FastAPI preview deployments with Supabase support
- Complete production deployment verification