# UX / Product Review — Job Tracker **Companion to:** [SYSTEM_AUDIT_REPORT.md](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](REMASTER_PROPOSAL.md) §1).