Phase 1-3 deliverables: full architecture/security/tech-debt map, 2026 market research with feature matrix, and tiered execution roadmap. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
6.4 KiB
ROADMAP.md — Jobbjakt Product & Engineering Roadmap
Phase 3 deliverable (2026-07-02). Sources:
docs/SYSTEM_OVERVIEW.md(Phase 1) anddocs/PRODUCT_RESEARCH.md(Phase 2). Scoring: Value/Complexity/Risk on ▲ high / ● medium / ▽ low. Effort: S <1 day · M 1–3 days · L 1–2 wk · XL >2 wk.
North star: the private, self-hosted career hub — the tracker UX of Huntr, the tailoring/scoring of Teal+Jobscan, powered by local AI, with data that never leaves your server.
Tier 0 — Quick Wins (do first; days, low risk, compounding payoff)
| # | Item | Type | Value | Effort | Risk | Rationale |
|---|---|---|---|---|---|---|
| Q1 | CI: run the full frontend test suite (replace the hand-maintained 10-file whitelist with the whole suite; fix/quarantine any flaky test explicitly) | eng | ▲ | S | ▽ | New tests currently silently skipped in CI; already caused a gap once |
| Q2 | Automated production DB backup (scheduled SQLite VACUUM INTO/copy to exports/ with retention; document restore) |
eng | ▲ | S–M | ▽ | Prod currently has no working automated backup (backup endpoint is Windows-DPAPI-only, prod is Linux) |
| Q3 | Repo hygiene (delete dead root Controller/; remove temp_job.json, temp_post_job.py; gitignore JobTrackerApi/CvArtifacts/, bin_build/, stray artifacts; commit pending WIP fixes on a branch) |
eng | ● | S | ▽ | Removes footguns before refactors; working tree currently dirty |
| Q4 | Swagger/OpenAPI (Swashbuckle or built-in OpenAPI, dev-only exposure) | eng | ● | S | ▽ | README endpoint list already drifts; prerequisite for a generated TS client later |
| Q5 | Structured salary fields (min/max/currency/period alongside the free-text field, backfill-friendly) | product | ● | S–M | ▽ | Cheap now, prerequisite for offer comparison + analytics later |
Tier 1 — High Value (the differentiators; next 2–4 weeks of feature work)
| # | Item | Value | Effort | Risk | Notes |
|---|---|---|---|---|---|
| H1 | CV↔Job match score + keyword gap analysis — per-job score, missing keywords, section coverage; reuse ProfileCvStructureJson + existing Ollama path; panel in job workspace |
▲▲ | M–L | ● | The market's #1 paid feature (Jobscan $50/mo), free & local here. Flagship differentiator |
| H2 | Canonical pipeline + drag-drop kanban — status enum + ordering + per-user custom stages; migration normalizing existing free-text statuses; board becomes drag-drop | ▲▲ | M–L | ● | Fixes daily UX; unblocks H3; the riskiest part is the status migration (needs careful mapping + tests) |
| H3 | Analytics dashboard v2 — funnel conversion, response rate, time-in-stage, weekly activity, source effectiveness (data already in JobEvent) |
▲ | M | ▽ | Depends on H2 for clean stages |
| H4 | Gmail AI status suggestions — extend the existing review queue: classify incoming mail (rejection/interview/offer) via local AI and suggest status moves, human-confirmed | ▲ | M | ● | Compounds an existing unique strength; keep human-in-the-loop |
Tier 2 — Medium Value (after Tier 1)
| # | Item | Value | Effort | Risk |
|---|---|---|---|---|
| M1 | Bookmarklet / PWA share-target capture — one-click save-to-Jobbjakt reusing jobimport/preview |
▲ | S–M | ▽ |
| M2 | PWA pass — manifest, installability, mobile nav polish | ● | M | ▽ |
| M3 | Interview hub — interview entity (round, type, time, prep notes, outcome), timeline integration, ICS export + reminders | ▲ | L | ● |
| M4 | Contacts (people) CRM — recruiter/hiring-manager entities linked to companies/jobs/correspondence | ● | M | ▽ |
| M5 | Durable CV processing queue — DB-backed queue replacing in-memory (jobs survive restart) | ● | M | ● |
| M6 | ProblemDetails + validation consistency across API | ● | M | ▽ |
Tier 3 — Long-Term Improvements (structural; interleave carefully)
| # | Item | Value | Effort | Risk |
|---|---|---|---|---|
| L1 | Decompose god controllers (JobApplicationsController 151 KB, ProfileCvController 117 KB, GmailController 60 KB) into feature services; extract AI prompt construction behind interfaces. Strictly behavior-preserving, test-first, one slice per PR |
▲ (maintainability) | XL | ▲ |
| L2 | Finish the project-layout migration — physically move linked Models//Data//controller/service files into real projects, retire glob-include JobTrackerBackend |
● | L | ● |
| L3 | Vite migration (CRA/react-scripts is EOL; 4 GB-heap builds) | ● | L | ● |
| L4 | OpenAPI-generated TypeScript client replacing hand-written api.ts surface |
● | M–L | ● |
| L5 | Staging environment / deploy gate (compose profile or second host; smoke test before prod) | ▲ (ops) | L | ● |
Tier 4 — Future Ideas (not scheduled)
- Full browser extension (Chrome/Firefox store) with autofill.
- Web push notifications + weekly digest.
- Company research assistant (local AI summarizing company info).
- Offer comparison & salary analytics dashboards.
- Job feed matching from saved searches (Finn/NAV polling).
- Native mobile wrappers; CalDAV/Google Calendar two-way sync.
- Multi-instance/scale-out readiness (distributed cache/queue).
Recommended execution sequence (Phase 4+)
Interleaving product and engineering so debt never blocks features:
- Wave 0 (hygiene): Q3 → Q1 → Q2 → Q4 → Q5 (each a small conventional commit on a feature branch; Q1/Q2 are the two items with real operational risk today)
- Wave 1 (flagship): H1 match scoring (design doc → backend endpoint → UI panel → tests)
- Wave 2 (core UX): H2 canonical pipeline/kanban, then H3 analytics
- Wave 3: H4 Gmail suggestions, M1 bookmarklet, M2 PWA
- Wave 4: M3 interview hub, M4 contacts, M5 durable queue
- Continuous: L1 controller decomposition proceeds opportunistically — whenever a wave touches a god-controller area, extract that slice first (M6 rides along); L2–L5 scheduled after Wave 3 checkpoint.
Phases 5–10 of the mission (bug hunt, security audit, performance, refactoring, testing, docs) run after or between waves as checkpoints; Phase 11 rules apply throughout (feature branches, conventional commits, full test suite before commit, no auto-merge to main).
Explicitly deprioritized: auto-apply automation (quality/ToS problems), cloud AI providers (undermines privacy moat), Chrome-store extension before the bookmarklet proves demand.