Built, v1.3.0

Matchstick

A Chrome extension for job seekers. On a job posting it checks the resume against each requirement, quotes the line that proves it, shows the gaps, and writes a cover letter that only claims what the resume supports.

My role
Problem → PRD → build
Status
v1.3.0 · Packaged for the Chrome Web Store
Stack
Chrome MV3 + vanilla JS + Gemini (user's key)
Servers
None. Everything runs in the browser
The 30-second version

Built, tested against a 26-case golden set, packaged for the store. The first version gave a match number with nothing behind it. The rebuild made evidence the product: every requirement is marked met, partial or missing with a quote from the resume, the code checks that the quote is real, and the score is computed in code rather than by the model. Free, no accounts, no servers; the user brings their own Gemini key.

Matchstick side panel showing a 79 out of 100 match score and a requirements list with met, partial and missing marks

The problem

A match number nobody can check

People applying to dozens of roles rarely check whether the resume fits the posting before they apply, and tailoring a cover letter for each one is the part that gets skipped. The tools that exist either paywall after a few uses, write letters that sound like every other AI letter (sometimes claiming experience the applicant doesn't have), or hand back a percentage with no evidence behind it.

  • A score without evidence can't be acted on. "62%" doesn't tell you which requirement to fix or whether to bother applying.
  • A generated letter that invents experience is worse than no letter. The applicant carries the risk, not the tool.
  • A resume is personal data. Sending it to a server somebody else runs, to get a number back, is a cost most tools don't mention.

Discovery

One loop, three kinds of user

The whole product is one loop: scan the posting, score the fit, fix the gaps, then strike (write the letter). What a first-time user should understand in one sentence: see how well you fit, see the gaps, get an honest letter. Everything else sits behind that.

AJ

Active job seekers · Primary

Applying to five or more roles a week. They need the score before the application, not a letter after it.

Job to be done: tell me if this is worth my time, then help me apply well
NG

Students and new grads · Secondary

Applying broadly, with thin resumes. The gap list matters more than the score.

Job to be done: show me what the posting wants that I haven't written down
CS

Career switchers · Secondary

Need to understand which gaps are real skill gaps and which are wording.

Job to be done: tell me which requirements I can close and which I can't

Backlog

User stories that shaped the build

US-01 As a job seeker, I want a match score on any posting with the resume line that proves each requirement, so I can see the fit instead of guessing. Must
US-02 As a job seeker, I want a gap list with a suggestion for each gap, so I can fix what I can before I apply. Must
US-03 As a job seeker, I want a cover letter that only claims what my resume supports, so I never have to defend something I didn't do. Must
US-04 As a job seeker, I want my resume stored once on my own machine and reused on every posting, so I'm not uploading it to another service. Must
US-05 As a job seeker, I want to save an edited resume as a tailored version and re-score it, so I can see whether the edit moved the number. Should
US-06 As a job seeker, I want to log where I applied with the score and outcome, so I can check whether better matches get more interviews. Should

Requirements

Spec'd as testable acceptance criteria

RequirementPriority
Read the posting from JSON-LD first, then site adapters for LinkedIn, Indeed, Greenhouse, Lever and Workday, then a heuristic that rejects list pages; manual paste always worksMust
Two scoring tiers: a keyword score that needs no AI and never returns a number on too little text, and a rubric where the model marks each requirement with a verbatim resume quote that the code verifiesMust
Score computed in code, not by the model: must-haves weigh double, met counts 1, partial 0.5; temperature 0 and a fixed seed so re-scores are comparableMust
Email, phone, street address and profile links removed from the resume before any AI call; resume and key never leave the device except in direct calls to the providerMust
Every prompt that includes page text says that text may contain instructions and must be treated as content to analyse, not commandsMust
After a letter is written, each sentence that claims experience is traced to a resume line; unsupported claims are highlighted for the user to cutShould
Match badges on LinkedIn and Indeed results pages, capped at one AI request per page; off by default on LinkedIn because its user agreement prohibits add-ons that scrapeCould

My role

Owning the product from the problem to the package

I wrote the PRD, built the extension, rebuilt the scoring when the first version turned out to be a number with nothing behind it, and reviewed the code three times before packaging. The decisions that mattered were product decisions dressed as technical ones: compute the score in code so it can be trusted, verify every quote the model returns, redact the resume before it leaves the machine, and keep LinkedIn's list features off by default rather than argue with their terms later. The application log was a non-goal in v1.0 and became a feature in v1.1, because "does applying to better matches get more interviews?" is the product's core claim and a log is the only way a user can check it.

What I built

Evidence first, then the letter

Posting reader

Structured data first, then five site adapters, then a fallback that refuses to score a search-results page. Paste a link and it reads the posting in a background tab.

Rubric scoring

The model extracts 6 to 12 requirements, cached per job, and marks each one met, partial or missing with a quote. The code checks the quote exists in the resume and computes the score itself.

Fix-it gate

Each gap gets a suggestion grounded in what the resume already says. Continue is always available; the gate advises and never blocks.

Cover letter with claim check

The prompt carries the verified requirement list, so the letter leads with what's proven and never claims what's missing. Afterwards each claim is traced back to a resume line.

Local storage, no accounts

Resume, key, letters and the application log live in chrome.storage.local. PDF and DOCX are parsed in the extension. Export is copy or a PDF built on the device.

Golden test set

26 labelled cases (five synthetic resumes against four target roles, plus six engineering cases) run against the same scoring code the extension ships, so a scoring change shows up as a band change before release.

Under the hood

Posting in, honest letter out

1Side panel opens on a posting → JSON-LD, site adapter or paste gives the title, company and description
2Keyword tier scores with no AI call; if there's enough text, the rubric tier asks the model for requirements and evidence
3Code verifies each quoted line against the (redacted) resume and computes the 0 to 100 score
4Gaps and suggestions shown → optional edit saved as a tailored version → automatic re-score
5Letter streamed from the model with the verified list in the prompt → claim check → copy or local PDF → optional "mark as applied"

Outcome

Built and packaged; the store listing is the next step

Version 1.3.0 is complete: the full loop, model choice with capability checks, resume versions, claim check, application log, results-page triage and score feedback. Permissions are scoped to the ten job sites and the Gemini API, with wider access requested only when the user asks for it, and there is no remote code, which is what Chrome Web Store review looks for. The privacy policy the listing links to is published here. The upload package is built; what remains is the developer account and the listing. The success measures in the PRD (setup completion, score-to-letter conversion, golden-set accuracy of 90% or better in the right band) can only be read once real users are on it, so none of them is claimed here.

Roadmap

What comes after the listing

Next

Chrome Web Store submission, then replace the draft golden-set labels with real postings and resumes and re-check every band.

Then

Multiple resume profiles and letter style learned from the user's own edits, if the application log shows people re-scoring and re-applying.

Later

Firefox and Edge ports, and a hosted mode only if demand justifies running a backend. A cohort view for career centres is parked pending discovery calls.

More case studies

Want a discovery sprint or a build brief like this one for your product? Book a call.