jobtool — an AI-assisted Swiss job search, built end to end
A local-first tool that aggregates job postings, scores them against my own profile, and turns the gap analysis into what I actually need: which skills to learn next and which roles are worth pursuing. A supervised browser extension handles the applications themselves.
Problem
Job hunting in Switzerland means checking a dozen boards and as many company career pages by hand, most postings carry no fit signal beyond a title, and every application wants a slightly different CV and the same facts re-typed into a new form. I was burning hours on the parts that aren’t the actual thinking — finding roles, judging fit, retyping myself — instead of on the two questions that actually mattered: what should I be learning, and which of these roles are actually worth my time.
Approach
I built jobtool as four pieces that hand off to each other:
- Aggregate & dedupe — pulls listings from multiple Swiss job boards, company career pages and, where one exists, official ATS APIs (preferred over scraping wherever possible); a canonicalizer collapses duplicates so the same role from two sources becomes one entry.
- Score & triage — every role is scored against my own profile on an explicit five-criterion rubric (relevance, language, location, appeal, win-probability), with hard gates — get language or location wrong and the role is auto-skipped, no arguing with a fuzzy number.
- ATS-style gap analysis — a keyword-matching pass against the posting’s own text, sorted into matched / weak / missing — the same lens an applicant-tracking system would use. Feeds the CV builder, but more importantly: aggregated across postings, it’s the clearest signal I have for which skills to actually go and learn.
- Tailored CV, deterministically — no LLM in this step, by design: a small library of keyword-tagged copy blocks gets scored against that role’s own gap analysis and assembled into a fresh CV, so “this is actually my experience” never depends on a model’s mood.
Here’s what a single role looks like once jobtool is done with it — the whole model on one screen: the match score broken into strong / weak / missing skills against the posting’s own text, ATS coverage, a suggested CV variant, and a one-keystroke decision.

The real interface, running in your browser — triage roles, browse by company, open any role's skill breakdown. Sample data; every company name is fictional; no server.
ApplyPilot — the last mile, supervised
The part I’m proudest of is the browser extension: a decision-tree-driven autofill that runs on the real application form, one step at a time. You watch every step in a side panel as it fills a field, ticks a box, uploads a CV — and it always pauses before the final Submit for a human decision. Nothing goes out the door without me looking at it first.
The flow is data, not code — every form step is an explicit, inspectable node, and checks branch on the page’s real state (cookie banner? posting expired? city autocomplete resolved?):

A click-through of one ATS recipe — synthetic company and applicant data, runs entirely in your browser. The real extension drives live application forms the same way.
Notes on scope
Two things I was deliberate about, worth saying out loud:
- No blind automation. Nothing submits without a human in the loop, and the riskier data sources — anything short of an official API — are opt-in and rate-limited, never run by default.
- No real companies on this page. The screenshots are the real app running my real search — the pipeline counts and scores are live — but every company name has been swapped for a fictional one before capture. Who I’m actually talking to stays private.
Result
Still in daily use, so this is a running read, not a final number: 1,900+ roles sourced and deduped, every one scored and triaged. What matters most to me isn’t the applications — it’s the diagnostic: which skills keep showing up as gaps across real postings, now steering what I study next, and a ranked shortlist instead of a flat pile of listings to sort through by hand.