后端需先复制 .env.example 为 .env 并配置 AI 供应商,否则无法调用模型;Docker 中用 Ollama 要把地址改成 http://host.docker.internal:11434;Claude 订阅方式依赖本机已安装并登录的 claude CLI,且 Docker 镜像内不可用。

Resume-Matcher
srbhrApache-2.0活跃维护本地运行的简历匹配与生成工具,用 100+ 大模型解析简历、计算与职位描述的文本相似度,并生成 PDF 和求职信。
The #1 AI Harness for Building Resumes, PDFs, Cover Letters & more, locally with 100+ LLMs support.
git clone https://github.com/srbhr/Resume-Matcher.git && cd Resume-Matcher
cd apps/backend && cp .env.example .env && uv sync && uv run app
cd apps/frontend && npm install && npm run devREADME 未说明显存或 GPU 要求;本地模型需通过 Ollama 运行,其余情况用云端 API 即可,CPU 环境可跑。
自托管的简历定制工具,用本地或云端 LLM 按岗位描述改写简历并导出 PDF
本地运行的简历匹配与生成工具,用 100+ 大模型解析简历、计算与职位描述的文本相似度,并生成 PDF 和求职信。
核心能力
- 上传主简历和岗位描述,由 AI 生成定制化改写建议
- 支持 Ollama 本地模型及 OpenAI、Anthropic、Gemini 等云端供应商
- ATS 评分与解析检查由纯代码实现,不调用 LLM
- 内置 Deedy、LaTeX 风格等单栏双栏简历模板
- 提供 MCP server,可由 Claude Code、Cursor 直接驱动
容易踩的坑
- v1.4.01.4 Short Circuit最新正式版2026-10-21 · 2026-10-21 20:38 UTC
Resume Matcher 1.4: Short Circuit
Short Circuit makes the resume itself better, not only better matched. Every tailoring run now critiques its own writing and rewrites the weak lines without adding a single fact, you can push a missing job keyword in when you confirm you have it, and you can watch each stage of the work as it happens. It also brings agent mode, an MCP server, new templates and multi-page resumes, and a round of security hardening.
Named after Short Circuit from Daft Punk's Discovery, this release continues the v1 series after 1.3 Crescendolls.
What's new
Writing that holds up
- Critique and rewrite in every tailoring run. Fixed rules and an AI critic check each bullet and the summary. Lines with an em dash, a weak opener such as "Responsible for", or no stated outcome get one rewrite. A fact check drops any rewrite that adds or loses a number, name, tool or skill, so your work stays on the page and nothing is invented. Light nudge only critiques.
- Writing score. A 0 to 100 score from the fixed rules (the same with every AI provider), with before and after, the lines to fix and the reviewer's notes.
- Improve writing in the Builder. A new Writing tab scores any resume, master included, and rewrites its weak lines. You review every change before it goes into the editor.
- Heavy rewrite. A fourth tailoring mode for bigger edits: full Challenge, Action, Result rewrites, a new summary and reordered bullets, with a clear hallucination warning.
- Evidence-based cover letters. One page, usually 200 to 300 words: a hook tied to the job, two or three matching examples, a company-fit paragraph grounded in the job description and a specific close. Contributed by @AlexanderMorris2k.
Keywords on your terms
- Add missing keywords. In the review dialog, missing job keywords become chips. Keywords your master shows are applied directly; a keyword it does not show needs your "I have this". Each one goes into your skills plus at most two lines where it fits, and nothing else is added around it.
- See where they went. The dialog lists where every keyword landed, marks it in the changed lines and shows the ATS score before and after. JD Match highlights the keywords you added in blue, and interview prep asks about them first.
- One match number. JD Match now shows the same keyword match as the ATS score, and keeps C++, .NET, Node.js and CI/CD whole.
- A sharper ATS score. It now scores the job title and date consistency, and the builder keeps the last calculated score with a Recalculate button. Contributed by @himalyansailor.
- ATS parse check. A new ATS CHECK tab shows whether a plain text extractor can read your exported PDF in the right order.
Watch it work
- Live progress. Tailoring shows each real stage as it runs, with a note when a slow model needs a minute.
- Tailoring queue. Queue several job descriptions and tailor them one after another, with cooldowns that respect rate limits. Contributed by @coolb0y.
Use it your way
- Agent mode. Open Claude Code, Codex, Cursor, Copilot or Antigravity in the repo and ask it to tailor your resume: no API key, and the web app updates live as the agent saves.
- MCP server. Its tools let any MCP client drive Resume Matcher against the same database as the app. Contributed by @rrvrs.
- Claude Code and ChatGPT plans as providers. Run on a Claude Code install with no API key (contributed by @GongYuanCaiJi), pick its model, or sign in with a ChatGPT plan, with a clear note on subscription risk.
- Optional PostgreSQL for larger or shared setups.
More control over the resume
- Several master resumes. Keep up to five, one per career track; tailoring picks the strongest bullets with code, not the AI.
- Page limit and bullet cap settings for tailoring. Contributed by @himalyansailor.
- New templates: Deedy, Modern Deedy and Vivid Singl
- v1.3.01.3 Crescendolls2026-09-06 · 2026-09-06 09:20 UTC
查看更新说明
Resume Matcher 1.3 — Crescendolls
Crescendolls brings resume creation, tailoring, application tracking, and interview preparation into one workflow. It also strengthens the steps you depend on most: uploading a resume, saving your work, applying AI suggestions, and exporting a PDF.
Named after Crescendolls from Daft Punk’s Discovery, this release continues the v1 series after 1.2 Nightvision.
What’s new
Build a resume from the beginning
The guided resume wizard helps you turn your experience into a resume through an adaptive conversation. Save a draft, return to it later, and continue refining the result in the builder.
Follow the application through
The application tracker gives you a board for organizing jobs, recording notes, and keeping applications connected to tailored resumes. Interview preparation helps you prepare for the next step using your resume and the job description.
More control over your resume and AI
- Three new templates: LaTeX, Clean, and Vivid.
- More language support: French and Korean interfaces and improved Chinese, Japanese, and Korean PDF rendering.
- More AI options: Groq, Azure AI Foundry, and OpenAI-compatible servers, reasoning controls, and custom prompts for cover letters and outreach messages.
- Clearer tailoring feedback: expanded score breakdowns and improved job-description skill alignment across more resume sections.
More dependable, from upload to export
This release includes a reviewed reliability update spanning 17 pull requests and 44 tracked issues.
- Recover interrupted uploads. Retain the identity of a saved resume when its response is interrupted, and handle empty or invalid documents more clearly.
- Keep useful work. Improve draft recovery, save behavior, preview confirmation, and handling of partial AI results.
- Handle failures consistently. Bound AI operation times and retries, improve malformed-response handling, and provide clearer error messages.
- Preserve resume content. Strengthen checks around original information and recognize Latin skill names beside Chinese, Japanese, and Korean text.
- Improve PDF reliability. Handle concurrent exports, cancellation, and browser shutdown while retaining ownership of resources still in use.
The reliability stack preserves 124 individual commits. Its review evidence and file map are included in the repository.
Security update
This release includes the security bump merged in PR #993: NanoID 3.3.16 → 3.3.18.
The update addresses CVE-2026-67213, where a custom ID generator could loop indefinitely when asked for a zero-length ID.
Upgrading from 1.2
Stop the application and back up the complete persistent data directory before upgrading. This release moves storage to SQLite and stores provider API keys encrypted at rest. On startup, it imports a legacy TinyDB database when SQLite is empty and migrates legacy saved keys.
Keep the database,
config.json, uploaded files, and the hidden.secret_keytogether. Existing encrypted keys need their original secret to be decrypted. Retain your pre-upgrade backup if you need to return to 1.2; the migrated SQLite database cannot replace the old version’s database.For source installs, use Node.js 22+ and Python 3.13+, then reinstall dependencies following the README. For Docker upgrades, preserve your existing data volume when recreating the container.
Docker images
Release tag:
v1.3.0. Versioned images are available for Linux amd64 and arm64 on GHCR and Docker Hub:docker pull ghcr.io/srbhr/resume-matcher:1.3.0 # or docker pull srbhr/resume-matcher:1.3.0The image tags are
1.3.0and1.3. [Release-tag publication](https://github.com/srbhr/Resum - 1.2.01.2 Nightvision2026-04-02 · 2026-04-02 09:50 UTC
查看更新说明
Resume Matcher's 1.2 Release - Title'd "Nightvision"
Diff-based improvement engine, single-port Docker architecture, hardened tailor pipeline, performance optimizations, and documentation fixes.
What's Changed
- feat(frontend): title-based monograms and colors for dashboard cards by @christian-deleon in https://github.com/srbhr/Resume-Matcher/pull/671
- feat: add agent skills, GitHub Copilot agents, prompts, and UI fixes by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/673
- feat: add drag-and-drop reordering for experience and education items by @Konstantin-Lasiy in https://github.com/srbhr/Resume-Matcher/pull/676
- chore(deps): bump markdown-it from 14.1.0 to 14.1.1 in /apps/frontend by @dependabot in https://github.com/srbhr/Resume-Matcher/pull/677
- Use resume title for PDF download filenames by @navin0812 in https://github.com/srbhr/Resume-Matcher/pull/678
- fix: replace invalid deepseek-v3.2 model ID with deepseek-chat by @henrique-leme in https://github.com/srbhr/Resume-Matcher/pull/680
- Switch to single public port and adjust API routing by @webysther in https://github.com/srbhr/Resume-Matcher/pull/683
- Single public port, Docker CI, and review fixes by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/686
- fix: allow retry/delete for resumes stuck in 'processing' state by @shivangtanwar in https://github.com/srbhr/Resume-Matcher/pull/689
- docs(readme): update sponsors image by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/690
- fix: Docker build failure, graceful shutdown, CORS auto-include by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/696
- fix(backend): coerce custom section items and retry on truncated JSON by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/703
- Harden resume tailor pipeline by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/713
- chore(deps): bump undici from 7.21.0 to 7.24.1 in /apps/frontend by @dependabot in https://github.com/srbhr/Resume-Matcher/pull/714
- Code reduction, bug fixes, and performance optimizations by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/715
- chore(deps): bump next from 16.1.6 to 16.1.7 in /apps/frontend by @dependabot in https://github.com/srbhr/Resume-Matcher/pull/717
- chore(deps): bump dompurify from 3.3.1 to 3.3.3 in /apps/frontend by @dependabot in https://github.com/srbhr/Resume-Matcher/pull/718
- chore(deps-dev): bump flatted from 3.3.3 to 3.4.2 in /apps/frontend by @dependabot in https://github.com/srbhr/Resume-Matcher/pull/721
- Diff-based improvement engine, provider fixes, and test suite by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/722
- feat: personalize PDF download filenames with name and company by @JherrerasPY in https://github.com/srbhr/Resume-Matcher/pull/727
- chore(deps): bump picomatch in /apps/frontend by @dependabot in https://github.com/srbhr/Resume-Matcher/pull/728
- docs: fix documentation discrepancies with codebase by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/733
- Release 1.2 Nightvision by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/734
New Contributors
- @Konstantin-Lasiy made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/676
- @navin0812 made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/678
- @henrique-leme made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/680
- @webysther made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/683
- @shivangtanwar made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/689
- @JherrerasPY made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/727
Full Changelog: https://github.com/srbhr/Resume-Matcher/compare/1.1.0...1.2.0
- 1.1.01.1 Voyager2026-02-10 · 2026-02-10 13:32 UTC
查看更新说明
Resume Matcher's 1.1 Release - Title'd "Voyager"
Fixes bugs, updates to the prompting structure, fixes windows bugs, and docker configs too.
What's Changed
- fix(main): improve Windows compatibility for asyncio event loop by @Itz-Viggy in https://github.com/srbhr/Resume-Matcher/pull/599
- docs: update Docker instructions in README and docker-compose by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/600
- fix(settings): OpenRouter test connection uses form values instead of… by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/603
- docs: localize setup guide and readme (EN/ES/zh-CN/ja) by @GwIhViEte in https://github.com/srbhr/Resume-Matcher/pull/612
- fix(i18n): complete builder/enrichment localization by @GwIhViEte in https://github.com/srbhr/Resume-Matcher/pull/615
- fix(backend): normalize llm api_base and harden response parsing by @GwIhViEte in https://github.com/srbhr/Resume-Matcher/pull/616
- New Feature: Added support for draggable resume sections by @codedbymalik in https://github.com/srbhr/Resume-Matcher/pull/614
- feat(prompts): add prompt selection and configuration by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/617
- Fix/pdf i18n build by @GwIhViEte in https://github.com/srbhr/Resume-Matcher/pull/618
- feat(config): add kilo code configuration file by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/623
- feat: enhance LLM health check details and prevent output truncation by @GwIhViEte in https://github.com/srbhr/Resume-Matcher/pull/622
- docs: update README files and sponsorship details by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/625
- Add Portuguese language support with content language awareness by @lucasalopess in https://github.com/srbhr/Resume-Matcher/pull/619
- refactor: restructure agent documentation, consolidate design and arc… by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/630
- refactor: restructure agent documentation, consolidate design and arc… by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/629
- feat(tailor): implement fake content prevention and change diff system by @GwIhViEte in https://github.com/srbhr/Resume-Matcher/pull/627
- chore(deps): bump esbuild, vite and vitest in /apps/frontend by @dependabot[bot] in https://github.com/srbhr/Resume-Matcher/pull/632
- Add AGENT skills for non claude code agents by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/634
- style: improve styling and add gradient backgrounds by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/635
- feat: AI Regenerate functionality for Resume Builder by @GwIhViEte in https://github.com/srbhr/Resume-Matcher/pull/637
- feat(docs): add comprehensive agent and skill documentation by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/638
- chore(deps): bump next from 16.1.1 to 16.1.5 in /apps/frontend by @dependabot[bot] in https://github.com/srbhr/Resume-Matcher/pull/642
- feat(refinement): implement multi-pass resume refinement by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/645
- feat(builder): implement AI regeneration for experience, projects by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/646
- [WIP] WIP Address feedback on Voyager pull request by @Copilot in https://github.com/srbhr/Resume-Matcher/pull/648
- fix: Use BACKEND_PORT variable in uvicorn command by @Copilot in https://github.com/srbhr/Resume-Matcher/pull/649
- Voyager by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/647
- fix(i18n): add missing upload dialog keys for zh.json by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/651
- fix: LLM parsing errors and Docker config validation by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/656
- fix(settings): replace with next/image component by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/659
- feat(backend): add retry endpoint for failed resume processing by @srbhr in https://github.com/srbhr/Resume-Matcher/pull/660
- fe
- 1.0.0v1.0.02026-01-06 · 2026-01-06 17:19 UTC
查看更新说明
Resume Matcher Release v1.0.0 - Aerodynamic
Hiya folks!
I'm really excited to bring you the first stable release for Resume Matcher.

Features
- Tailored Resume Creation
- Multiple ATS Compatible Templates
- Support for Multiple AI providers
- Easy Docker Support
- and more ... check : Features
New Contributors
- @rrvrs made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/336
- @SoorajSNBlaze333 made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/375
- @JustinXre2020 made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/376
- @dxncrv made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/403
- @zpratikpathak made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/396
- @darshan15062002 made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/398
- @sravandeep2004 made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/404
- @TSteeley made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/397
- @Charlemagnes made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/454
- @daniel-idowu-01 made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/432
- @Sebastian-hass made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/456
- @elliotclee made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/457
- @GabrielMensi made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/474
- @victorlane made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/452
- @gingeekrishna made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/411
- @nopgadget made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/481
- @SSOURABH58 made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/493
- @MohamadAshrafSalama made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/490
- @HarshitR2004 made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/516
- @dimitarmanov made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/495
- @survivant made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/517
- @iHirenDev made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/499
- @Vasanthrs-dev made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/437
- @heellworld made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/530
- @aminishere made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/518
- @gkmngrgn made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/539
- @tdelavy made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/540
- @Copilot made their first contribution in https://github.com/srbhr/Resume-Matcher/pull/556
Full Changelog: https://github.com/srbhr/Resume-Matcher/compare/0.1.2-old-resume-matcher...1.0.0
Thanks to Apideck for Sponsoring Resume Matcher. ✨
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
Resume Matcher
𝙹𝚘𝚒𝚗 𝙳𝚒𝚜𝚌𝚘𝚛𝚍 ✦ 𝚆𝚎𝚋𝚜𝚒𝚝𝚎 ✦ 𝙷𝚘𝚠 𝚝𝚘 𝙸𝚗𝚜𝚝𝚊𝚕𝚕 ✦ 𝙲𝚘𝚗𝚝𝚛𝚒𝚋𝚞𝚝𝚘𝚛𝚜 ✦ 𝚂𝚙𝚘𝚗𝚜𝚘𝚛 ✦ 𝚃𝚠𝚒𝚝𝚝𝚎𝚛/𝚇 ✦ 𝙻𝚒𝚗𝚔𝚎𝚍𝙸𝚗 ✦ 𝙲𝚛𝚎𝚊𝚝𝚘𝚛
English | Español | 简体中文 | 日本語 | Português (BR)
Free, open-source resume builder that tailors your resume (CV) to each job description. A self-hosted AI harness for Claude, ChatGPT, DeepSeek, Kimi, GLM, Gemma and other LLMs, local or remote.

[!IMPORTANT]
The project needs your help and support. If you can donate a small amount, that will help me to continue developing and improving Resume Matcher.
Sponsoring for a company? Put your logo in front of 27k+ developers → become a sponsor ↓
Getting Started
Resume Matcher works by creating a master resume that you can use to tailor for each job application. Installation instructions here: How to Install
How It Works
- Upload your master resume (PDF or DOCX)
- Paste a job description you're targeting
- Review AI-generated improvements and tailored content
- Cover Letter and optional interview preparation for the job application
- Customize the layout and sections to fit your style
- Export as a professional PDF with your preferred template
Built for Software Engineers
Installing Resume Matcher takes a terminal, so most of the people running it write software. It fits the way you already work:
- It runs on your machine. A FastAPI backend, a Next.js frontend and a SQLite file. Clone the repo or start one Docker container. You don't create an account, and your resume stays in your own database.
- You choose the model. Bring an API key for OpenAI, Anthropic, Gemini, DeepSeek, OpenRouter or Groq, or run a local model with Ollama so your resume never leaves the machine.
- Claude Code can drive it. The MCP server lets Claude Code, Cursor or Codex write the tailored resume while Resume Matcher stores, checks and renders it, with no LLM key.
- It sticks to your real experience. The tailoring prompts forbid adding skills, tools, employers or metrics that aren't in your master resume.
- The scores are plain code. The ATS score (
services/ats.py) and the ATS check (services/ats_parse/) make no LLM call. The ATS check runs your PDF through pdfminer to show what an applicant tracking system would extract. - The templates look like engineering resumes. Deedy, Modern Deedy and a LaTeX-style layout sit next to single- and two-column options. Seven of the designs also come as editable pdfLaTeX projects for Overleaf in resume-matcher-templates.
Stay Connected
Join our Discord for discussions, feature requests, and community support.
Follow us on LinkedIn for updates.

Star the repo to support development and get notified of new releases.
Sponsors

Resume Matcher is free and open-source, kept alive by its sponsors and backers. If it helps you, please consider supporting its development.
Companies backing Resume Matcher
Sponsor at a company tier and your logo + link + blurb lands here — in front of a community of 27k+ stars and 4.9k forks, featured on Trendshift and the Vercel OSS Program.
| Sponsor | Description |
|---|---|
| Apideck | One API to connect your app to 200+ SaaS platforms (accounting, HRIS, CRM, file storage). Build integrations once, not 50 times. 🌐 apideck.com |
| Vercel | Resume Matcher is a part of Vercel OSS // Summer 2025 Program 🌐 vercel.com |
| Cubic.dev | Cubic provides PR reviews for Resume Matcher 🌐 cubic.dev |
| Kilo Code | Kilo Code provides AI code reviews and coding credits to Resume Matcher 🌐 kilo.ai |
| ZanReal | ZanReal is an AI-driven development company building scalable cloud solutions, from strategy and UX to DevOps, helping teams ship faster and turn ideas into production. 🌐 zanreal.com |
| ✦ Your company here | Reach 27k+ developers and 4.9k forks. Become a sponsor → |
Read the Sponsorship Guide for tiers and details. Sponsors get a special thank-you in the README and on our website.
Support as an individual

Every bit keeps Resume Matcher free and funds new features — and you'll be thanked in the README and on our website.
| Platform | Link |
|---|---|
| GitHub | |
| Buy Me a Coffee |
Creators' Note
Thank you for checking out Resume Matcher. If you want to connect, collaborate, or just say hi, feel free to reach out! ~ Saurabh Rai ✨
You can follow me on:
- Website: https://srbhr.com
- Linkedin: https://www.linkedin.com/in/srbhr/
- Twitter: https://twitter.com/srbhr_r
- GitHub: https://github.com/srbhr
Key Features

Core Features
Master Resume: Create a comprehensive master resume to draw from your existing one.

Resume Builder

Paste in a job description and get AI-powered resume tailored for that specific role.
You can:
- Modify suggested content
- Add/remove sections
- Rearrange sections via drag-and-drop
- Choose from multiple resume templates
Cover Letter Generator
Generate tailored cover letters based on the job description and your resume.
The default writing approach uses a specific opening hook, two or three relevant experience examples, a company-fit paragraph grounded in the supplied job description, and a confident call to action. Letters aim for 200–300 words and adapt tone and regional conventions when the inputs provide enough context. Names, metrics, company research, and personal motivations must be supported by the supplied information. Existing custom cover-letter prompts in Settings continue to override the default.
This approach is adapted from the jezweb resume-cover-letter skill. Resume Matcher's existing editor, preview, and PDF export remain available.

Interview Preparation
Generate structured, resume-grounded interview prep for saved tailored resumes. Use the Builder's Interview Prep tab on demand, or enable automatic generation in Settings.
Tailoring Queue
Paste several job descriptions on the Tailoring Queue page and they are tailored from your master resume one after another in the background. Role, company and job ID are detected from the text without an AI call, and you can edit them. An optional cooldown between jobs (0 to 60 seconds) lowers the risk of hitting your provider's rate limits. Queued jobs are kept in the database and resume after a restart.
ATS Score, ATS Check & Keyword Highlighting
The JD Match tab shows the job description beside your resume with the shared keywords highlighted, plus an ATS score out of 100: keyword match (40%), skills coverage (20%), job-title match (15%), section completeness (15%) and date consistency (10%). It lists the missing keywords, and the ones your master resume already has, so you can add those without inventing anything.
The ATS Check tab renders your PDF and reads the text back the way an applicant tracking system's text extractor does, then reports parseability, reading order, contact details and section headings. Both run as plain code. What is an ATS score? explains the formulas.

PDF Export
Export your tailored resume and cover letter in PDF.
Templates
The templates export text-based PDFs in A4 or US Letter that applicant tracking systems can parse.
| Template Name | Preview | Description |
|---|---|---|
| Single Column | ![]() | Traditional full-width layout with maximum content density. 𝐕𝐢𝐞𝐰 𝐏𝐃𝐅 |
| Two Column | ![]() | Experience-focused main column with sidebar for skills. 𝐕𝐢𝐞𝐰 𝐏𝐃𝐅 |
| Modern | ![]() | Colorful accents with customizable theme colors. 𝐕𝐢𝐞𝐰 𝐏𝐃𝐅 |
| Modern Two Column | ![]() | Two-column layout with modern colorful accents and themes. 𝐕𝐢𝐞𝐰 𝐏𝐃𝐅 |
| LaTeX | ![]() | Classic serif academic layout with ruled section headers. 𝐕𝐢𝐞𝐰 𝐏𝐃𝐅 |
| Clean | ![]() | Minimal sans layout with large understated section headers. 𝐕𝐢𝐞𝐰 𝐏𝐃𝐅 |
| Vivid | ![]() | Colorful two-column layout with accent headers and arrow bullets. 𝐕𝐢𝐞𝐰 𝐏𝐃𝐅 |
| Vivid Single Column | ![]() | Colorful single-column layout with accent headers and arrow bullets. 𝐕𝐢𝐞𝐰 𝐏𝐃𝐅 |
| Modern Deedy | ![]() | Dense one-page layout in Lato with light grey uppercase section headings. 𝐕𝐢𝐞𝐰 𝐏𝐃𝐅 |
| Deedy | ![]() | Two-column layout with a hairline name, a narrow left column and light gray headings. 𝐕𝐢𝐞𝐰 𝐏𝐃𝐅 |
Internationalization
- Multi-Language UI: Interface available in English, Spanish, Chinese, Japanese, Brazilian Portuguese, French and Korean
- Multi-Language Content: Generate resumes and cover letters in your preferred language
Roadmap
If you have any suggestions or feature requests, please feel free to open an issue on GitHub or discuss it on our Discord server.
- AI Canvas for crafting impactful, metric-driven resume content
- Email template generator for job applications
- Multi-job description optimization
Resume Guides for Software Engineers
The Resume Matcher blog has writing guides for developers, from a first internship resume to a FAANG application:
- Software engineer resume: a one-page template, two annotated examples and advice for each section
- Computer science resume: for students and new grads, built from projects and internships
- FAANG resume: what Google, Meta and Amazon say they screen for, from their own careers pages
- LaTeX resume: Jake's, sb2nov and Awesome-CV, Overleaf, and how a parser reads the PDF
- Open source resume builders: Reactive Resume, RenderCV, YAMLResume, Awesome-CV and others compared
- Master resume: the one complete resume you tailor each application from
- Tailor your resume to a job description: the method, step by step
- Private AI resume tailoring with Ollama: keep your resume on your own machine
- What is an ATS score?: how resume checkers calculate a score, with Resume Matcher's formulas
- ChatGPT prompts for resume tailoring: prompts for ChatGPT and Claude that don't invent experience
How to Install

For detailed setup instructions, see SETUP.md (English) or: Español, 简体中文, 日本語, Português (BR).
Prerequisites
| Tool | Version | Installation |
|---|---|---|
| Python | 3.14+ | python.org |
| Node.js | 24.22.1 (pinned in .nvmrc) | nodejs.org |
| uv | Latest | astral.sh/uv |
Quick Start
Fastest for MacOS, WSL and Ubuntu users:
# Clone the repository
git clone https://github.com/srbhr/Resume-Matcher.git
cd Resume-Matcher
# Backend (Terminal 1)
cd apps/backend
cp .env.example .env # Configure your AI provider
uv sync # Install dependencies
uv run app
# Frontend (Terminal 2)
cd apps/frontend
npm install
npm run dev
Open http://localhost:3000 and configure your AI provider in Settings.
Windows 11: see Windows 11 Setup for PowerShell commands.
Supported AI Providers
| Provider | Local/Cloud | Notes |
|---|---|---|
| Your coding agent | Local | No API key. Open Claude Code, Codex, Cursor or Copilot in this folder and ask it to set up Resume Matcher and tailor your resume: the agent does the AI work in its own app, and Resume Matcher stores, checks and renders the result for you to edit. Choose Coding agent in Settings. See SETUP.md. |
| Ollama | Local | Free, runs on your machine |
| Claude subscription (via Claude Code) | Cloud (via local CLI) | Runs your installed claude CLI, so this app needs no API key and never sees or stores your Claude credentials, but prompts still go to Anthropic through your Claude Code login and count toward your plan's usage limits (Anthropic may draw them from usage credits instead). Anthropic doesn't allow third-party apps to route requests through Claude Free/Pro/Max plans, this option may count as one, and Anthropic can enforce that without notice; Settings asks you to accept that risk first. For guaranteed access, use the Anthropic provider with an API key, or let Claude Code do the work as your coding agent. Set LLM_PROVIDER=claude_cli; pick the model in Settings or with LLM_MODEL (fable, opus, sonnet, haiku or a full claude-… name). Requires Claude Code installed and signed in (claude auth login); not available inside the Docker images. |
| ChatGPT plan (Sign in with ChatGPT) | Cloud | Community-built. Uses OpenAI's official Sign in with ChatGPT for open-source apps (preview, may change) with ChatGPT Plus or Pro: choose ChatGPT plan in Settings and click Continue with ChatGPT; no API key needed. Requests go from your machine to OpenAI's Responses API and count toward your plan's limits (on Plus the five-hour limit is shared with your other apps; Pro has none). Sign in from a browser on the machine running the backend; the default Docker setup can't complete the sign-in (see SETUP.md). For guaranteed access, use the OpenAI provider with an API key. Set LLM_PROVIDER=chatgpt. |
| OpenAI | Cloud | GPT-5 Nano, GPT-4o |
| Anthropic | Cloud | Claude Haiku 4.5 |
| Google Gemini | Cloud | Gemini 3 Flash |
| OpenRouter | Cloud | Access to multiple models |
| DeepSeek | Cloud | DeepSeek Chat |
| Groq | Cloud | Llama 3.3 70B, GPT-OSS |
Docker Deployment
Official Docker images are published for linux/amd64 and linux/arm64 on:
ghcr.io/srbhr/resume-matchersrbhr/resume-matcher
Run on a single public port (3000) with API available at /api:
docker run --name resume-matcher \
-p 3000:3000 \
-v resume-data:/app/backend/data \
ghcr.io/srbhr/resume-matcher:latest
Prefer pinning a version in production, for example ghcr.io/srbhr/resume-matcher:1.4.0 or
ghcr.io/srbhr/resume-matcher:1.4.
Endpoints:
- App: http://localhost:3000
- API health check: http://localhost:3000/api/v1/health
- API docs: http://localhost:3000/docs
Using Ollama with Docker? Use
http://host.docker.internal:11434as the Ollama URL instead oflocalhost(on Linux, Ollama must also listen beyond127.0.0.1; see SETUP.md). Docker publishes the app on127.0.0.1only; to open it from another device, see SETUP.md.
Tech Stack
| Component | Technology |
|---|---|
| Backend | FastAPI, Python 3.14+, LiteLLM |
| Frontend | Next.js 16, React 19, TypeScript |
| Database | SQLite by default, optional PostgreSQL (SQLAlchemy 2.0) |
| Styling | Tailwind CSS 4, Swiss International Style |
| Headless Chromium via Playwright |
Join Us and Contribute

We welcome contributions from everyone! Whether you're a developer, designer, or just someone who wants to help out. All the contributors are listed in the about page on our website and on the GitHub Readme here.
Check out the roadmap if you would like to work on the features that are planned for the future. If you have any suggestions or feature requests, please feel free to open an issue on GitHub and discuss it on our Discord server.
Contributors














