# Current route and page map Source: [App.tsx shell routes](../../../job-tracker-ui/src/App.tsx#L379) and [outer router](../../../job-tracker-ui/src/App.tsx#L472). All paths below are current behavior, not target architecture. Preserve or redirect every path intentionally. `:id` and `:slug` represent route patterns, not single records. ## Public entry routes | Route | Component | Contract | |---|---|---| | `/` | LandingPage | Public product/plans and sign-in entry; authenticated redirection behavior has its own test | | `/login` | LoginPage | Local/Google/Microsoft sign-in, verification/2FA branches | | `/register` | LoginPage (`initialMode=register`) | Configuration-gated account creation | | `/forgot-password` | ForgotPasswordPage | Request reset without disclosing account existence | | `/reset-password` | ResetPasswordPage | Token-bearing reset flow | | `/verify-email` | VerifyEmailPage | Verification-token flow | | `/confirm-email-change` | VerifyEmailPage (`emailChange`) | Pending email-change confirmation | | `/microsoft-legacy-relink` | MicrosoftLegacyRelinkPage | Existing-account recovery/relink flow | | `/cv/:slug` | PublicCvPage | Explicitly published CV preview/PDF; no general private CV access | ## Application routes The shell resolves auth/config and `/auth/me`; deployed server authentication remains authoritative. Admin navigation is hidden for ordinary accounts, while API role checks enforce access even for crafted deep links. A routed component is not itself an authorization boundary. | Route | Component | Entry / preservation requirement | |---|---|---| | `/dashboard` | DashboardView | Personal metrics, next actions, onboarding and local widget visibility | | `/discover` | JobDiscoveryPage | NAV search, saved searches/alerts, review before tracker import | | `/jobs` | JobTable (`jobs`) | Filters, search, sort, pagination, saved views, columns, selection/bulk actions, full/preview workspace | | `/jobs/:id` | ApplicationWorkspacePage | Full job workspace; section/follow-mode query semantics | | `/reminders` | RemindersView | Follow-ups, deadlines and progression actions | | `/operations` | OperationsPage | Background progress/retry/cancel and notifications; reachable outside main nav | | `/kanban` | KanbanBoard | Alternate view of the same jobs; grouped statuses, keyboard and pointer moves | | `/companies` | CompaniesTable | Company/contact editing and relationship detail; `?edit=id` command entry | | `/offers` | OfferComparisonPage | Comparison of recorded offers and links to source workspaces | | `/correspondence` | CorrespondenceInboxPage | Inbox, provider messages, drafts, reply/send and review mode | | `/correspondence/review` | Redirect | Existing alias to `/correspondence?view=review` | | `/profile` | ProfilePage | Account identity/avatar/password/email; security cards and account links | | `/applications/:id` | LegacyApplicationRedirect | Existing alias to `/jobs/:id`; preserves search and router state | | `/career` | CareerWorkspacePage → CareerProfilePage | Canonical profile, import/review, history and evidence bank | | `/career/builder` | CvBuilderPage | CV library, templates, creation/copy/manage/share/export | | `/career/builder/:id` | CvBuilderEditor | Persisted CV variant studio, preview, history and AI review | | `/admin/audit` | AdminAuditPage | Admin event history and permitted undo/restore | | `/admin/users` | AdminUsersPage | Admin account/role/reset/deletion controls | | `/admin/system` | AdminSystemPage | Admin service/configuration/maintenance/benchmark diagnostics | | `/trash` | JobTable (`trash`) | Deleted-job listing and restoration; retain distinct mode semantics | | `/settings` | SettingsView | General, follow-up rules, notifications and backup/account lifecycle tabs | | `/settings/connected-accounts` | ConnectedAccountsPage | Gmail, Microsoft Graph and IMAP provider connections | There are **31 concrete patterns: 29 page patterns and two redirect aliases**. The remaining three declarations in the AST census are the outer `/*` shell, inner `*` NotFoundPage and inner root redirect. The explicit outer `/` landing route takes precedence over the shell's root redirect. RouteErrorPage is an error boundary, not a separate URL. Do not manufacture an `/analytics`, `/documents` or `/notifications` page from the target brief: their current functions are embedded in dashboard/job/operations/settings surfaces. ## Non-route entries and state contracts | Entry | Current effect | |---|---| | Shell add button; command action; capture URL `?add=` / `?addtext=` | Opens AddJobModal and consumes the query. Browser extension/bookmarklet/share entry depends on this | | Job row/card; preview action | Full job page or reused ApplicationWorkspace overlay; preserve close/focus, dirty protection and full-page handoff | | `/jobs/:id?section=...` | Overview, analysis, CV, cover-letter or interview; older `match`, job-details/checklist/documents/timeline/communication values map through existing route helpers | | `/applications/:id` and older tab contracts | Legacy redirects and numeric tab-to-section mapping; covered by route-contract tests | | Command search `Ctrl/Cmd+K` | Jobs and companies plus six static commands; company result uses `/companies?edit=id` | | Notifications/reminders/operations | Deep links can enter a job subsection or processing result without first visiting Jobs | | Builder public/share/PDF | Public slug lifecycle is separate from authenticated numeric CV identity | | OAuth popups/callbacks | Provider/backend callback and postMessage flow; not additional React pages. Preserve exact origin/state contracts | Sources: [jobWorkspaceRoute](../../../job-tracker-ui/src/jobWorkspaceRoute.ts), [AppShell](../../../job-tracker-ui/src/layout/AppShell.tsx), [QuickCommandDialog](../../../job-tracker-ui/src/components/QuickCommandDialog.tsx), [workspace component](../../../job-tracker-ui/src/views/ApplicationWorkspacePage.tsx). Phase 3 may propose navigation merges; this inventory does not authorize deleting aliases or current functionality.