Files
jobtrackingapp/docs/remaster/UX_REVIEW.md
T
cesnimda f0f178d77e docs(remaster): full-system audit + rebuild-vs-refactor decision
Deep, code-grounded audit of Job Tracker producing the mission deliverables
under docs/remaster/: system audit, bug report, architecture/data-model/AI/UX
reviews, remaster proposal, migration plan, competitor research, and the gated
REBUILD_DECISION.

Verdict: Incremental Refactor (no full rebuild). Evidence: no Critical defects;
hardened cookie/CSRF auth (token never in JS storage), real SSRF defence,
enforced multi-tenancy via global query filters, decoupled provider-swappable
AI service, 135 backend tests. Debt is localised (god controllers/entity,
missing hot-path indexes, prompt-injection hardening, CRA build debt) and
reachable by in-place, test-guarded refactors.

Also harden .gitignore: exclude agent tooling (.claude/, .bg-shell/, .agent.md)
and restore/broaden the runtime-secrets block (**/keys/, **/backups/, exports,
CV artifacts) so nested DataProtection keys can't be committed accidentally.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 10:04:03 +02:00

3.5 KiB

UX / Product Review — Job Tracker

Companion to: SYSTEM_AUDIT_REPORT.md Note: grounded in code/components and .gsd intent; not a live usability test. Items needing real-user validation are labelled [Speculative issue].

1. Daily-loop navigation — good bones

.gsd D004 defines: job table → follow-up/dashboard → individual job workspace. The build honours this (/jobs, /dashboard, /reminders share one workflow-signal contract, D011). This is a coherent mental model for a job seeker's daily rhythm. Keep it.

2. Job creation flow

  • URL import (preferred) + manual fallback both exist.
  • Import-failure UX [Design flaw — Medium]: when scraping fails or returns junk (the common case for LinkedIn/Indeed), the recovery path is a silent drop to manual entry. Users won't know why it failed or that the manual fields are now their job. Needs an explicit "we couldn't read that page — here's what we got, fill the rest" state that pre-fills whatever parsed.
  • Quick-capture (bookmarklet + PWA share-target, M1/M2) is a genuinely nice friction-reducer.

3. CV regeneration UX

  • Tailored-CV workspace persists reusable package material (D006). Good.
  • Historical smell [Design flaw]: the saved application-answer draft was shoehorned into the free-text notes block (D006) because no dedicated field existed; repeated saves duplicated content until a "replaceable notes block" workaround landed. This is UX built around a schema gap — fix the schema (dedicated field), retire the workaround.
  • No "why this score" [Speculative issue — Medium]: the match score is a number with a card, but the deterministic keyword basis isn't surfaced as "matched: React, Azure / missing: Kubernetes". Showing the gap turns a vanity number into an actionable to-do (add these keywords / this is a stretch role).

4. Cover-letter workflow

Manual / upload / AI-generated, returned as draft (assistive-only, D002). Consistent and safe. Ensure the three entry points converge on one editable draft surface (avoid three divergent UIs).

5. Dashboard clarity

Time-in-stage card + funnel via canonical JobPipeline (H3). Solid analytics for a personal tool. Risk: funnel/analytics load-all-then-count server-side today (perf, not UX) — invisible to users until data grows.

6. Timeline usability

JobEvent history drives status/stage transitions; correspondence continuity shows linked-thread refresh state in the workspace (D012). Good trust surface. [Speculative issue]: verify the timeline reads as a single chronological story (events + emails interleaved), not two separate lists.

7. Cross-cutting UX risks

Item Sev Note
Import failure feels like a dead end Medium pre-fill + explain, don't silently drop to manual
Match score without gap breakdown Medium show matched/missing keywords
Notes-block overloading Low (mitigated) fix schema, retire workaround
Attachment checklist can lie High (data) booleans drift from real attachments (see data review)
No visible AI-fabrication guardrail Medium show "AI added X — confirm" in CV review

8. Product-identity question (drives UX direction)

Is this a personal tool (D003) or a multi-tenant SaaS? The UX for onboarding, empty states, sharing, and billing diverge sharply. This is the single biggest unanswered product question and should be decided before the next UX investment (see REMASTER_PROPOSAL.md §1).