Skip to content

chernistry/hireex

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

80 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

hireex

Need a job? Sip your drink.

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.


free (your key) runs on your laptop personal use only

Try the demo: https://hireex.ai

Docs Β· Install Β· Pipeline Β· Privacy


hireex dashboard

Beyond the boards β€” autonomous discovery

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.

Discovery agent live DAG

It's off by default. Flip it on in settings when you want it.


Install

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 | bash

Open 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.


Pipeline

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.

Triage

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.

Configuration

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.


Stack

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.

Build from source

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 --build

make 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]'.


Privacy

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.


License

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.