Files
jobtrackingapp/docs/ROADMAP.md
cesnimda c38295d869 docs: add system overview, product research, and roadmap
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>
2026-07-02 21:24:03 +02:00

6.4 KiB
Raw Permalink Blame History

ROADMAP.md — Jobbjakt Product & Engineering Roadmap

Phase 3 deliverable (2026-07-02). Sources: docs/SYSTEM_OVERVIEW.md (Phase 1) and docs/PRODUCT_RESEARCH.md (Phase 2). Scoring: Value/Complexity/Risk on ▲ high / ● medium / ▽ low. Effort: S <1 day · M 13 days · L 12 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 SM 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 SM Cheap now, prerequisite for offer comparison + analytics later

Tier 1 — High Value (the differentiators; next 24 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 ▲▲ ML 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 ▲▲ ML 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 SM
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 ML
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).

Interleaving product and engineering so debt never blocks features:

  1. 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)
  2. Wave 1 (flagship): H1 match scoring (design doc → backend endpoint → UI panel → tests)
  3. Wave 2 (core UX): H2 canonical pipeline/kanban, then H3 analytics
  4. Wave 3: H4 Gmail suggestions, M1 bookmarklet, M2 PWA
  5. Wave 4: M3 interview hub, M4 contacts, M5 durable queue
  6. Continuous: L1 controller decomposition proceeds opportunistically — whenever a wave touches a god-controller area, extract that slice first (M6 rides along); L2L5 scheduled after Wave 3 checkpoint.

Phases 510 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.