jobtool, an AI-assisted Swiss job search built end to end
Local-first, it pulls Swiss job postings, scores each one against my own profile, and rolls the gaps into the two answers I care about: which skills to study next, and which roles are worth pursuing. A supervised browser extension handles the applications.
Job hunting in Switzerland is a dozen browser tabs. A dozen job boards, as many company career pages, and every posting tells you almost nothing beyond a title. Then each application wants a slightly different CV and the same facts retyped into a new form. I was spending my hours on the parts that aren’t the thinking: finding roles, guessing fit, retyping myself. None of it went to the two questions that mattered: what should I be learning, and which of these roles are worth my time.
So I built jobtool for myself.
The pipeline
Four stages hand off to each other. The first pulls listings from Swiss job boards, company career pages, and official ATS APIs where one exists (an API beats a scraper every time), then collapses duplicates so one role showing up in two places becomes one entry.
The second scores every role against my profile. Language and location are hard gates: get either wrong and the role is skipped, no arguing with a fuzzy number.
The first version of that scoring was bad. It graded roles the way an applicant-tracking system reads a CV, on keyword coverage, which told me how well I’d match a résumé parser and nothing about whether I wanted the job. I reworked it to grade against my precise skills.
The third stage keeps the ATS lens but points it the other way: a keyword pass over the posting’s own text, sorted into matched, weak, and missing. One role at a time it feeds the CV builder. Rolled up across postings it becomes the most useful thing the tool produces, which I’ll come back to.
The fourth stage writes the CV, and it does so without an LLM. A small library of keyword-tagged copy blocks gets scored against the role’s gaps and assembled into a fresh CV. That was the hardest call in the build, and I made it on a rule I’d set myself: AI can drive the process creation, but it shouldn’t be part of the process. “This is my experience” can’t depend on a model’s mood. The cover letter is going the same way. It also keeps the running cost near zero.
Here’s one role after jobtool is done with it, the whole verdict on one screen: the match score broken into strong, weak, and missing skills against the posting’s own text, ATS coverage, the CV variant it picked, and a one-keystroke decision.

The real interface, in your browser. It opens on one scored role: its match score against the pursue line, ATS coverage, and the matched, weak and missing skill chips. All 28 sourced roles sit behind a disclosure. Sample data, fictional company names, no server.
What to study next
One role’s gap list is useful on its own. Rolled up across every role I’m pursuing, it turns into a study plan. The skills page takes each keyword, counts how often it comes up, and rates it strong, weak, or missing against my profile. Frequency alone isn’t the answer, though. Some common keywords I’ve parked as low-priority, and a few rare ones matter a lot, so each keyword also carries an importance weight (÷3, 1×, ×3). “What to study next” filters before it sorts: keep the ×3 skills I’m weak or missing on, add any 1× skill I’m missing that lands in the top 10% most-requested, then rank the rest by how often they appear.

What falls out reads like a syllabus. German leads by a distance and French sits a few rows down, both missing, both ×3, both unavoidable in a Swiss search. Security and sustainability make the cut on frequency alone: not skills I’d flagged as core, but I’m missing both and they turn up constantly. Below that sits the technical depth I’d expect to keep sharpening: R, C++, the generative-AI and deep-learning stack, the big clouds. The keywords I’ve down-weighted to ÷3, the strategy-and-leadership filler, never reach the queue however often they appear.
ApplyPilot, supervised
The piece I’m most proud of is the browser extension. It’s an autofill driven by a decision tree, running on the real application form one step at a time. You watch it work in a side panel: it fills a field, ticks a box, uploads the CV, and always stops before the final Submit for me to decide. Nothing leaves without me looking at it.
The flow is data, not code. Every form step is an explicit node you can inspect, and the checks branch on the page’s real state: cookie banner up? posting expired? city autocomplete resolved?

The extension auto-playing one form-fill in your browser: it works down a real application form field by field and pauses at Submit. Synthetic company and applicant data. The live extension drives real forms the same way.
So far the tool has filed more than 50 applications this way, each one under my eye before it went out.
Every screenshot here is the real app on my real search, with the company names swapped for fictional ones before capture. Who I’m talking to stays private.
The payoff
The diagnostic is what I built jobtool for. Every posting it scores sharpens the picture of which skills keep surfacing as gaps across real Swiss roles, and that picture steers what I study next. The applications matter less to me than that. It’s crossed 3,000 roles sourced and scored now, still in daily use on my own search; the exact count was never what mattered.
Two reactions stuck with me. From someone who’d run their own search: “This would have saved me weeks when I was searching for a job.” From someone who hadn’t: “What happened to simply sending an application?”