Objective
- Simplify the client portal repair list journey so users always know the next step, with one primary path toward getting repair quotes instead of many competing actions up front.
- Wire the flow and navigation (routes, step structure, entry points) so final copy and visual polish can land afterward without re-plumbing the journey.
- Reduce decision fatigue: keep users in the familiar report-order repair list view by default, defer category / pro-picking until later, and de-emphasize PDF in favor of share-list behavior.
Background
- The repair list sidebar in
attik-frontend/src/app/client/reports/components/RepairListSidebar.tsx exposes multiple footer actions today — Export Repair List, optional Create addendum, GET FREE REPAIR QUOTES (or Share Repair List when quote permission is unavailable), plus expanded-view toggles and saved-list management. Users report too many parallel choices before they understand the journey.
- Quote entry today branches on
getRepairQuoteIntegrationMode() in mapRepairDataForQuickFixModal.ts and jumps early into integration-specific UIs — e.g. PropPair navigates straight to CategorizationPageClient.tsx, QuickFix opens QuickFixRepairQuoteModal.tsx, legacy opens RepairQuoteModal.tsx.
- Thumbtack / ProPair follow-on lives under
reports/[slug]/repair-list/[id]/request/ (MultiCategoryRequestClient.tsx, RequestFlowDrawer.tsx) with persistence on attik-backend/src/models/repairListSchema.ts and src/routes/repairList.ts.
- Share/read-only presentation uses
repair-list/[id]/view/ (RepairListViewClient.tsx).
- v1 focus: wire rails and navigation now; Chris returns for wording, visuals, and final UI polish.
Product decisions (v1)
- Single primary CTA on the repair list sidebar — one obvious “next step” toward quotes; secondary actions (share, export) are subordinate. Create addendum stays visible in the footer for roles with addendum permission (
repair-addendum / fallback) — not removed, just no longer competing at equal weight with the quote path.
- Report-order view is default — users stay in the familiar report-ordered list; category-first layouts are not the default entry.
- Outcome choice after primary CTA (no default) — the first quote step asks the user to choose; neither option is pre-selected:
- Whole report → routes into the QuickFix integration (
QuickFixRepairQuoteModal.tsx and related flow).
- Pick pros → routes into the Thumbtack / ProPair integration (deferred categorization →
CategorizationPageClient.tsx → MultiCategoryRequestClient.tsx / request routes).
- Defer categorization on Pick pros path — category grouping and pro selection happen after the user chooses Pick pros, not on initial quote CTA.
- Thumbtack escape hatch — when category grouping looks wrong later in the Pick pros path, users recover by editing categories (existing categorization UI in
CategorySection.tsx / CategorizationPageClient.tsx).
- One journey shell for all quote-capable brands — PropPair, QuickFix, and legacy/specialty paths share the same simplified step structure in v1; integration-specific internals differ but the entry and outcome-choice framing is unified.
- Role-based behavior unchanged inside new shell — ATT-1367 role differences remain as implemented today, wrapped in the new navigation.
- No quote permission — when the contact has repair list create but not repair quote request permission, behavior matches today: Share Repair List is the primary footer action instead of GET FREE REPAIR QUOTES (same
jobPortalFeatures + finalUserRolePermissions gates in RepairListSidebar.tsx).
- Share over PDF — share-list is preferred over export; PDF/export remains available but less prominent than today (
RepairListExportModal.tsx).
- Wiring first, polish second — navigable step structure in v1; final copy and visual design explicitly out of v1 unless needed for functional clarity.
Scope
Frontend (attik-frontend — client portal / report skin)
- Restructure repair list entry and quote journey from
RepairListSidebar.tsx:
- One primary quote CTA when quote permissions allow.
- De-emphasize Export; keep Share and addendum (permission-gated) visible but subordinate.
- Add outcome-choice step (whole report vs pick pros, no default) before branching:
- Whole report → QuickFix path.
- Pick pros → Thumbtack / PropPair path with categorization deferred until after choice.
- Align QuickFix (
QuickFixRepairQuoteModal.tsx), Thumbtack (CategorizationPageClient.tsx, MultiCategoryRequestClient.tsx), and legacy (RepairQuoteModal.tsx) to the same shell where applicable.
- Ensure edit categories is the recovery path when Thumbtack grouping is wrong.
- Preserve role-based routing from ATT-1367 inside the new shell.
- Keep no-quote-permission share-primary behavior unchanged.
- Ensure
repair-list/[id]/view/ remains compatible with share-first behavior.
Backend (attik-backend)
- Adjust only as needed for new step order / journey state in
src/routes/repairList.ts and repairListSchema.ts if frontend wiring requires different read/write timing.
Out of scope for v1
- Final marketing copy, visual polish, and brand treatment (Chris follow-up).
- New Thumbtack API capabilities or categorization algorithm changes.
- ATT-298, ATT-1518, ATT-291, ATT-306.
Done when
- [ ] Repair list sidebar has one clear primary CTA toward quotes when quote permission allows; secondary actions do not compete at equal weight.
- [ ] Addendum remains visible for permitted roles; Share primary when quote permission is absent (same as today).
- [ ] Default list view stays report-order; categorization is not the first screen.
- [ ] After primary CTA, user chooses whole report vs pick pros with no pre-selected default.
- [ ] Whole report routes to QuickFix; Pick pros routes to Thumbtack / PropPair with categorization after the choice.
- [ ] Wrong Thumbtack grouping is recoverable via edit categories.
- [ ] Role-based behavior from ATT-1367 still works inside the new shell.
- [ ] Share is easier to discover than PDF export; export is de-emphasized.
- [ ] Save/load, permissions, and view/share routes still work.
- [ ] Flow is navigable with placeholder or functional UI — ready for polish pass.
References
- ATT-1367 — role-based journey (preserve inside new shell)
- ATT-1081
- ATT-291 — separate
attik-frontend/src/app/client/reports/components/RepairListSidebar.tsx
attik-frontend/src/app/client/reports/components/RepairListExportModal.tsx
attik-frontend/src/app/client/reports/components/ShareRepairListModal.tsx
attik-frontend/src/app/client/reports/[slug]/repair-list/[id]/components/CategorizationPageClient.tsx
attik-frontend/src/app/client/reports/[slug]/repair-list/[id]/components/CategorySection.tsx
attik-frontend/src/app/client/reports/[slug]/repair-list/[id]/request/components/MultiCategoryRequestClient.tsx
attik-frontend/src/app/client/reports/components/quickfix-repair-quote/QuickFixRepairQuoteModal.tsx
attik-frontend/src/app/client/reports/components/RepairQuoteModal.tsx
attik-frontend/src/app/client/repair-list/[id]/view/components/RepairListViewClient.tsx
attik-backend/src/models/repairListSchema.ts
attik-backend/src/routes/repairList.ts