16 KiB
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 and component census supply the individual call sites/consumers behind these groups.
There are 57 protected capability groups. The completion summary classifies existing behavior, UX improvements, new requirements and known defects separately. A preserve-and-improve classification never removes a capability from this contract; known defective behavior is not the intended behavior to preserve.
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, page boundaries/automatic fit and save state | CvBuilderEditor; existing mobile edit/preview and desktop split must retain parity; automatic fit is not a manual zoom control |
| C07 | Built-in item visibility/order, custom sections, preset/free-text section catalog, item/content overrides, hide/remove, native section drag and keyboard reorder | CvBuilderEditor, components/cv/*, useDragReorder; 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 |
Relationship to the target brief
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 are new work beyond the five local booleans; cross-device persistence is an unresolved scope choice. Optional goals, a new logo and expanded contextual access are separately identified additions; a general chat platform, product rename or additional providers are not implied by existing AI/integrations. Retain implemented Google/Outlook calendar actions even though the product brief describes broader calendar ambitions as future work.
The new-requirements matrix distinguishes required versus suggested/future additions: expanded command search/actions, application density, configurable status mappings, per-task scheduling, intent-led onboarding, contextual-assistant access and aggregate admin metrics. Existing raw custom status values, job reminders, onboarding checklist, operational admin dashboard and CV document density must remain intact; none alone establishes the corresponding new contract. The brief asks for contextual assistant access, not necessarily a general chat platform; a new logo is required, while a name change remains undecided.
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.