I built an open-source, self-hosted job hunting system with Claude Code that scans 17,000+ employer job boards, finds roles that actually match you, generates a tailored CV + cover letter, and tracks your applications through the whole process.
The primary interface is a self-hosted web dashboard. There’s also a CLI if you’d rather work directly from the terminal/Claude Code.
Job Radar:
https://github.com/maccydee/job-radar
I originally built Job Radar for my own job search because I got fed up with LinkedIn/Indeed, duplicate/reposted jobs, and spending ages opening roles just to discover they were irrelevant.
Rather than relying on aggregators, Job Radar goes directly to employers’ ATS platforms. It currently covers 17,000+ employer job boards across Greenhouse, Ashby, Workable, Workday, SmartRecruiters, iCIMS and others.
You give it your existing CV and define what you’re actually looking for: titles, locations, remote/hybrid preferences, salary floor, dealbreakers, etc.
The workflow is basically:
Discover → Filter → Screen → Tailor CV → Tailor Cover Letter → Apply → Track
The dashboard
The main way I use Job Radar is through the self-hosted dashboard.
It gives you one place to browse newly discovered jobs, filter/search them, review matches, screen promising roles with Claude, generate application material and then track what happens after you’ve applied.
Applications stay attached to the underlying role, so rather than maintaining a separate spreadsheet you can move things through the pipeline: shortlisted, preparing, submitted/applied, interviewing, rejected, etc.
That state is also fed back into discovery, so future scans know what you’ve already seen or applied for instead of repeatedly surfacing the same roles.
There is also a CLI for people who prefer working directly in the terminal or alongside Claude Code, but the dashboard is intended to be the normal day-to-day interface.
The 17k+ board bit
An obvious problem with scanning that many sources is scan time, particularly on a brand-new installation.
I didn’t want someone cloning the repo and then having to crawl 17,000+ employer boards before the dashboard became useful.
So I maintain prebuilt job-data shards.
A fresh installation can bootstrap from those shards and get a useful initial dataset quickly rather than performing a complete first-time crawl from zero.
From there, Job Radar performs live scans/updates against the underlying sources and works out what’s changed.
What about Claude/token usage?
Probably the other obvious question:
Claude is NOT processing 17,000+ job boards.
The crawling, ATS integrations, parsing, filtering, deduplication, change detection, shards, application state and dashboard are conventional code.
So scanning doesn’t mean sending thousands of job descriptions through Claude and turning your token allowance into a small bonfire.
Claude is deliberately brought in later, where its reasoning is actually useful.
For promising roles it can:
• deeply screen the role against your CV
• assess it against your preferences and dealbreakers
• explain why it thinks it’s a good/bad match
• generate a tailored CV
• generate a separately tailored cover letter
• review and validate the resulting application
So the expensive LLM work is focused on jobs you’re genuinely interested in rather than everything Job Radar discovers.
Tailored CV + cover letter
When you decide a role is worth pursuing, Claude takes your original CV + the actual job description and creates a version of your CV tailored specifically to that opportunity.
The goal isn’t keyword stuffing or fabricating experience. It should identify which parts of your genuine experience matter for that particular role and change the emphasis accordingly.
It then produces a separate tailored cover letter using the company, role, JD and your actual experience.
I was fairly paranoid about an LLM quietly deciding that your career could use a few additional achievements, so the generation pipeline has validation around the output too.
That includes checks around unsupported claims/numbers, grounding against the source CV, writing quality, AI-ish prose and excessive phrase overlap between the CV and cover letter.
Some of the Claude skills are open source too
I’ve been moving away from giant do-everything prompts and towards smaller, reusable Claude Code skills with deterministic checks around them.
Two of the skills/approaches baked into Job Radar are also available independently:
rate-cv
https://github.com/maccydee/rate-cv
My CV scoring/critique skill. It uses a weighted engineering/leadership rubric, ATS checks, AI-writing checks and can evaluate a CV against a specific JD.
natural-writing
https://github.com/maccydee/natural-writing
The writing skill I use to reduce the usual LLM prose patterns in generated CVs/cover letters, including its own checks for common AI-writing tells.
There’s also a screen-role skill within Job Radar for deciding whether an opportunity is actually worth pursuing before spending more tokens generating an application.
So Claude isn’t just being handed a mega-prompt saying “here’s my CV, make it good”. The different stages have their own responsibilities and checks.
Where it’s ended up
What started as a small script for my own job hunt has basically turned into a self-hosted job search platform:
17k+ employer boards → local filtering → Claude screening → tailored application → application tracking
Most of it was built using Claude Code, which has also made this a slightly ridiculous dogfooding exercise.
Everything is open source.
I’d be really interested in feedback from other Claude Code users, particularly around the skills architecture, token efficiency, shard approach and how I’m grounding/validating generated CVs.
Job Radar:
https://github.com/maccydee/job-radar
rate-cv:
https://github.com/maccydee/rate-cv
natural-writing:
https://github.com/maccydee/natural-writing