Product

The job application machine

One form in, a resume tailored to the company out. An n8n workflow that researches, writes, scores itself and retries until it passes.

Company

Personal project

Role

Designer and builder · solo

Duration

2026

Toolkit

n8n (self-hosted on Docker), Claude Sonnet, Gemini 2.5 Flash, Google Drive, Python

At a glance

The problem

Tailoring a resume to every job by hand takes hours, and a generic one gets filtered out by ATS software before a person reads it.

What I made

One form in, and out come a company-tailored resume and cover letter as PDF and DOCX, plus a LinkedIn message and a company brief, all in Drive.

₹6–8 per application

92+ ATS score before it ships

1 form, 4 documents out

Context

I got bored, so I learned n8n. Then I built a machine that tailors my job applications better than I ever did by hand.

Applying properly is slow. Every company uses its own words for the same skills, and most applications pass through ATS software that filters on those words before a person reads anything. Rewriting a resume for each job takes hours. Sending the same one everywhere gets it filtered out.

The problem

Could one form turn a job description into an application that reads as if I wrote it for that company, without me writing it, and without it making things up?

Success meant four things:

  • Tailored to the company’s own vocabulary and tone, not a generic rewrite.

  • Honest: the same experience, restructured, never invented.

  • Checked before it reaches me, not after a rejection.

  • Cheap enough to run for every job I apply to.

Everything starts with five fields.

Discovery

Before building, I broke a good application into the jobs a person does when they tailor one by hand: read the company, learn how it talks, rewrite the resume in that language, check it against what the company is screening for, then write the cover letter and outreach to match.

Each of those became a step, and each step got the cheapest model that could do it well.

  • Writing the resume: Claude Sonnet. It’s the step a recruiter actually reads, so it gets the best writer. It’s also the only step that costs money.

  • Research, scoring, cover letter, LinkedIn message, insights: Gemini 2.5 Flash on the free tier.

  • Running it: n8n, self-hosted on my own machine in Docker, with files kept in Google Drive.

Two rules shaped everything after. The resume model may restructure and reword but never delete a section or add experience I don’t have. And the cover letter starts from a template I wrote myself; the model only adapts its vocabulary, so it still sounds like me.

Research, write, score, retry, then fan out to every output.

How it works

  1. A form. Job description, company name, company URL, role title, and a yes or no for extras.

  2. My templates. The workflow pulls my master resume and cover letter template from Drive and extracts the text.

  3. Company research. Gemini studies the company: its vocabulary, tone, grammar and tech stack. The research is saved to Drive as its own file, so I can read it before an interview.

  4. The tailored resume. Claude Sonnet rewrites my resume for that company and role, using the research as context and mirroring its words.

  5. The check. The resume runs through an ATS checker built from the same research, not a generic one.

  6. The documents. A Python script turns the approved resume and cover letter into a clean PDF and DOCX, saved straight to Drive.

  7. The extras. If I said yes, I also get a LinkedIn connection message written to fit LinkedIn’s word limit, and a summary of what to know about the company after applying.

Once the resume passes, every document gets written and converted in parallel.

The part I’m proudest of: it checks its own work

Most AI resume tools write once and hand it over. This one grades the result first. The ATS checker scores the tailored resume against what this specific company is likely to screen for. At 92 or above, it moves on. Below 92, the checker sends back its reasons and what to improve, and Sonnet rewrites with that feedback. The loop repeats until the resume passes.

So a generic resume never reaches me. By the time a file lands in Drive, it has already passed the same kind of filter it’s about to face.

Building it

I’m a designer, so most of the work was learning how the pieces talk to each other. The hard bugs weren’t about AI at all. They were about the shape of the data moving between steps:

  • Job descriptions broke the research request. Line breaks and quotes in pasted text made the request invalid. Wrapping every value so it’s escaped properly fixed it.

  • The score came back empty, then always 0. Gemini nests its answer several layers deep as text, and the scoring step was reading the resume from the wrong place. Pointing both at the right paths gave real scores.

  • The email step never ran. Four branches fed into one email node, and n8n doesn’t wait for all of them. It has to come after the last file instead.

  • Runs stopped halfway. Running steps one at a time while debugging behaves differently from running the whole workflow. Now every test is a full run.

Every expression, node name and fix went into one running document, so I could stop for days and pick it straight back up.

One run, one company: resume, cover letter and extras, ready to send.

Impact

  • A tailored application in one run instead of hours of rewriting.

  • About ₹6 to 8 per application, because only the resume writing uses a paid model.

  • Every resume clears a 92 ATS score against the company’s own research before I see it.

  • A research file per company that doubles as interview prep.

What’s next

  • A hard cap on the retry loop, so one stubborn job description can’t keep spending credits.

  • A Google Sheets tracker that logs every application the moment it’s made.

  • A morning run that finds new jobs and filters them for fit before I see them.

  • Then a product: done-for-you applications first, then a self-serve version with sign-in and payments on a Framer front end.

Looking back

  • A designer had no business building this. But boredom is a great PM.

  • Splitting the work by who does it best kept it cheap. One expensive model writes; free ones research, score and draft the rest.

  • The honesty rules matter more than the prompts. A tailored resume that invents experience is worse than a generic one.

  • Next time I’d sketch the data, not just the steps, before building. Almost every bug was a value in the wrong place.

Next case study

Is your app urinally optimized? →