HireEx reads job boards for you, skips the junk, and hands you the handful worth applying to.
It runs on your laptop. It's free. You don't have to be a developer to get the point.
Try the demo: https://hireex.ai
Docs Β· Install Β· Pipeline Β· Privacy
Most job tools just read the big boards and call it a day. HireEx also goes hunting for companies the boards haven't caught up with yet. Think Y Combinator batches the day they're announced, startups that raised money this morning and haven't updated their careers page, engineers posting "we're hiring" on Hacker News. HireEx watches a handful of corners like that in the background, finds the companies you'd never hear about otherwise, and pulls their open roles into the same inbox as everything else.
It's off by default. Flip it on in settings when you want it.
One command. You need Docker on your machine. That's it β no Python, no Node, no "install this, then that".
curl -fsSL https://raw.githubusercontent.com/chernistry/hireex/main/scripts/quickstart.sh | bashOpen http://localhost:3000/settings, paste an OpenRouter key (free tier works), click save. That's the whole setup. Next time it fetches jobs, it'll start sorting them for you.
Deep-dive β ports and data
Ports 3000, 5432, 6379, 8000 need to be free. Watch API logs with docker compose -f hireex/compose.public.yml logs -f api. Your data lives in named Docker volumes: down preserves it, down -v wipes it.
Here's what happens when HireEx wakes up. Six steps (or seven, if you turn on the background hunter). You don't have to know any of this to use it β but if you're curious, here's the tour.
| # | In plain English | Technical name | What actually happens |
|---|---|---|---|
| 1 | Fetch | Ingest | Pulls fresh postings from thirteen boards in parallel: LinkedIn, Indeed, Glassdoor, Google Jobs, ZipRecruiter, Bayt, Naukri, Greenhouse, Lever, Ashby, Workable, RemoteOK, WeWorkRemotely. |
| 2 | Quick toss | Stoplist | Kills off anything from companies or titles you've said "never" to. Editable from the dashboard β and retroactive, so past postings disappear too. |
| 3 | First read-through | Pre-filter | A cheap AI model does a fast read-through of each posting and drops obvious no's. Five tiers, hard rules; when in doubt it rejects. |
| 4 | Remove duplicates | Dedup | Notices when two postings are basically the same job (different boards, copy-pasted listing) and only shows you one. Runs locally β no calls to the cloud. |
| 5 | Real score | Score | A stronger AI model reads the survivors against your profile and scores each one: role fit, stack match, salary, growth, risks. It explains its reasoning, and even hints what to tailor in your application. |
| 6 | Your turn | Triage | The dashboard. You glance, keyboard-shortcut your way through, and archive the chaff. Five minutes instead of two hours. |
| 7 | Background hunter (optional) | Agent | Watches seven places where fresh hiring signals pop up β YC batches, funding news, Hacker News "Who's Hiring", conference speaker lists, active GitHub folks, LinkedIn employee updates, hiring tweets β and adds new companies on the fly. Off by default. Turn it on in config/settings.toml under [agent], then open /agent in the dashboard. |
Open the dashboard, and this is what you get to work with. All of it is optional β you can just click around with a mouse if keyboards aren't your thing.
| Hover a score | See why: tier, five axes, reasoning, what to tweak in your application. |
| Drawer auto-advances | One keystroke acts on a job and jumps to the next. Keys: a / s / n / i / o / r / e / b. |
| Bulk actions | Select a bunch, act on all of them, undo if you change your mind. |
| Filters | Score slider, date range, search any column. |
| Company blacklist | One click and every past posting from that company disappears too. |
| Power keys | βK for a command palette, ? for help, j / k to navigate, g <letter> to jump around. |
| Run modes | One shot or let it run forever. The pipeline is off until you click Start β nothing happens behind your back. |
A few files hold your preferences β what you want, what you don't, your salary floor, companies you'd never work for. They're all on your disk, nothing gets sent anywhere you haven't asked. Most of them are editable live from the Settings page β you don't have to open a text editor.
Deep-dive β file layout
All the real files are gitignored; .example templates ship with the repo.
| File | What it holds |
|---|---|
.env |
API keys, LinkedIn credentials, database URLs. |
config/candidate_profile.toml |
Your positioning, skill tiers, dealbreakers, salary floor, experience. |
config/settings.toml |
Blacklists, fuzz threshold, pre-filter config, [agent.*] blocks. |
config/search_queries.toml |
Search terms and locations. |
config/ats_companies.toml |
Company slugs for direct ATS integrations. Empty by default. |
prompts/score_job.md, prompts/filter_job.md |
The AI instructions for the pre-filter and the real scorer. |
Field-by-field reference at docs/configuration.md.
What's under the hood, for people who want to know.
| Layer | Tech |
|---|---|
| LLM | OpenRouter by default β plug in local Ollama or your own backend if you prefer. Redis cache on responses. |
| Embeddings | BAAI/bge-small-en-v1.5, 384-dim via fastembed (local ONNX, no API key, no outbound calls). |
| API | FastAPI, Pydantic v2, Prefect 3 for ingest and score flows. |
| Dashboard | Next.js 16, React 19, Tailwind 4, TanStack Query + Table, shadcn/ui. |
| Storage | Postgres + pgvector HNSW, Redis. |
| Background hunter | Deterministic scheduler, seven signal adapters, three bounded LLM probes, HMAC audit chain. |
If you'd rather clone and hack on it directly:
git clone https://github.com/chernistry/hireex.git
cd hireex
cp .env.example .env
cp config/candidate_profile.example.toml config/candidate_profile.toml
cp config/search_queries.example.toml config/search_queries.toml
cp prompts/score_job.example.md prompts/score_job.md
cp prompts/filter_job.example.md prompts/filter_job.md
make all # or: docker compose up --buildmake dev for data services only, make back / make front for local dev servers, make stop to bring it down. Developer extras: pip install -e '.[dev,docs]'.
Short version: your stuff stays on your laptop. There's no account, no tracking, no signup. Nobody is watching over your shoulder. The one exception is the AI provider you pick β they see the job descriptions and your profile because that's how the scoring works. You can swap them out for a local model if that bothers you.
Details in docs/privacy-and-data.md.
Free for personal use, source is open β LICENSE.
You can read it, run it for your own job search, change it, and host it for others for free, as long as everyone brings their own API keys. You can't sell it, run it as a paid service, proxy your keys to people, bundle it into something you charge for, or remove the credit.
Want to license it commercially? Email me: alex@alexchernysh.com.
Β© 2026 Alex Chernysh.
