docs(redesign): complete Phase 1 source audit

This commit is contained in:
cesnimda
2026-09-09 19:29:39 +02:00
parent 23cc250c64
commit 0b932da4a5
13 changed files with 10775 additions and 0 deletions
@@ -0,0 +1,98 @@
# Protected functionality ledger
This is the current source-backed preservation baseline. **All rows are Preserve** until a later approved migration explicitly records relocation, merger or deprecation. Target-only ideas are separated at the end. A component's existence proves implemented behavior, not live provider availability or usability quality. The [API census](API_CALL_SITES.md) and [component census](COMPONENT_INVENTORY.md) supply the individual call sites/consumers behind these groups.
## Entry, navigation and account
| ID | Current user-facing function | Source / important contract |
|---|---|---|
| E01 | Public product explanation, Free/Pro feature comparison, honest unavailable-billing states and sign-in/register links | `LandingPage`, `planCatalog`; do not invent prices or purchasable capabilities |
| E02 | Local sign-in/registration, remember-me, configured Turnstile, resend verification, reset password, verify email | `LoginPage`, reset/verification views, `TurnstileWidget`; server configuration controls availability |
| E03 | Google/Microsoft sign-in/link flows, Microsoft legacy relink, provider popup success/error handling | `GoogleAuthCard`, `MicrosoftAuthCard`, `MicrosoftLegacyRelinkPage`; OAuth/state/origin rules remain |
| E04 | 2FA challenge, recovery codes, setup/verify/disable/regenerate, trusted devices and revocation | `TwoFactorChallenge`, `TwoFactorSettingsCard`; preserve sensitive confirmation and recovery presentation |
| E05 | Active session list, current-device distinction, single/other-session revocation, logout | `SessionsSettingsCard`, `AppShell`, `auth`, `sessionBoundary`; invalidation must clear private UI |
| E06 | Avatar upload/remove, name/display name/headline, account email-change request/cancel/confirm, local password change | `ProfilePage`; account identity is distinct from canonical career data |
| E07 | Collapsible desktop sidebar, mobile drawer, active subsection matching, keyboard command launcher | `AppShell`, `QuickCommandDialog`; job/company search and fixed navigation/add commands |
| E08 | Theme light/dark/system, EN/Bokmål preference with server hydration, toast/confirm/prompt and error routes | `themePrefs`, `I18nProvider`, `toast`, `confirm`, `prompt`, route error/not-found views |
| E09 | Cross-tab account switch, stale mutation/read rejection, BFCache/focus revalidation and reauthentication | `api`, `sessionBoundary`, `App`; B02 server precondition and client unmount/abort must survive extraction |
## Discover and manage jobs
| ID | Current user-facing function | Source / important contract |
|---|---|---|
| J01 | Search NAV listings by role/company/municipality, sorting, source/freshness/deadline/work-arrangement details, external listing links | `JobDiscoveryPage`; provider failures and empty results distinguishable |
| J02 | Named saved searches, run/delete, automatic alert preference, new/updated results and dismissal | `JobDiscoveryPage`, saved-search APIs; retain owner scope and alert metadata |
| J03 | Add job manually or from URL/pasted listing, reviewed preview, company lookup/create, tags and dates, duplicate warning | `AddJobModal`; preview is not a write; keep B01 outbound boundary and existing review step |
| J04 | Capture via browser extension, bookmarklet and share/capture query; optional job attachment and tailored CV draft after create | `QuickCaptureCard`, `captureUrl`, `App`, `browser-extension`; preserve payload/URL contracts |
| J05 | Job table search/filter/sort/pagination, visible columns/page size, saved named views, row/card actions | `JobTable`, `SavedViewsMenu`; mobile cards and accessible full-workspace entry already exist |
| J06 | Selection/bulk status/delete/restore, soft-delete/trash and restore, edit job/company association | `JobTable`, `EditJobDialog`; preserve partial-error handling and confirmation semantics |
| J07 | Kanban grouped status views, drag move, keyboard pickup/drop/cancel, direct status selection, job opening | `KanbanBoard`, `pipeline`; same records as table, not a second job model |
| J08 | Company directory, recruiter/contact/source/location and pipeline/contact-date editing; company relationship job history | `CompaniesTable`; company creation is integrated with job/import flows, not assumed standalone CRUD |
| J09 | Offer comparison including recorded compensation, decision deadline and notes, source-job links | `OfferComparisonPage`; no new compensation calculator implied |
| J10 | JSON/CSV job export; JSON import; CSV-to-import-JSON conversion and import counts | `ImportExportJobs`; preserve B05 blob bytes/BOM, spreadsheet safety and typed formats; do not claim full account restore from job import |
## Job workspace and application artifacts
| ID | Current user-facing function | Source / important contract |
|---|---|---|
| W01 | Dedicated job workspace and reusable quick overlay; overview/analysis/CV/cover-letter/interview sections; old deep-link mapping | `ApplicationWorkspacePage`, `ApplicationWorkspace`, `jobWorkspaceRoute`; retain full-page/overlay parity |
| W02 | Job detail/status/progression, next actions, dates, description, recruiter/contact and timeline | `JobDetailsSection`, `ApplicationProgress`, `ApplicationTimeline`; do not redefine pipeline enums or history |
| W03 | Analysis, profile match/gaps, strategy snapshot, workflow assistance and status suggestions | `ApplicationAnalysis`, `ApplicationMatch`, `ApplicationStatusSuggestion`, `ApplicationStrategySnapshot`; show provenance/loading/failure and confirmation |
| W04 | Checklist create/edit/complete/delete/order, progress and recommended next action | `ApplicationChecklist`; keep keyboard reorder and persisted item identity |
| W05 | Select/attach a CV, create/tailor document variants, review tailoring guidance and selected-source context | `ApplicationCvSection`, `ApplicationTailoringSection`, `applicationWorkspace`; owner+job association enforced by API |
| W06 | Cover-letter editing, AI suggestion review/reject/apply, saved versions and restore, unsaved navigation protection | `ApplicationAssets`, `CoverLetterAiAssistant`; document override must not mutate master profile |
| W07 | Application draft fields, submission/package preparation, frozen submitted-package versions and archived attachment download | `ApplicationAssets`, `SubmittedPackagesSection`, `applicationWorkspace`; historical package is distinct from current draft |
| W08 | Attachments upload/drag-drop, category/purpose, rename, AI-use flag, preview/download/delete | `Attachments`; owner-scoped binary retrieval, consent selection and size/error handling |
| W09 | Interview questions/categories, manual items, answers, ready status, remove, contextual AI review/add-to-prep | `InterviewPrep`, `applicationWorkspace`; generated facts/answers require review |
| W10 | Interview debrief template and follow-up content/date, readiness and next-action state | `InterviewPrep`; neutral prompts must not seed invented company/achievement facts |
| W11 | Follow-up/reminder workflow, rule-driven dates/stages, notifications, deadline/follow-up ICS and Google/Outlook calendar event actions | `RemindersView`, `RulesSettingsCard`, `ApplicationCalendarActions`; calendar integration already exists, date-only/timestamp semantics must survive |
| W12 | Async operation progress, pending/failed/retry/cancel states and associated notifications | `OperationsPage`, profile processing components; preserve operation IDs and server state, avoid duplicate starts on rerender |
## Career Profile and CVs
| ID | Current user-facing function | Source / important contract |
|---|---|---|
| C01 | Canonical structured career profile: personal details, summary, skills, work, education, languages, interests and long-tail/custom sections | `CareerProfilePage`, `views/career/*`; profile save is an account singleton, CV is an identified derived resource |
| C02 | Profile overview, completeness/import guidance, manual edit, copy raw CV text, avatar and version history/restore | `CareerWorkspacePage`, `CareerProfilePage`; preserve projection/history behavior without redesigning schema |
| C03 | CV/file upload and extraction, rebuild/improve/reprocess, progress/history, diff, explicit low-confidence selection, accept/discard, retry/cancel | `CareerProfilePage`, `/profile-cv/*`; uploaded proposal is not silently canonical truth |
| C04 | Evidence bank: sourced statement/title/category/tags, add/list/delete and truthfulness guidance | `CareerEvidenceBank`; evidence belongs to profile owner and is not AI-invented experience |
| C05 | CV library create/name/copy/delete, template gallery and real sample thumbnails, publish/unpublish/share and PDF download | `CvBuilderPage`, `cvBuilder`; separate public slug from numeric private ID |
| C06 | Studio Template/Content/Customize/AI Tools/History navigation; debounced preview and save state | `CvBuilderEditor`; existing mobile edit/preview and desktop split must retain parity |
| C07 | Built-in item visibility/order, custom sections, preset/free-text section catalog, item/content overrides, hide/remove, keyboard reorder | `CvBuilderEditor`, `components/cv/*`; selected profile source and overrides remain distinguishable |
| C08 | Template-capability-aware typography/colors/header/headings, skills presentation/groups, one/two-column and sidebar settings, photo/icons | `CvCustomizeTab`, theme registry; retain unsupported-setting handling and server render equivalence |
| C09 | A4/Letter, density, margins/spacing, date format, document language, per-section rows/grid/compact/bubbles and columns | `cvBuilder`, `CvCustomizeTab`, content controls; do not drop advanced controls merely to simplify layout |
| C10 | Undo/redo of editor settings, save queue, unsaved guard, history/version restore and preview lifecycle | `CvBuilderEditor`; current queue serializes one mounted editor only, not concurrent browsers |
| C11 | Per-section AI improve/translate/custom instruction and whole-document translate/improve/spelling review | `AiSectionAssistant`, builder AI tab; source/target language, current/suggestion comparison, apply/reject |
| C12 | Authenticated PDF export and anonymous published-CV preview/PDF; long searchable multipage documents | `PublicCvPage`, `cvBuilder`, server renderer; B03 shared resource admission and public ownership/publication checks |
## Correspondence and external accounts
| ID | Current user-facing function | Source / important contract |
|---|---|---|
| M01 | Job-scoped manual note/email log, search, delete, paste/import message; current job/company context | `Correspondence`; manual record is different from sending a real email |
| M02 | Gmail candidate search/import, linked-thread refresh/sync history, import thread, unlink/relink/move with job selection | `Correspondence`; cross-job relationship changes remain owner-bound |
| M03 | Global correspondence inbox with pagination/search/filter/direction/provider/link state, full message and attachment information, source-job links | `CorrespondenceInboxPage`; provider read failure distinct from no messages |
| M04 | Compose/reply, choose connected provider and job/recipient, save/resume/delete drafts, review/confirm send, delivery states and explicit new attempt | `CorrespondenceInboxPage`; persisted draft revision and send idempotency/uncertain delivery controls must survive navigation changes |
| M05 | Gmail review candidates, proposed jobs, link/reject/keep decisions, notes, manual sync and create suggested job | `GmailReviewPage` embedded in inbox; retain legacy review redirect |
| M06 | Gmail/Google and Microsoft Graph connection/status/disconnect, IMAP connection/status/disconnect | `EmailProviderConnections`, `ConnectedAccountsPage`; login identity and mail-provider identity are separate capabilities |
## Dashboard, settings and administration
| ID | Current user-facing function | Source / important contract |
|---|---|---|
| S01 | Personal dashboard counts, activity/funnel/company/skill trends, stage/salary insights and actionable next steps | `DashboardView`, analytics APIs; chart transformations and empty/error states preserved |
| S02 | Five per-owner local visibility preferences; onboarding progress and dismiss; notification bell/unread/read/dismiss | `DashboardView`, `OnboardingChecklist`, `NotificationsPopover`; no server widget-order/resize contract exists yet |
| S03 | Follow-up/ghosting rule settings, email reminder preference, table preferences, theme/language and connected-account links | `SettingsView`, `RulesSettingsCard`; preferences have different scopes, do not replace with one unsafely shared object |
| S04 | AI privacy settings, usage/limits, honest Free/Pro lock states, billing status, conditional checkout and portal | `AiPrivacySettingsCard`, `AiUsageCard`, `AccountPlanProvider`; server entitlement authoritative, not client context defaults |
| S05 | Account export, encrypted backup download, lifecycle status and deliberate deletion confirmation | `BackupCard`; recent-auth/password/provider restrictions remain; a downloadable backup is not proven restore readiness |
| A01 | Admin user list/create, role promotion/demotion guards, reset link and delete with last-admin/self warnings | `AdminUsersPage`, `/users`; API roles enforce privilege regardless of navigation |
| A02 | Admin audit event list/detail, supported undo and job restore | `AdminAuditPage`; preserve event/ownership semantics rather than generic mutation buttons |
| A03 | Separate system health/build/database/AI/email status, SMTP settings/test, AI probe, CV corpus benchmark and maintenance run controls | `AdminSystemPage`; sensitive config values/logs must not move into personal dashboard |
## Target brief items that are not current features
The target grouped navigation would reorganize an existing collapsible sidebar. Jobs/Table and Kanban can become view choices over the existing APIs. Dedicated Analytics/Documents/Notifications destinations would relocate embedded capabilities. They are not permission to delete offers, reminders, correspondence review, operations or legacy URLs.
Dashboard drag/order/resize/reset and cross-device persistence are new work beyond the five local booleans. A general assistant/chat, goals system, new brand/name and additional email/calendar providers are not implied by existing contextual AI or integrations. Retain implemented Google/Outlook calendar actions even though the product brief describes broader calendar ambitions as future work.
During migration, extend this table with destination, regression test and review evidence per ID. Do not treat a screen screenshot or a count of passing tests as proof that all rows survived.