Legacy /client Decommission Checklist
Goal
Retire the legacy token-based /client experience and /api/client-access/* public controller endpoints.
Strategy: hard cut (no backward compatibility).
Status (2026-07-24) — Phase 4 complete
Legacy UX tree and public /api/client-access/* controller are gone. Residual dead DTOs and PayPal /client/paypal/* defaults were removed in the cleanup wave. Modern portal is /portal/* with magic-link entry via /client?returnUrl=… (intentional bridge, not legacy pages).
Removed
- Legacy frontend route mount
/client/*pages (quotes, sessions, galleries, etc.) frontend/src/routes/client.routes.tsx,frontend/src/pages/client/**frontend/src/components/layout/ClientLayout.tsxfrontend/src/client/client-access/**,frontend/src/components/client-access/**- Legacy backend public controller
/api/client-access/* - Unused
client-access/dtoleftovers (resolve-client-access,send-client-email,update-client-profile) - Stale PayPal defaults pointing at
/client/paypal/return|cancel— now portal invoice URLs
Keep (modern, not legacy UX)
| Piece | Role |
|---|---|
GET /client?returnUrl=… → /portal/* | Magic-link / email entry (ClientPortalEntryPage) |
backend/src/client-access/** services | Tokens, email payloads, portal helpers (no public controller) |
/portal/*, client-auth, client-accounts, client-messages | Authenticated client portal |
Replacement paths
- Quotes/documents →
/portal/documents(+ detail routes) - Sessions →
/portal/sessions - Galleries →
/portal/galleries - Profile →
/portal/settings - Proposal/upsell → DELETED (FE/BE + DB
0277; was/proposal/:token; use quote / portal flows instead) - PayPal return/cancel →
/portal/documents/invoices/:id?payment=paypal-return|paypal-cancel
Exit criteria
- No product feature depends on legacy
/client/*page tree - No new links generate legacy
/client/quotes|sessions|…paths - Emails use
/client?returnUrl=bridge or direct/portal/* - Optional: E2E coverage for
/portal(tracked separately) - Optional: ops note that old bookmarked
/client/…deep links fail (hard cut by design)
Notes
- External legacy deep links may 404; that is expected.
- Do not reintroduce a public
/api/client-accesscontroller. - Related: APP_CLEANUP_MAP.md.