AI that tells you which jobs not to apply to. Apply to 10 jobs like a sniper, not 500 like a bot.
Most "AI job search" tools optimize for more applications. JobDeck optimizes for better applications — it reads your CV, scores every job on 6 dimensions, and actively tells you to skip the ones that don't fit. For the ~10% that do, it generates a tailored ATS-optimized CV and drafts your application answers in parallel.
Built as a fork of santifer/career-ops. Free for personal use. See NOTICE.md for license details.
Dashboard — jobs scanned with score distribution, active filter chips, role category and company charts. One-click Generate for the filtered shortlist.
Job list — match scores, status badges (New / Applied / Skipped), sniper tier labels, and per-row actions: Apply (opens JD + PDF), Mark Applied, Answer Qs, Regen, Report.
Answer Qs — paste custom application questions, get proof-point-first answers drafted from your saved evaluation + CV.
# Clone and install
git clone https://github.com/akshaykumar94/jobdeck.git
cd jobdeck && npm install
npx playwright install chromium
# Configure
cp config/profile.example.yml config/profile.yml # your name, targets, etc.
cp CLAUDE.md.example CLAUDE.md # your context for Claude
cp templates/portals.example.yml portals.yml # companies to track
# Create cv.md in project root with your CV in markdown
# Scan jobs (zero token cost)
node scan.mjs
node enrich-levels.mjs
# Launch dashboard
cd dashboard && npm install && npm run dev # http://localhost:5173| Feature | How it works |
|---|---|
| 18 filters | Role category, level, department, country, workplace type, employment type, company, tier, score, status, recency, keyword include/exclude, location, hide applied — all multi-select |
| Batch generation | 3 parallel workers × 5 jobs per Claude session. Context loads once per batch (~50% fewer tokens) |
| ATS-optimized PDFs | Space Grotesk + DM Sans template, keyword-injected per JD, clean filename for uploads |
| Score-based triage | 6-dimension A-G evaluation. Below 3.5 = report only, no PDF wasted |
| Answer Qs | Drafts custom form responses using the saved evaluation + CV. Appended to report |
| Company catalog | ~40 curated companies with live ATS validation, multi-select bulk-add |
| Add Company | Paste any careers URL, slug auto-extracted, ATS probed before saving |
| Scan Now | Pulls jobs from all tracked companies via public APIs. Zero tokens |
| Level enrichment | Parses "X+ years" from JD bodies for rows where the title doesn't specify level |
| Apply tracking | Mark Applied / Undo with persistent state across sessions |
| Regenerate | Fresh report number, old kept as history, dashboard shows newest |
| Light / dark themes | Solar Tremor palette, Lucide icons throughout |
Role categories, level labels, and target presets are configurable in profile.yml. The defaults are for software engineers, but you can adapt for nursing, trades, sales, or any field:
dashboard:
role_categories:
- id: icu
label: "ICU / Critical Care"
patterns: ["\\b(icu|intensive care|critical care)\\b"]
- id: er
label: "Emergency"
patterns: ["\\b(emergency|er|trauma)\\b"]
my_targets:
categories: [icu, er]scan.mjs → Greenhouse / Lever / Ashby public APIs → scan-history.tsv
enrich-levels.mjs → Fetches JD body, parses years → min_years_exp column
dashboard/
server.mjs → Express on :3001, reads flat files, spawns claude -p
src/App.tsx → React + Tremor + Lucide, 18 filters, charts, modals
catalog.json → Curated company list with ATS slugs
lib/
jd-fetch.mjs → Shared JD fetcher (Greenhouse + Lever + Ashby)
detect-level.mjs → Shared level detection (title regex + years mapping)
All data lives in flat files — no database. scan-history.tsv, reports/*.md, output/*/, data/applied.tsv. Git-versionable, inspectable, portable.
See dashboard/README.md for endpoint reference and worker config.
JobDeck also works as a Claude Code slash command (inherited from career-ops):
/career-ops {paste JD} → Full evaluation + PDF + tracker
/career-ops scan → Scan portals
/career-ops pdf → Generate ATS CV
/career-ops batch → Batch evaluate
/career-ops tracker → View status
/career-ops apply → Fill forms with AI
npm test # 21 tests via vitest (detect-level, jd-fetch)Fork of santifer/career-ops — the original CLI-driven job search system. Upstream files remain under MIT. JobDeck additions are under PolyForm Noncommercial 1.0.0.
JobDeck is a local tool. Your data stays on your machine. The system never auto-submits applications — you always click submit yourself. AI-generated content should be reviewed before use. Comply with the ToS of job boards you interact with.



