Tailor. Build. Write. Track.

Everything Resume Matcher does, in the order you'll use it. Paste a job description, review every change the AI proposes, polish the resume in the builder, write the cover letter and track the application. On your own machine, with the AI model you choose.

The Resume Builder: the editor panel with the template picker on the left, and a live one-page preview of a senior software engineer's resume on the right, with tabs for Cover Letter, Outreach Mail, Interview Prep, JD Match and ATS Check

One master resume, a tailored copy for every job.

  1. 1

    Connect an AI model. In Settings: a cloud provider with your own API key, or a local model.

  2. 2

    Add a master resume. Upload a PDF or Word file, or build one with the Resume Wizard.

  3. 3

    Paste a job description. The AI proposes targeted edits to your master resume.

  4. 4

    Review the changes. In a before-and-after preview, then confirm or regenerate.

  5. 5

    Polish it in the builder. Pick a template, adjust the layout, edit anything.

  6. 6

    Generate the extras. A cover letter, an outreach message and interview prep for the same job.

  7. 7

    Download. The resume and the cover letter, as PDFs.

  8. 8

    Track the application. On a Kanban board. Confirming a tailored resume adds its card for you.

The dashboard: the master resume tile marked Default, an Add master track tile (up to 5 master resumes), seven tailored resumes titled Role @ Company with their edit dates, a Create Resume tile, and Tailoring Queue, Application Tracker and Settings buttons
Your master resume is never overwritten. Each tailored version is saved as its own resume, linked to the master it came from and the job it was written for. The screenshots on this page use a demo profile: Sarah Chen and every company shown are fictional.

Tailor. Paste a job description, then check every change.

Tailoring rewords what's already in your resume. It doesn't invent experience, and on the Tailor page nothing is saved until you've read the changes and confirmed them.

  • 2 pages

    default page limit, with the least relevant bullets trimmed to fit

  • 0

    new numbers: a rewritten line that adds one is reverted

  • 4 min

    time limit on a tailoring run, by default

Start from a master resume

A master resume is your complete, untailored resume: every job, project and skill in one place. Upload a PDF, DOC or DOCX file up to 4 MB and the AI turns it into structured sections you can edit, keeping a copy of the original text. Scanned, image-only PDFs have no text layer and are rejected; run them through OCR first.

No resume file? The Resume Wizard asks one question at a time, at most 15, and builds the resume in a live draft as you answer. It's instructed never to invent employers, titles, dates, degrees, certifications, metrics, tools or skills.

Keep up to five master resumes as career tracks, say one for backend roles and one for ML. Exactly one is the default, and the Tailor page starts from it.

The Resume Wizard asking its first question, what's your name and what kind of role are you going for, with an answer box and an empty Live Draft panel on the right

Paste the job description

Pick how hard to tailor, set a page limit (1–3 pages, or none) and how many bullets to keep per role, paste the posting (up to 100,000 characters) and click Generate Tailored Resume.

Light nudge
Minimal edits to better align your existing experience.
Keyword enhance
The default. Blends in relevant keywords without changing role or scope.
Full tailor
Comprehensive tailoring using the job description.
The Tailor Your Resume page: the tailoring intensity set to Keyword enhance, the page limit set to 2 pages, bullets per role set to All, a job description for a Senior AI Engineer, LLM Platform pasted in, and the Generate Tailored Resume button

What happens behind the button

  1. 1

    Job analysis

    AI

    The AI extracts the company, role, required and preferred skills, key responsibilities and keywords. They're saved with the job, which is how the tracker card later gets its company and role without another AI call.

  2. 2

    Bullet selection

    AI Code

    The AI scores each bullet point for relevance to the job. It only scores; it can't rewrite or invent bullets. Code then keeps the most relevant bullets per job or project, up to your cap, and by actually rendering the page drops the least relevant ones until the resume fits your page limit.

  3. 3

    Skill plan

    AI Code

    The AI proposes which skills to emphasise. Code accepts a skill only if it's already in your resume, appears in your resume's text, or is a required or preferred skill that appears word for word in the job description.

  4. 4

    Targeted edits

    AI Code

    Instead of rewriting your whole resume, the AI returns a list of specific edits, each quoting the original text it replaces. Code verifies every quote against your resume and rejects edits aimed at protected fields.

  5. 5

    Safety nets and polish

    Code

    Code restores your personal details and dates, keeps every original skill, removes a list of overused "AI-sounding" phrases (unless the job description uses them), and reverts any rewritten line that introduces a number your original doesn't contain.

The whole run has a time limit, four minutes by default, so a slow model can't hang the app.

Review before anything is saved

The Review AI Tailoring Results dialog: a change summary of 2 skills added, 0 skills removed, 0 certifications added, 3 descriptions modified and 1 high-risk change; the note Kept 8 of 14 bullets, trimmed 4 more to fit the page limit; a high-risk warning; the old and new summary as a diff; and Reject & Regenerate and Confirm & Save buttons

The preview shows:

  1. A change summary: skills added and removed, certifications added, descriptions modified, and high-risk changes.

  2. What bullet selection did, for example "Kept 8 of 14 bullets (up to 3 per job or project) · Trimmed 4 more to fit the page limit".

  3. A high-risk warning when the AI added something, usually a skill taken from the job description, so you can confirm it's true for you.

  4. Before-and-after diffs for the summary, the skills and each changed bullet.

Confirm & Save keeps the result; Reject & Regenerate discards it and tries again. The decision covers the whole preview. Guardrails stop invented numbers, employers and dates, but wording can still overstate your role. Read every change: you're the final check.

When you confirm, the tailored resume is saved as a new resume titled "Role @ Company", linked to its master and its job. Its card lands in the Applied column of the tracker, and if you switched them on in Settings, a cover letter, an outreach message and interview prep are generated with it. Everything stays editable in the builder.

With the preview, an ATS Score Breakdown card appears under the form. It's a weighted heuristic of keyword match, skills coverage, job-title match, section completeness and date consistency, not a simulation of any real applicant tracking system. When you confirm, it's saved with the tailored resume.

Tailor several jobs in a queue

Applying to several jobs at once? Paste each job description into the Tailoring Queue, and Resume Matcher tailors them one after another, with a short cooldown between jobs (5 seconds by default) to stay clear of your provider's rate limit. The role, company and job ID are detected from the text without an AI call.

Queued jobs skip the review step. Each one runs the same targeted edits and safety nets, then is saved straight away as a tailored resume, with its tracker card, its ATS score and any extras switched on in Settings. The queue keeps every bullet and ignores the page limit, so read each result in the builder before you send it.

The queue is kept in the database, so it survives a reload or a restart. A job that fails, for example by running past the time limit, isn't retried: add it again.

The Tailoring Queue: the Add a Job form with a pasted job description for a Senior Backend Engineer, Billing at Tern Payments, the detected role, company and job ID REQ-2291, a 5-second cooldown and the Add to Queue button; beside it five jobs marked Queued, Tailoring, Done, Done and Failed, the failed one timed out

What the AI can and can't change.

Tailoring is designed to reword, not to invent. These rules are enforced in code, not just requested in the prompt.

The AI can

  • Reword your summary and bullet points using the job's language

  • Reorder and emphasise skills

  • Choose which bullets to keep, within your page limit and bullets per role

  • Add a skill the job requires, if it appears word for word in the job description (flagged as high risk)

The AI can't

  • Change your name, email, phone, location or links

  • Change employers, job titles or dates

  • Change schools, degrees or education dates

  • Add a number, percentage or metric that isn't in your original

  • Remove your existing skills, certifications, languages or awards

  • Add new jobs, schools or projects

  • Touch your custom sections

Build. Edit anything, and see the page as it will print.

Every resume, master or tailored, opens in the builder: an editor on the left and a live, paginated preview on the right, with tabs for the resume, cover letter, outreach mail, interview prep, the ATS check and, on tailored resumes, JD Match.

  • 7

    templates, in one and two columns

  • A4 / Letter

    page sizes, printed as the preview shows

  • 5–25 mm

    margins on each side, 10 mm by default

The builder

  • Edit every section in place: personal info, summary, experience, education, projects, and skills and awards.
  • Format bullet text with bold, italic, underline and links, and toggle the bullet marker per line.
  • Add jobs, schools, projects and bullet points; duplicate or remove items.
  • Rename, hide, show and reorder sections, with move up and down or drag and drop.
  • Add custom sections of three kinds: free text, a list of items like a job entry, or a simple list of strings.
  • Zoom, toggle a margin overlay, and watch the live page count.
  • AI Regenerate, Reset to the last saved version, Save (it also autosaves as you edit), and Download as a PDF with your current template settings.
The Template & Formatting panel with the Modern Two Column template and the blue accent selected, and the preview showing the resume in two columns: summary and experience on the left, education, skills, languages, awards and links on the right
Modern Two Column with the blue accent.

Seven templates

  • Single Column

    1 column

  • Two Column

    2 columns

  • Modern

    1 column, accent colour

  • Modern Two Column

    2 columns, accent colour

  • LaTeX

    1 column

  • Clean

    1 column

  • Vivid

    2 columns, accent colour

Two-column templates keep the main content first in the reading order, so text extractors read your experience before the sidebar.

Formatting controls

Page size
A4 or US Letter.
Margins
5–25 mm on each side (default 10 mm).
Spacing
Section, item and line spacing in five steps.
Font size
Base size, plus the scale of your name and section headers.
Fonts
Serif, sans-serif or monospace, chosen separately for headers and body text.
Compact mode and contact icons
On or off.
Accent colour
Blue, green, orange or red, on Modern, Modern Two Column and Vivid.
Reset to defaults
At any time.

JD Match

On a tailored resume, the JD Match tab puts the job description next to your resume and highlights, in yellow, every job-description keyword your resume already contains.

The JD Match tab: 105 keywords extracted, 31 matches found, a 30% match rate, the job description for a Senior AI Engineer, LLM Platform beside the resume with matching keywords highlighted in yellow, and the ATS Score Breakdown on the left
105 keywords extracted, 31 found in the resume: 30%. The posting's company background counts too.

The match rate is plain arithmetic, with no AI involved:

  1. 1

    Take the words in the job description, drop common English words and job-posting filler (such as "team", "role" and "experience"), and keep words of three or more letters.

  2. 2

    Do the same for your resume.

  3. 3

    Match rate = job-description keywords found in your resume ÷ all job-description keywords.

Job description

We are hiring a backend engineer to build Python services on Kubernetes. You will run Postgres, Redis and Kafka and cut latency with the team.

Your resume

Built Python services on Kubernetes; cut latency by 40%.

10 keywords · 4 found

Match rate: 4 ÷ 10 = 40%

It shows green at 50% or more, amber from 30%, and red below 30%. Because it counts every meaningful word in the posting, company background included, a strong resume often lands in the 30–50% range. Use it to spot missing skills and terms, not as a pass mark. It currently counts plain a–z words only, so accented words and Chinese, Japanese or Korean text aren't counted.

ATS check and ATS score

Neither simulates an employer's applicant tracking system. They test what you control: whether software can read your PDF, and how well the resume covers the job.

The ATS Check tab: what the check does, the round trip and tips on the left; on the right the Single Column template scoring 100/100 for parseability and 100/100 for content, text extraction full, and passed checks for selectable text, character encoding, text vs. images, single reading order, images and length

ATS Check

The ATS Check tab renders your last saved resume with the current template, the same PDF that Download gives you, and reads it back the way a plain ATS text extractor does. No AI is involved. It scores parseability and content out of 100 and lists every check: selectable text, character encoding, text vs. images, a single reading order, headers and footers, images, length, contact details, section headings and dates. A round trip compares the extracted text with your resume data. It works on any saved resume.

The ATS Score Breakdown: 79.2 out of 100, with keyword match 80.8%, skills coverage 94.4%, title match 20.0%, and section completeness and date consistency at 100%; the missing keywords fine-tuning, embeddings and golden datasets; tracing and design reviews as safe to add from the master resume; and recommendations, beside the JD Match view

ATS score

On a tailored resume, the ATS Score Breakdown scores the resume against its job: 40% keyword match, 20% skills coverage, 15% job-title match, 15% section completeness and 10% date consistency. It lists missing keywords, keywords from your master resume that are safe to add, and recommendations. It's saved with the resume; after you edit, save and click Recalculate. The scoring is plain code, with no AI call.

Write. The cover letter and interview prep, from the same resume.

Each is written from your resume for the same job. Generate them on demand from the builder's tabs, or switch them on in Settings to have them made every time you confirm a tailored resume.

  • 100–150

    words in a cover letter

  • 70–100

    words in an outreach message

  • 5

    parts of interview prep, from role fit to talking points

The Cover Letter tab in the builder: the print preview with the candidate's name and contact details, the date, and a letter to the Northwind Labs hiring team for a Senior AI Engineer role

Cover letter

A short letter, 100–150 words, written from your resume for the specific job. The prompt tells the model not to invent anything that isn't in your resume. Edit it beside the print layout, then save, regenerate or download it as a PDF.

The Outreach Mail tab in the builder: a short message to Northwind Labs about the Senior AI Engineer role, previewed for LinkedIn or email, with how-to-use steps under it

Outreach message

A 70–100 word cold email or LinkedIn message for the same job, written from your resume. Edit it, regenerate it and copy it to your clipboard. Its prompt, like the cover letter's, can be replaced with your own in Settings.

