Skip to content

MengPaul07/resume-studio

Repository files navigation

Resume Studio

Build, tailor, review, and rehearse your resume with an AI-native workspace.

Conversational Editing • Visual Layouts • JD-Aware Optimization • Mock Interviews

Python FastAPI React Vite Tests License

WhyPreviewProduct TourQuick StartArchitecture中文


Resume Studio product preview

Why Resume Studio?

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.

Preview

Resume Studio Dashboard

AI Tailor — Chat-Driven Editing

Layout Builder — Visual Design

LaTeX Export

Mock Interview — Setup & Coding

Interview Report

Product Tour

Chat-Driven Resume Editing

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

Visual Layout Builder

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

JD-Aware Resume Targeting

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

Mock Interview Workspace

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

Highlights

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.

Quick Start

Environment Setup

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.

Install

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_KEY

Run Everything

npm 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

Run Services Separately

npm run dev:backend
npm run dev:frontend

Agent System

Resume 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

Key Files

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

Layout Builder

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.

Mock Interview

The mock interview flow is built for targeted practice rather than generic question lists.

Mock interview interviewer lineup

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.

Tech Stack

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

Project Structure

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

Tests

# 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 build

37 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.

Agent Evaluation

For agent behavior work, start the backend first:

python -m uvicorn src.main:app --host 127.0.0.1 --port 8000

Then 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

Document Types & Templates

  • Copy .env.example to .env before 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.

Documentation

All documentation lives in docs/. Start from the Index or jump directly to any topic:

Credits

The frontend and resume template direction were originally inspired by Resume-Matcher.

About

AI-native resume workspace — chat with an agent that edits your resume, design layouts with live preview, and practice mock interviews.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors