Build, tailor, review, and rehearse your resume with an AI-native workspace.
Conversational Editing • Visual Layouts • JD-Aware Optimization • Mock Interviews
Why • Preview • Product Tour • Quick Start • Architecture • 中文
Resume Studio is a full-stack AI workspace for the messy, iterative reality of job applications. Instead of treating resume writing as a one-shot document generation task, it gives users a place to refine content, tune layout, align with a target job description, and practice the interview that follows.
Most resume tools stop at templates. Resume Studio focuses on the whole loop:
| Import Bring in resume data and job context. |
Improve Use an agent to rewrite, clarify, and restructure. |
Design Tune the layout with visual controls and reusable templates. |
Rehearse Run mock interviews grounded in the resume and target JD. |
It is designed as a practical product prototype and as an agent engineering playground: the backend exposes observable tool calls, regression evaluations, self-checking, and deterministic test coverage so changes can be measured instead of guessed.
Ask for targeted edits like "make my summary more backend-focused" or "rewrite the first bullet with stronger metrics." The agent reads the current resume, chooses tools, applies field-level edits, and streams its progress to the UI.
- Function-calling agent loop
- Resume-aware context assembly
- Field-level updates with structured paths
- Confirmation flow for sensitive factual changes
Design the resume as a real document, not just a blob of text. Adjust sections, template guidance, spacing, typography, two-column layouts, tags, headers, and printable HTML output.
- Single-column and two-column resume layouts
- Section order and visibility controls
- Template-level guidance and local presets
- HTML export path for reliable browser printing
Attach a target job description and let the assistant reason against it. The system can inject JD context into the agent loop and use retrieval-oriented guidance to identify alignment opportunities.
- Target JD context injection
- RAG-ready local artifacts
- Role-specific rewrite guidance
- Clear separation between resume data and layout templates
Practice with interviewers from different domains. The flow supports interviewer recommendations, resume/JD-grounded questions, interview termination detection, and a dedicated review mode after the session ends.
- Multi-industry interviewer presets
- Resume-aware and JD-aware prompts
- Custom user preference prompt
- Post-interview review mode
| Area | What makes it useful |
|---|---|
| Agent UX | Tool calls are streamed over SSE, so the UI can show what the assistant is doing instead of waiting on a silent black box. |
| Resume Edits | Edits are applied to structured resume fields, which keeps content changes inspectable and easier to test. |
| Layout Design | Template state is separated from resume content, so changing a layout does not silently mutate the resume itself. |
| Export | Printable HTML is the default export path. TeX is generated as source for users who want to compile in Overleaf or a local XeLaTeX environment. |
| Evaluation | Agent behavior has regression scenarios, fixture-based tests, and reporting scripts for iterative improvement. |
| Local-first | The project is designed to run locally with explicit .env configuration and local runtime artifacts. |
Detailed install guides for Python and Node.js on all platforms: Development Setup → Environment Setup
TL;DR:
| Platform | Python | Node.js |
|---|---|---|
| macOS | brew install python@3.13 |
brew install node@22 |
| Windows | python.org (check "Add to PATH") | nodejs.org (LTS) |
| Ubuntu | sudo apt install python3 python3-pip python3-venv |
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - && sudo apt install -y nodejs |
Minimal versions: Python ≥ 3.11, Node.js ≥ 18. Verify with python --version and node --version.
git clone https://github.com/MengPaul07/resume-studio
cd resume-studio
# Backend
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
# Frontend
cd frontend
npm install
cd ..
# Config
cp .env.example .env # Windows: copy .env.example .env
# Edit .env and add your LLM_API_KEYnpm run dev| Service | URL |
|---|---|
| Frontend | http://127.0.0.1:5173 |
| Backend API | http://127.0.0.1:8000 |
| API Docs | http://127.0.0.1:8000/docs |
npm run dev:backend
npm run dev:frontendResume Studio uses a function-calling agent loop rather than a single prompt that returns prose. This makes editing behavior observable and testable.
| Component | Role |
|---|---|
| Agent loop | LLM picks tools autonomously (read_resume, add_entry, update_field, compose, etc.) — up to 6 rounds per turn |
| Tool registry | All tools registered via @tool decorator; LLM selects based on JSON schema |
| Self-check | Code-based verdict on output quality — no extra LLM call needed |
| SSE streaming | Every tool call, reasoning step, and final result streamed to frontend in real time |
| Turn logging | Full interaction trace saved to disk — LLM decisions, tool args, results, timing |
| Path | Role |
|---|---|
src/services/content_refinement_v3/agent/_agent_loop.py |
Agent loop — LLM tool selection + execution |
src/services/content_refinement_v3/agent/turn_runner.py |
Turn orchestration, SSE output, log saving |
src/services/content_refinement_v3/agent/_tools.py |
Tool definitions (add_entry, update_field, set_entry, delete_entry, etc.) |
src/services/content_refinement_v3/prompts/agent.py |
Agent and self-check prompts |
src/services/layout_design/ |
Resume layout rendering, pagination, and HTML/TeX generation |
frontend/src/ |
React app, chat UI, layout builder, and mock interview UI |
The layout system is built around reusable guidance and section configuration rather than hard-coded one-off templates.
| Capability | Description |
|---|---|
| Section control | Reorder and hide resume sections without changing the underlying resume content. |
| Template guidance | Store layout and style preferences as template-level state. |
| HTML rendering | Generate A4-style printable HTML for browser-native export. |
| TeX source | Generate TeX for users who prefer Overleaf or local XeLaTeX compilation. |
| Style tuning | Adjust variables such as page padding, column width, spacing, heading style, tag style, and font sizing. |
The mock interview flow is built for targeted practice rather than generic question lists.
| Stage | What happens |
|---|---|
| Setup | The user selects interview length, interviewer style, industry tags, target JD, resume, and optional custom preferences. |
| Interview | The interviewer starts with the first message, asks resume/JD-grounded questions, and adapts across rounds. |
| Termination | The system can detect when an interview has ended instead of forcing a fixed flow. |
| Review | A dedicated review prompt can analyze the session and give focused feedback. |
| Layer | Technologies |
|---|---|
| Backend | FastAPI, Pydantic, LiteLLM, SSE, SQLite-backed local stores |
| Frontend | React 18, Vite, TypeScript, Tailwind CSS, Framer Motion, i18next |
| Retrieval | FAISS, fastembed, local JD/context artifacts |
| Documents | HTML export, TeX source export, Jinja2, MarkItDown |
| Quality | pytest, frontend build checks, agent eval scripts |
resume-studio/
├── src/ # FastAPI backend (API routes & services)
│ ├── api/ # Controller endpoints
│ ├── services/
│ │ ├── content_refinement_v3/ # Agent loop, prompts, resume editing
│ │ └── layout_design/ # HTML/TeX layout rendering
├── frontend/ # React + Vite frontend
│ └── src/ # UI components, pages, hooks, forms
├── config/ # Document types & runtime config
├── scripts/ # Evaluation & maintenance scripts
├── tests/ # Backend test suite
└── docs/ # Architecture notes & documentation
# Unit + integration — no API key needed (~191 tests)
python -m pytest tests/unit tests/integration -q
# LLM scenarios — requires API key (37 tests, 16 concurrent)
python -m pytest tests/llm -n auto -q
# Frontend build check
npm --prefix frontend run build37 real-LLM tests cover edit scenarios, parse pipeline, interview flow, refine patterns, JD search, multi-turn conversation, and preference memory extraction — all run concurrently on deepseek-v4-flash.
See tests/README.md for the full guide.
For agent behavior work, start the backend first:
python -m uvicorn src.main:app --host 127.0.0.1 --port 8000Then run one of the evaluation commands:
python scripts/agent_eval.py --regression --base-url http://127.0.0.1:8000/api/v1 -j 4
python scripts/agent_eval.py --base-url http://127.0.0.1:8000/api/v1 -j 4
python scripts/dres_bench.py iterate diagnose- Copy
.env.exampleto.envbefore running the app. - The project is local-first by default; generated runtime artifacts stay out of the source tree.
- TeX export is generated as pure source text for user compilation.
- Layout templates and resume data are strictly separated to prevent accidental content loss during design changes.
All documentation lives in docs/. Start from the Index or jump directly to any topic:
- Features: Dashboard • Resume Builder • AI Tailor • Mock Interview • Settings
- Development: Setup Guide • Architecture
- Design & Notes: Layout Flow • UI Style Guide • Plans
The frontend and resume template direction were originally inspired by Resume-Matcher.