The Interview Prep tab in the builder: a role-fit analysis listing where the experience matches the job and one gap to address, then a resume-based question with its focus area and suggested answer points

Interview prep

  • Role-fit analysis: where your experience lines up with the job, and the gaps to address.
  • Resume-based questions an interviewer is likely to ask, each with a focus area and suggested answer points.
  • Project follow-ups: deeper questions about your projects.
  • Skill gaps: what the job asks for, why it matters and how to prepare. Preparation targets, not skills added to your resume.
  • Talking points: short themes to come back to.

AI enrichment, for the master resume

Open your master resume and click Enhance Resume. The AI looks for thin experience and project entries and asks you up to six questions about them. From your answers it writes two to four new bullet points per item, which you review before clicking Add to Resume. It only uses details you provide; it doesn't invent metrics.

AI Regenerate, for any resume

In the builder, choose the experience entries, projects or skills to rework and write an instruction such as "use stronger action verbs" or "emphasise leadership". You get a before-and-after preview before anything is applied. The prompt forbids new facts, metrics, dates, companies, titles or accomplishments.

Track. Every application on one board.

The tracker is a Kanban board for your job search. Every tailored resume you confirm gets a card automatically, and you can add cards by hand for jobs you haven't tailored for yet.

  • 7

    stages, from Saved to Accepted or Rejected

  • 1

    card for every tailored resume you confirm, added for you

  • 0

    job boards connected: the tracker is your own record

The Application Tracker: Saved, Applied, No Response and Response columns with one or two cards each, every card showing the company and the role, the applied ones also the date applied and a Shared resume badge, and stage chips along the bottom
Seven stages
Saved, Applied, No Response, Response, Interview, Accepted and Rejected.
Cards
The company, the role, the date you applied, and a Shared resume badge when the same master resume backs more than one application. The date is stamped when a card is created in any stage other than Saved, or when it first moves out of Saved.
Working the board
Drag cards within a column or to another stage. Scroll with the arrow buttons or jump to a stage with the chips. Select several cards to move them all with Move to…, or delete them in one go. Manage hides stages you don't use; at least one always stays visible.
A card opened from the tracker: Northwind Labs, Senior AI Engineer, LLM Platform, in the Interview stage, with the job description, notes about the recruiter screen and the onsite loop, a Save Notes button and an Edit Resume button

Card details

Click a card to read the full job description, keep notes, and open the exact resume you applied with: Edit Resume takes you to the builder. If that resume has since been deleted, the card still opens and tells you.

The Add Application dialog: a resume picker set to Sarah Chen Master Resume, an empty job description box, optional Company and Role fields, a Status picker set to Applied, and an Add button

Add an application by hand

Click Add Application, choose a resume, paste the job description and pick a starting stage, such as Saved for a job you plan to tailor for later. Company and role are optional: leave them blank and the AI extracts them from the job description.

Run it your way. Your machine, your model, your data.

Resume Matcher doesn't include an AI model. You connect one, in the cloud or on your own machine, and the app handles the prompts, checks and formatting.

  • 11

    ways to connect a model: an API key, your own machine or a plan you pay for

  • 7

    languages, for the interface and for what the AI writes

  • 0

    analytics or tracking code in the app

Connect a model

Supported providers, their default model in Settings, and where they run
Provider Default model Runs
OpenAI gpt-5-nano-2025-08-07 Cloud
Anthropic (Claude) claude-haiku-4-5-20251001 Cloud
Google Gemini gemini-3-flash-preview Cloud
DeepSeek deepseek-chat Cloud
OpenRouter deepseek/deepseek-chat Cloud
Groq llama-3.3-70b-versatile Cloud
Azure AI Foundry mistral-large-latest Cloud
Ollama gemma3:4b Your machine
OpenAI-compatible server (llama.cpp, vLLM, LM Studio) You type it Your machine
ChatGPT plan (Sign in with ChatGPT) Your account's models Cloud
Claude plan (via Claude Code) Claude Code's default Cloud

You can type any model name your provider offers. There's no official minimum model, but small models can struggle with the structured edit format the tailoring step uses.

Set it up in Settings (provider, model, API key and, for a proxy or local server, a base URL; Save, then Test Connection), or with environment variables in apps/backend/.env or your Docker environment: LLM_PROVIDER, LLM_MODEL, LLM_API_KEY and, if needed, LLM_API_BASE. Provider names are lowercase (anthropic, ollama). Settings saved in the app take precedence over environment variables.

Also in Settings

