Never stare at a blank resume again.
Stop trying to remember everything you have done. ResumeCR7 gives you a local place to keep concrete evidence from projects, jobs, education, and skills, then turns that evidence into a tailored, ATS-friendly resume when you need one.
It is not a chatbot wrapper. The core workflow is to maintain your own career record first, then generate outputs from that record. Job descriptions can guide selection and phrasing, but they are not treated as evidence.
- I made this tool because I'm too broke to afford any AI resume builder on the market
- ResumeCR7 is for people who repeatedly need to explain their work clearly:
- Software engineers, students, and builders with project-heavy experience.
- Job seekers who tailor resumes for different roles.
- Freelancers or contractors who reuse the same work history in different formats.
- Anyone whose accomplishments are spread across GitHub, notes, tickets, portfolio pages, and memory.
ChatGPT can help rewrite a resume, but you still have to remember and paste the right facts every time. ResumeCR7 solves a different problem:
- Your evidence is structured and reusable instead of trapped in one prompt.
- Generated bullets are grounded in facts you authored or explicitly enriched.
- Skill and project selection can run deterministically with baseline fallbacks.
- Local YAML files remain inspectable, editable, and portable.
- The immediate output is a tailored
.texresume artifact, with optional PDF rendering, from the same maintained career record.
- Local resume evidence for contact info, skills, projects, experience, and education.
- React/Vite workbench for editing evidence, staging changes, setting a target role, generating LaTeX, downloading PDFs, and enriching linked evidence.
- FastAPI backend with resume evidence CRUD and a
/resume-generationfacade. - Grounded skill, project, job-focus, and bullet generation services.
- Deterministic baseline skill and project selection with optional OpenAI-backed methods.
- Local-first desktop shell using Tauri v2 and a packaged FastAPI sidecar.
- Runtime data bootstrap that creates schema-valid local files without overwriting existing user-authored evidence.
For the released Linux AppImage, ResumeCR7 bundles the frontend, the packaged FastAPI backend sidecar, and Python application dependencies. PDF rendering is the only current feature that needs a host toolchain.
To quickly check/install the PDF toolchain on Ubuntu/Debian, you may optain the installation script from the release page or from packaging/linux/, then run:
bash /path/to/install-pdf-dependencies.shFor local development:
- Python 3.12+
- uv for Python dependency management
- Node.js and npm for the frontend
- Optional:
latexmkand a TeX installation for PDF rendering
Install backend and frontend dependencies:
uv sync --extra dev
cd frontend
npm installRun the backend:
uv run resumecr7-api --reloadIn another terminal, run the workbench:
cd frontend
npm run devThe Vite dev server proxies /api/* to http://127.0.0.1:8000 by default.
Open the Vite URL shown by npm.
The packaged desktop build currently targets Linux AppImage. Windows and macOS desktop builds are planned, but not part of the current release.
For released Linux AppImage users, no Python, uv, Node.js, npm, or PyInstaller installation is required. On Ubuntu/Debian, install the PDF rendering toolchain only if you want to use Generate PDF:
bash resumecr7-install-pdf-dependencies.shYou can verify the PDF toolchain without changing the system:
bash resumecr7-check-pdf-dependencies.shFrom a source checkout, use the matching scripts under packaging/linux/.
Build the Linux desktop app from the frontend directory:
cd frontend
npm install
npm run desktop:buildOn Ubuntu, Tauri builds require WebView/GTK dependencies:
sudo apt-get update
sudo apt-get install -y \
build-essential \
pkg-config \
libwebkit2gtk-4.1-dev \
libgtk-3-dev \
libayatana-appindicator3-dev \
librsvg2-devThe desktop shell starts a bundled backend sidecar on 127.0.0.1, waits for
/health, and passes the backend URL to the frontend.
ResumeCR7 stores local user data under RESUMECR7_DATA_DIR. In local
development, the default is the repository user/ directory. In the packaged
desktop app, Tauri provides the OS app-data directory for
com.resumecr7.desktop.
Current Linux desktop location and planned Windows/macOS locations:
Linux: $XDG_DATA_HOME/com.resumecr7.desktop or ~/.local/share/com.resumecr7.desktop
macOS: ~/Library/Application Support/com.resumecr7.desktop
Windows: %APPDATA%\com.resumecr7.desktop
Runtime layout:
RESUMECR7_DATA_DIR/
resume_evidence/
user.yaml
skills.yaml
projects.yaml
education.yaml
experience.yaml
resume_generation/
config.yaml
job_target.yaml
artifacts/
resume_result.json
resume_run_manifest.json
resume.tex
resume.pdf
output/
resume.tex
resume.pdf
logs/
resumecr7.log
desktop-sidecar.log
The user/ directory is intentionally ignored by git. Safe fictional examples
live under examples/.
Resume generation writes internal artifacts under resume_generation/artifacts/
on every run; newer artifacts replace older artifacts and are useful for local
inspection and monitoring. The Config page also stores a user-facing resume
output directory in resume_generation/config.yaml. After .tex or PDF
generation, ResumeCR7 copies resume.tex and resume.pdf to that configured
output directory. PDF rendering always uses the internal artifact .tex as its
source, then copies the finished PDF to the user output directory.
Resume evidence is the source of truth. Implemented evidence files are:
user.yaml: contact/header fields.skills.yaml: categorized skills undertechnology,programming, andconcepts.projects.yaml: project records with summaries, highlights, active flags, categorized skills, and optional links.experience.yaml: work records with role, dates, location, highlights, categorized skills, and optional links.education.yaml: education records with degree, dates, location, grade, and relevant coursework.
See examples/resume_evidence/ for safe starter files.
ResumeCR7 is local-first today, and the source of truth is a small set of YAML files. That can look heavier than necessary for an editor that also sends optional LLM requests.
The FastAPI backend is intentional: it gives the app one boundary for schema validation, atomic file writes, generation orchestration, metrics, and future web-service expansion. The React workbench, desktop shell, and any future hosted surface can share the same product behavior instead of reimplementing resume evidence rules in each client.
Start the backend:
uv run resumecr7-api --reloadOpenAPI docs are available at http://127.0.0.1:8000/docs.
Primary product routes:
| Method | Path | Purpose |
|---|---|---|
GET |
/health |
Service liveness, effective config, and runtime paths |
GET |
/metrics-lite |
Aggregate request/error/latency/token counters |
GET |
/resume-evidence |
Load all registered resume evidence |
GET/PUT |
/resume-evidence/user |
Read or replace contact evidence |
GET/PUT |
/resume-evidence/skills |
Read or replace skills evidence |
GET/POST |
/resume-evidence/projects |
List or create projects |
GET/PUT/DELETE |
/resume-evidence/projects/{id} |
Read, replace, or delete a project |
GET/POST |
/resume-evidence/experience |
List or create experience records |
GET/PUT/DELETE |
/resume-evidence/experience/{id} |
Read, replace, or delete experience |
GET/POST |
/resume-evidence/education |
List or create education records |
GET/PUT/DELETE |
/resume-evidence/education/{id} |
Read, replace, or delete education |
POST |
/resume-generation/tex |
Run the full resume pipeline, write the .tex artifact, copy the user .tex, and return paths/content |
POST |
/resume-generation/pdf |
Render the current .tex artifact, copy the user PDF, and return PDF bytes |
POST |
/resume-generation/enrich-link-evidence |
Enrich project or experience evidence from links |
Lower-level capability routes are also available for testing and integration:
/select-skills, /select-projects, /derive-job-focus,
/generate-bulletpoints, and /enrich-link-evidence.
ResumeCR7 reads environment settings through app/config.py and per-run resume
generation settings through resume_generation/config.yaml in the active data
directory.
Common environment variables:
RESUMECR7_DATA_DIR=user
RESUMECR7_PACKAGED=false
SKILL_METHOD=baseline # baseline, embeddings, llm
SKILL_TOP_N=10
PROJ_METHOD=llm # baseline, llm
DEV_MODE=true
LOG_LEVEL=INFO
LLM_PROVIDER=openai # openai, qwen
OPENAI_API_KEY=your_key_here
QWEN_API_KEY=your_qwen_key_here
# DASHSCOPE_API_KEY can also provide the Qwen key.
QWEN_BASE_URL=https://dashscope-us.aliyuncs.com/compatible-mode/v1
RESUMECR7_GITHUB_TOKEN=github_pat_for_private_repo_scanningOPENAI_API_KEY is required for OpenAI-backed embeddings and OpenAI-backed LLM
features. QWEN_API_KEY or DASHSCOPE_API_KEY is required when
LLM_PROVIDER=qwen for LLM-backed selection, job-focus generation, bullet
generation, and enabled link scanning. Baseline paths remain functional without
LLM provider keys.
Private GitHub repository link scanning can use RESUMECR7_GITHUB_TOKEN
or GITHUB_TOKEN, or a saved token in the local generation config. Use a
fine-grained GitHub token scoped to only the repositories you want ResumeCR7 to
read, with repository contents read access.
HTTP clients used by LLM-backed features also honor standard proxy environment
variables, including HTTP_PROXY, HTTPS_PROXY, ALL_PROXY, and NO_PROXY
and their lowercase variants. For HTTP/HTTPS proxies, set proxy URLs with an
http:// or https:// scheme. If ALL_PROXY or another proxy variable uses a
SOCKS scheme such as socks://, socks5://, or socks5h://, the Python
environment must include SOCKS support through the declared httpx[socks]
dependency.
app/ FastAPI backend and product services
frontend/ React/Vite workbench and Tauri desktop shell
resume_evidence/ compatibility shims and CLI entrypoints
resume_generation/ compatibility shims and CLI entrypoints
data/ durable evaluation and skill-pool assets
examples/ fictional evidence/config examples
tests/ backend test suite
scripts/ build, eval, and release helper scripts
docs/
architecture-overview.md
development.md
screenshots/
Start architecture work with docs/architecture-overview.md and
docs/development.md.
- Create a focused branch.
- Install dependencies with
uv sync --extra devandcd frontend && npm install. - Add or update tests for non-trivial behavior changes.
- Run backend tests with
uv run pytest. - Run frontend checks with
cd frontend && npm test && npm run build. - For release metadata changes, run
uv run python scripts/validate_release.py --tag vX.Y.Z. - Open a pull request that explains the user-visible behavior and test coverage.
Near-term work:
- Support for Windows and macOS desktop builds.
- Signed installers before broad desktop distribution.
- Automatic updater integration.
- Async generation-run lifecycle after the local facade shape stabilizes.
- Easier manipulation, editing of generated resume, maybe a real-time editor.
- Quicker generation with multithreaded or multiprocess LLM calls.
- Wider LLM support (currently only OpenAI), including open-source models and local inference.
- More resume templates and auto-formatting. For example, dynamic font sizing, line spacing, and page breaks based on content length. Or an estimation/warning if the current content will not fit on a single page.


