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 and JD Match

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), eight tailored resumes titled Role @ Company with their edit dates, and a Create Resume tile
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 nothing is saved until you've read the changes and confirmed them.

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, 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, a job description for a Founding Engineer, LLM Evaluation pasted in, and the Generate Tailored Resume button

What happens behind the button

  1. 1

    Job analysis

    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

    The AI scores each bullet point for relevance to the job. It only scores; it can't rewrite or invent bullets. Code then keeps up to three bullets per job or project and checks, by actually rendering the page, that the resume fits on one page.

  3. 3

    Skill plan

    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

    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 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 1 skill added, 0 skills removed, 0 certifications added, 3 descriptions modified and 1 high-risk change; the note Kept 9 of 11 bullets, fits on one page; a high-risk warning; the old and new summary as a diff; and Reject & Regenerate and Confirm & Save buttons

The preview shows:

  • A change summary: skills added and removed, certifications added, descriptions modified, and high-risk changes.
  • What bullet selection did, for example "Kept 9 of 11 bullets (up to 3 per job or project) · fits on one page".
  • 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.
  • 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.

While the preview is open, an ATS Score Breakdown card appears under the form. It's a weighted heuristic: 55% keyword match, 25% coverage of the job's required and preferred skills, and 20% section completeness. It isn't a simulation of any real applicant tracking system, and it isn't saved.

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, up to three per entry

  • 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 and, on tailored resumes, JD Match.

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

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.

The JD Match tab: 108 keywords extracted, 37 matches found, a 34% match rate, the job description for a Senior AI Engineer, LLM Platform on the left and the resume on the right with matching keywords highlighted in yellow
108 keywords extracted, 37 found in the resume: 34%. The posting's company background counts too.

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.

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.

The Application Tracker: Saved, Applied, No Response and Response columns with one or two cards each, every card showing the company, the role, 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.

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

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 and generated content. 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.

Bring your own AI key

The Settings page: 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 nine providers, Anthropic selected, the model claude-haiku-4-5-20251001, API key and base URL fields, reasoning effort set to Auto, 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; 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.

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.

Terminal

$ docker run --name resume-matcher -p 3000:3000 \  -v resume-data:/app/backend/data \  srbhr/resume-matcher:latest

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 isn't an ATS checker. Its scores are keyword and section heuristics, not predictions of how any employer's software will rank you.

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