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.
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.
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.
Active job seekers · Primary
Applying to five or more roles a week. They need the score before the application, not a letter after it.
Students and new grads · Secondary
Applying broadly, with thin resumes. The gap list matters more than the score.
Career switchers · Secondary
Need to understand which gaps are real skill gaps and which are wording.
Backlog
User stories that shaped the build
Requirements
Spec'd as testable acceptance criteria
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
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
Chrome Web Store submission, then replace the draft golden-set labels with real postings and resumes and re-check every band.
Multiple resume profiles and letter style learned from the user's own edits, if the application log shows people re-scoring and re-applying.
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.