← Back to Notebook

Is Your ATS Working Against You?

Most resumes don’t fail because the experience isn’t there. They fail because the words are wrong.

Applicant tracking systems scan for specific terms before a human ever reads your name. If your resume says “led cross-functional teams” and the job description says “managed stakeholders,” you might be filtered out before anyone notices you did exactly that job for three years. The experience is identical. The vocabulary isn’t.

I’ve been on both sides of this — applying for roles and reviewing candidates. The signal-to-noise problem is real. Good people get filtered out not because they’re unqualified, but because their resume wasn’t written to match the language of that specific job description.

So I built a tool.

What it does

Resume Highlighter takes two inputs: your existing resume (plain text) and a job description. It runs both through Claude and gives you back two things:

  1. A keyword analysis — what terms appear in the job description but not your resume, what skills are implied but missing, what you should probably cut because it signals the wrong thing.
  2. A tailored version of your resume — same experience, reworded to match the job description’s language. Nothing invented, no fake bullets, just better phrasing and emphasis.

The whole thing runs in a browser. Paste your resume, paste the job description, click a button. The tailored version comes back in about fifteen seconds and you can copy it or download it as a formatted PDF.

Why I built it instead of using an existing tool

There are existing ATS checkers. Most of them are either paywalled, shallow (keyword density counts), or they try to be full resume builders and get in your way.

What I wanted was something I could hand to a friend applying for a job and have them get value immediately — no account, no subscription, no onboarding. Paste, click, done.

Also, I wanted to understand the problem well enough to have an opinion about it. Building the tool forced me to think carefully about what “tailoring a resume” actually means, and the answer is mostly: match the vocabulary, surface the right things, cut the noise.

How it’s built

The backend is a Netlify function that calls the Claude API. I’m using claude-haiku-4-5-20251001 — fast enough to feel responsive, cheap enough that I don’t have to gate it behind auth.

The interesting technical problem was latency. My first version made two sequential API calls — one for the analysis, one for the tailored resume. That hit Netlify’s 26-second function timeout pretty reliably. The fix was straightforward: run them in parallel with Promise.all. Both calls go out at the same time, and the response comes back in roughly the time of whichever takes longer, not the sum of both.

const [analysis, tailored] = await Promise.all([
    callClaude(ANALYSIS_SYSTEM, userContent, 1500),
    callClaude(TAILORED_SYSTEM, userContent, 2500),
]);

The other interesting problem was PDF generation. I wanted the output to look like the site’s resume page — same fonts, same layout — not just a browser print of the tool UI. The approach I landed on: build a complete HTML document string with all the CSS embedded, convert it to a blob, and open it in a new tab. From there, Cmd+P or the browser’s save-as-PDF gets you a clean single-page document.

Safari has opinions about window.open() with data URLs, so the implementation uses a simulated anchor click with a blob URL instead. Cross-browser, no popup blockers triggered.

The prompt is doing most of the work

The analysis prompt and the tailoring prompt are the real product. The system prompt for the tailored resume has to be specific enough that Claude doesn’t invent experience, doesn’t pad things out, and doesn’t produce a version that reads like a recruiter wrote it. The directive I landed on is roughly: preserve all factual content, match terminology, reorder and reframe to emphasize relevance, don’t add bullets that weren’t there.

Getting that right took more iteration than the code did.

Use it

It’s free, no account required: nigelstewart.dev/tools/resume-highlighter

Plain text resumes work best. If you’re copying from a PDF, clean up the formatting a bit first. The output is a starting point — read it, adjust anything that doesn’t sound like you, and don’t submit something you haven’t actually read.