✉️ Founder's Letter

How ResumeGap Started

The honest story — from the person who built it.

"AI that invents skills to fill gaps doesn't help job seekers. It sets them up for interviews they can't survive."

I didn't set out to build a SaaS product. I set out to stop wasting time on a job search that was taking longer than any I'd had before.

It was mid-2025. I'd just been laid off in a restructuring at Gannett, applying into a market that was slower than anything I'd navigated in my career. Every posting wanted the same things: a resume tailored to the listing, a cover letter written for that specific role, language mirrored from the job description because ATS filters are hunting for exact matches. Multiply that by the volume a market like this demands, and you're spending most of your productive hours on prep before a single human looks at anything.

So I built a Claude artifact that took a job description and my resume and told me where the gaps were. Drafted a cover letter too. It was rough — manual input for everything, no memory between sessions, output that needed editing before it was usable. But it cut the time down enough that I kept pulling the thread.

Two tools, same problem

I moved it into Google AI Studio because an artifact wasn't enough room. Rebuilt it with more structure. And while I was in there I built a Market Overview tool alongside it — I wanted to know not just whether my resume matched a job, but whether the roles I was targeting were growing or shrinking. Different angle on the same question.

I used both for myself for a while. They worked well enough that I figured other people stuck in the same spot would want them too. That's where the project actually changed.

Building it out

The Reality Check Verdict wasn't planned. It came from running my own applications through the tool and noticing something odd. Some postings were full of language that looked fine sentence by sentence and alarming stacked together. "Unlimited PTO" plus "full presence expected during core hours 8am–7pm" plus "small but scrappy team where everyone wears many hats" — none of those phrases are damning on their own. Together they're describing something specific. The tool started flagging that, rating postings Safe, Caution, or RUN. That's the feature people noticed first.

Interview prep came next. Then recruiter outreach templates — five of them, tuned to different stages of the process, all written to stay under LinkedIn's character limit because nobody warns you that's a constraint until you're testing on real connection requests. Then the Candidate Signal Report, which flips the whole thing around and generates a recruiter-facing summary of your candidacy, meant to travel with an application so a recruiter can see why you're worth a conversation before they even open the resume.

None of it was roadmapped. Every feature came out of actually using the tool on real applications during a real search. Somebody could argue that's not a development methodology. Fair. It's also why the features that exist are the ones that actually matter.

Making it real

The artifact version worked because I knew exactly what I was doing with it. A real product had to work for a stranger who just found it, had zero context, and probably needed a job. Different problem entirely.

Shipping it meant a real backend — Node.js serverless functions on Vercel, one per feature, all AI processing server-side so keys never touch the browser. Auth through Clerk, switched to live production keys in late June after enough time in test mode to catch most of the edge cases. Redis for saved reports, resume versions, and shareable report links with a 90-day TTL. And a JSON sanitizer on every endpoint, because Gemini occasionally hands back control characters buried inside JSON strings, and without that sanitizer those turn into silent 500 errors that are genuinely miserable to track down.

The browser extensions came from a specific annoyance: bouncing between a job board and the analysis tool, copy-pasting job descriptions by hand. Chrome first, Manifest v3. The Firefox port took five tries — MV2 and MV3 handle background scripts, API namespacing, and permissions differently enough that a straight port just doesn't work. I know that now, the expensive way. Both extensions clip postings straight from LinkedIn, Indeed, or any career page into a queue that feeds the analysis flow.

The blog was SEO necessity more than anything. People search for ATS optimization, resume gaps, how to read a toxic job posting — and they're searching a lot. So the site needed answers. Ten-plus posts, written in the same voice as the product: directly, without pretending hiring is more functional than it is.

Pricing took a few passes before landing right. Three tiers — Free, Plus at $19/month, Pro at $37/month (still building out Pro's feature set). The pricing page headline says "Half the price of Jobscan. Plus red flag detection Jobscan doesn't do." Not a marketing line. The comparison chart backs it up, and anyone who checks will find it accurate.

Where it is now

ResumeGap went from a personal artifact to a live SaaS product in roughly 3.5 months. 28 build days. 109 delivery iterations — a number that only makes sense once you realize building alone means every bug is yours to find, every Safari rendering quirk is yours to debug, every edge case in Gemini's JSON output lands on your desk specifically.

The tool does a lot more now than the one I built for myself: resume gap analysis, ATS optimization, the Reality Check Verdict on job postings, cover letters in multiple styles, line-by-line resume rewriting, keyword gap analysis, learning path generation, interview prep across five dimensions, recruiter outreach messages for every stage, a Candidate Signal Report, batch job comparison, saved reports, multi-resume version management, shareable report links, and browser extensions for Chrome and Firefox.

I keep thinking about the application tracker that would close the loop. Everything before you apply is handled. The tracker handles after. Together that's a full job search operating system, hiding inside what started as a keyword matcher. It'll get built.

The tool doesn't fabricate experience. It works with what's already on your resume, said better — no invented qualifications, no scripting you through gaps you can't cover. It flags them honestly and gives you language to handle them in the room.

That constraint was the first design decision I made, back when this was just an artifact. It's still the most important one.

— Jim

Founder, ResumeGap  ·  resumegap.io