System status
Whether the LLM is healthy and the database is connected, counts of resumes, jobs and tailoring runs, and whether a master resume is configured.
Reasoning effort
For reasoning-capable models (gpt-5 family, Claude 3.7+, DeepSeek R1, OpenAI o1/o3). Auto sends nothing and is the most compatible choice.
Content generation
Switches that generate a cover letter, an outreach message and interview prep each time you confirm a tailored resume. All three are off by default. The cover letter and outreach prompts can be replaced with your own, as long as they keep the {job_description}, {resume_data} and {output_language} placeholders.
Prompt settings
The default tailoring intensity.
Danger zone
Clear API keys removes every stored key; Reset database deletes all resumes, jobs, generated content and the tailoring queue. Neither can be undone.

API keys entered in Settings are stored encrypted. Each provider keeps its own key, so switching providers doesn't erase the other one. The ChatGPT and Claude plans need no key; they're community-built, with caveats worth reading first.

Bring your own AI key

Use it from Claude Code

Resume Matcher also ships an MCP server, so Claude Code, Claude Desktop, Cursor or Codex can work with your resumes directly. Your client's model writes the content; Resume Matcher stores, checks, scores and renders it, in the app's own database, with no AI key of its own. It needs a local install, not Docker.

Set up the MCP server

The Settings page: a banner linking to sponsorship and the Discord; system status showing the LLM healthy, the database connected, 8 resumes, 8 jobs, 7 improvements and a master resume configured; below it the LLM configuration with eleven providers, OpenAI selected, the model gpt-5-nano-2025-08-07, API key and base URL fields, reasoning effort set to Minimal, and Save and Test Connection buttons

Seven languages

English, Spanish, Chinese (Simplified), Japanese, Brazilian Portuguese, French and Korean. The UI language changes the interface; the content language is the one the AI writes in, for tailored resumes, cover letters, outreach messages and interview prep. They're set separately, so you can use the interface in English and write a resume in Japanese. PDFs include Noto Sans fonts for Chinese, Japanese and Korean text.

PDF export

Resumes and cover letters export as PDF. The app opens a headless Chromium on a print-only version of your resume and prints it, so the PDF contains real text that can be selected, copied and read by software. Headings are real headings, two-column layouts keep the main content first in the reading order, and the page matches the builder: template, fonts, spacing and page size.

Export needs the frontend running. Locally, install Playwright's Chromium (uv run playwright install chromium) or have Chrome or Edge installed; the Docker image includes everything.

Your data

Everything lives in one folder, apps/backend/data/, or the Docker volume: resume_matcher.db, an SQLite database with your resumes, job descriptions, tailored versions and tracker board (PostgreSQL instead, if you set DATABASE_URL); config.json for non-secret settings; and your API keys, encrypted at rest with a secret key file readable only by your user account.

Only the AI requests you trigger leave your machine, sent to the provider you chose. With a cloud provider, that includes your resume, contact details and all, and the job description. The app contains no analytics or tracking code. At startup, the AI library (LiteLLM) fetches a public model price list; that request carries none of your data. Use Ollama or another local model server, and your resume, the job descriptions and every AI output stay on your computer.

Install it

Docker is fastest. Resume Matcher ships as a single container image on Docker Hub, where it's a Docker-Sponsored Open Source image, and on GitHub Container Registry, both built for linux/amd64 and linux/arm64. Then open http://localhost:3000/settings to connect a model.

To build it from the repository instead, clone it and start it with Docker Compose: git clone, then docker compose up -d.

The resume-data volume holds your database and settings, so your data survives container upgrades. Pin a version (for example :1.3.0) for repeatable deployments. To run it from source instead, you need Python 3.13+, Node.js 22+, npm and uv.

$ git clone https://github.com/srbhr/Resume-Matcher.git$ cd Resume-Matcher$ docker compose up -d

# then open http://localhost:3000/settings

What it doesn't do

  • It isn't a hosted website. You run it yourself, locally or in Docker. It's built for one user.

  • It doesn't apply for jobs or connect to job boards or employers' systems. The tracker is your own record.

  • It doesn't predict how an ATS ranks you. The ATS Check tests whether text reads back out of its own PDF, and the scores are keyword and section heuristics. None of them simulates an employer's software.

  • It doesn't write a resume from nothing. It works from your uploaded resume or your answers in the wizard.

  • It doesn't read scanned PDFs. Files need a text layer.

  • It exports PDF only. Word files are accepted as input, not output.

Tailor the next one.

Backend, frontend, SRE or ML: paste the job you want next and send a resume that speaks its stack. Free, open source, and it runs on your machine.