Your job feed, tuned to you.
Tell it what you want.It reads every job, scores it for you,and sends the good ones to your phone.
- Self-hosted
- Open source
- No telemetry
What it does
Four things it does for you.
Tell it once what you want. Then, on the schedule you pick, it does the rest.
- One place
Every source, one feed.
Pick the job boards and company career pages you care about. They all land in one list. The same job posted on five sites shows up once, agency posts and closed ads are flagged, and text hidden in an ad to steer AI readers is stripped before your AI sees it.
- LinkedIn, Indeed, Google Jobs; StepStone, XING and Arbeitsagentur for Germany
- Career pages on Greenhouse, Lever, Ashby, Personio, SmartRecruiters
- Your job-alert emails from Gmail
- Tuned to you The core
Your rules, not ours.
Set the pay you won't go below, your cities, contract types and companies to skip. Then say what matters in plain words, in any language: what you want most, what's a nice extra, and what you will never accept. Jobs that hit a dealbreaker sink to the bottom.
- Salary floor, cities, contracts, blocked companies
- Scoring rules in your own words
- Your own signal categories and saved views
- AI reads for you
It reads every job, so you don't have to.
Every description gets a 0–100 match score with the reasons it fits and the gaps. Pay buried in the text is found, quoted and turned into a yearly figure. Break a long ad down into tasks, stack and must-haves, see which of your skills it hits, and read it in your language.
- Match score with reasons and gaps
- Salary found, quoted, made yearly
- Breakdown, skill match, translation
- On your phone
The good ones come to you.
After every cycle, the jobs that clear your bar land in Telegram with their score, pay and badges. Tap 👍 Interested, 🚫 Ignore or 📄 Tailor résumé right there, and your application board follows. Reminders nudge you when an application goes quiet.
- Push with buttons, quiet hours
- Application board and reminders
- Alerts when a source breaks
Self-hosted Open source, AGPL-3.0 Your data stays on your machine Your AI subscription or API key No accounts No telemetry
Features
Every feature in half a minute.
Short clips of the real product, running on invented demo data. Hover to preview, click for sound and captions.
-
Your morning radar
Every cycle lands on Today: what came in, what passed, what is worth a look, ranked your way.
-
Salary, surfaced
Pay written anywhere in the ad is found, quoted and turned into a yearly figure you can compare. Bonuses and funding rounds don't count.
-
Scored by your rules
Every job gets a 0–100 score against your profile, with reasons and gaps. Add a dealbreaker and those jobs sink.
-
One job, not five
The same job on three sites shows up once, every link kept. Agencies, closed ads and filtered jobs are marked, not hidden.
-
Clean input for your AI
Some ads hide instructions meant for AI readers. They are removed before your AI reads the job, and shown to you.
-
Job breakdown & skill match
A long ad split into tasks, stack, years and languages, each with a quote. Your skills are matched on your machine: what you have, what's missing.
-
Filters and saved views
Mix score, pay, source, city, remote and status. Save the combo and it becomes a tab on Today.
-
Keyboard flow
j / k to move, s for interested, x to ignore, f to save, ⌘K to jump anywhere. A full screen in seconds.
-
Telegram, on your phone
After every cycle the good ones land in Telegram. Tap 👍, 🚫 or 📄 and your board follows.
-
Track applications
Drag cards across the board and every move goes on the timeline. Saved jobs stay, even after the ad closes.
-
Many sources, isolated
Job boards, company career pages, Google Jobs and alert emails in one feed. One source breaks, the rest carry on.
-
Your AI, your subscription
The AI work runs on the claude or codex plan you already pay for, or on an API key with a monthly budget.
How it works
Runs on your machine. Talks to your AI.
- 01
Collect
On your schedule, the runner fetches new postings from the sources you switched on and keeps each one as it arrived.
- 02
Clean
Pay, remote mode, languages and contract type are read out, duplicates merge, and your hard filters apply.
- 03
Score
The ai-worker on your computer hands each job to your AI: claude or codex with your own login, or an API key.
- 04
Push
Jobs over your bar go to your Telegram. Everything is on the dashboard at 127.0.0.1:3000.
Job sites
Job boards, career pages, alert emails
pages and APIs you switched on
Your machine
docker compose
webdashboard on 127.0.0.1:3000runnerschedule, collect, process, backupjobspyscraping sidecardbPostgres: all your data
on the host
ai-workerscores, translates, pushes
No AI credentials inside the containers.
job text + the profile parts used for scoring
Your AI
claude / codex with your login, or an API key
pushes and button taps, no open port
Telegram
your own bot
127.0.0.1:3000
You
browser or phone
No AI connected yet? It still collects, de-duplicates, filters and shows postings. Only scoring, translation and breakdowns wait for an AI.
Install
Up and running in three steps.
You need Docker with Compose v2Node 22 and pnpm 11gitmacOS or Linux (tested)
-
Start it
Clone the repository, check out the latest release and bring up the dashboard, the runner, the scraper and the database. On Linux, run the two extra lines first.
git clone https://github.com/Joevonlong/job-radar.git cd job-radar git checkout v2.0.1 # the latest release; main is the development branch # on Linux only, before the first "docker compose up" (containers must run as your user): [ -f .env ] || cp .env.example .env sed -i.bak -e "s/^PUID=.*/PUID=$(id -u)/" -e "s/^PGID=.*/PGID=$(id -g)/" .env && rm .env.bak mkdir -p data/config data/profile data/backups data/exports data/logs .auth docker compose up -d --build # db, web, runner, jobspy; the first build takes a few minutes -
Tell it what you want
Open 127.0.0.1:3000. The setup wizard asks eight short questions: language, market, profile, what you're after, sources, AI, Telegram and a first cycle. No browser? The same questions run in the terminal.
# open http://127.0.0.1:3000 — the setup wizard starts on its own # no browser? the same eight questions in the terminal: pnpm install && pnpm run setup -
Connect your AI
Scoring runs in a small worker on your computer, with your claude or codex login or an API key in .env. Keep it running in a terminal, or let one script install it as a background service (launchd on macOS, a systemd user unit on Linux).
pnpm install pnpm ai-worker # keep it running # or run it as a background service (launchd on macOS, a systemd user unit on Linux): scripts/ops/install-ai-worker.sh pnpm run doctor # checks everything, says what to fix
.env Keys and tokens go in .env only. The wizard never asks for them.
Full setup guide → macOS host checklist Watch the walkthrough →
Privacy
Your machine. Your data. Your AI.
- No accounts Nothing to sign up for. One install, one person.
- No telemetry It doesn't phone home, and there is no hosted service to send anything to.
- Your machine Jobs, your profile and your applications live in a Postgres database in Docker on your computer.
- Your AI The claude or codex plan you already pay for (nothing billed per token), or an API key with a monthly budget.
- Your files Every setting is a plain, commented YAML file you own. Pulling an update never overwrites it.
What leaves your machine
- Job text and the parts of your profile used for scoring (skills, languages, target titles, locations, salary floor, exclusions) the AI provider you picked
- Optional features send more: weekly suggestions (the jobs you marked, with their status), salary lookup (company, title, city, country, seniority; off by default), web search for sources the AI and search providers you switched on
- Push messages your own Telegram bot, if you set one up
- Requests for job listings, and checks that a posting is still online the sources you switched on
Details, provider by provider, are on the privacy page. Privacy page →
FAQ
Questions people ask.
Is it free?
Yes. Job Radar is free and open source (AGPL-3.0), and you run it yourself. What can cost money sits outside it: your AI plan or API usage (API calls stop at a monthly budget you set), and optional paid sources such as Bright Data or Apify for LinkedIn.
Do I need an AI subscription?
No, but that is where it shines. Without an AI it still collects, de-duplicates, filters and shows postings. Scoring, translation and job breakdowns start once you connect claude or codex (the login you already have) or an API key (Anthropic, DeepSeek or MiMo).
Where does my data go?
It stays on your machine, in a Postgres database in Docker. The AI you chose gets the job text and the parts of your profile used for scoring; optional features such as weekly suggestions and salary lookup send a bit more, and messages go to your own Telegram bot. No accounts, no telemetry, no hosted service.
Which job sites does it cover?
LinkedIn, Indeed, Google Jobs through JSearch, the German boards StepStone, XING and the Federal Employment Agency (Arbeitsagentur; these three run in the Germany market only), company career pages on Greenhouse, Lever, Ashby, Personio and SmartRecruiters, and your job-alert emails from Gmail. You choose which to switch on; a few need a key.
I'm not in Germany. Does it work for me?
Yes. The defaults assume no country and the interface speaks English or Chinese. A Germany and EU market pack ships with it (local job boards, German-level rules, EUR); for another country, copy a pack and adjust it.
Does it apply to jobs for me?
No. It finds, reads, scores and keeps track; you decide and you apply. When you want a tailored résumé, it hands the job to resume-kit, a separate tool.
Is scraping job sites allowed?
Some sources read public pages or unofficial endpoints, and some sites' terms forbid automated access. Job Radar throttles its requests, never tries to get past a login wall or CAPTCHA, and stops using a source that keeps failing. Check the terms of every site you switch on, keep volumes low, and prefer official APIs and your own alert emails.
What do I need to run it?
A computer that runs Docker on macOS or Linux (both tested; Windows with WSL2 is untested), plus Node 22 and pnpm 11 for the helper commands and the AI worker. It is built for one person on one machine, and Telegram works without opening any port.