Files
jobtrackingapp/docs/redesign/phase-3/COMPONENT_ARCHITECTURE.md
T
2026-09-10 18:15:05 +02:00

6.6 KiB
Raw Blame History

Component architecture

ARC-15; affected contracts are in each row and the full impact matrix. Names describe responsibilities, not a mandate for one file per name. Retain existing implementations until a scoped consumer needs the shared behavior.

Retain, refactor, consolidate or add

Target responsibility Existing owner Disposition and boundary PRES
AppShell / Sidebar layout/AppShell; App nav/title helpers Refactor existing grouped/collapsed/drawer presentation; preserve auth tree, collapse and active matching. Extract Sidebar only if it simplifies this owner E07–E09
PageHeader AppShell title/breadcrumb/rightActions plus local page headers Consolidate heading/action hierarchy; keep one h1 and no duplicated global/detail header E07, E08, W01, C06
WorkspaceHeader local WorkspaceHeader in ApplicationWorkspacePage; CV header Retain/refactor per-domain content; share layout only, not save/status semantics W02, C06, C10
MetricCard DashboardView metricCards/Card Refactor as data-labelled presentation; no fetching/AI in a card S01
DashboardWidget DashboardView SectionCard + visibility menu Add later catalogue/order/size wrapper in Phase 8; existing visibility migrated S02
DataTable / MobileDataCard JobTable and CompaniesTable use MUI Table; admin uses MUI X grid Retain engines; share toolbar/state/cell styles where proven. TanStack Table is installed but no current src import was found; do not introduce it as a migration prerequisite J05, J06, J08, A01
StatusBadge pipeline statusLabel/statusTone and inline Chips Consolidate presentation using existing status semantics; custom values retained J07, W02, S01
FilterBar JobTable inline/mobile controls; SavedViewsMenu Refactor presentation around same filters/saved-view owner J05, S03
EmptyState / ErrorState / LoadingSkeleton ViewStateNotice, useViewResource, local skeletons Consolidate semantics/retry/focus; existing owner still decides data/error states. Do not create three wrappers when one composition suffices E08 and all loaded pages
QuickPreviewDrawer ApplicationWorkspace optional props; no active host Add only after parity fixture, read-only summary/navigation. Do not mount second full editor W01, J05
CommandPalette QuickCommandDialog + App keyboard trigger Refactor/extend existing action callbacks and owner-scoped result reads E07, J04, J08
NotificationCentre NotificationsPopover + Notifications API Refactor/extend same store; new full route only when needed S02, W11, W12
AIAction AiSectionAssistant, CoverLetterAiAssistant, InterviewAiAssistant, document AI tab, aiWorkspace Consolidate state/entry presentation, retaining each API/context and entitlements C11, W03, W06, W09, S04
AIReviewDiff current/proposed builder, extraction and letter views Consolidate readable comparison/reject/apply UI; domain validations and payload identity remain local C03, C11, W06
DocumentCard / row CvBuilderPage, Attachments, SubmittedPackagesSection Add index projection view, reuse domain open/download handlers; never merge resource persistence C05, W07, W08
WorkspaceTabs ApplicationWorkspace tabs; CV studio tabs; settings TabPanel Refactor semantics/responsive selector where repeated; preserve dirty guards and active resource W01, C06, S03
SettingsSection SettingsView SectionCard; security/provider cards in ProfilePage Consolidate layout/help/errors only; server/local settings scopes stay separate E04–E06, M06, S03–S05
Form fields and dates MUI TextField/Select/Autocomplete/DatePicker; RichTextField, TagsInput Retain + targeted accessibility refactor for names/help/errors. No form framework or HTML storage migration C01, C07, W06, J03
Dialog / Drawer / confirmation MUI, confirm, prompt, toast Retain mechanics; standardize focus/name/dirty behavior and mode styling E08, W01, S05
Task row / Timeline ApplicationChecklist, ApplicationTimeline, InterviewPrep Retain/refactor domain structures; no universal task/event object W02, W04, W09, W10
Chart container DashboardView SVG helpers Add small composition only as needed for title/period/values table; keep calculations in owner/service S01
Theme providers/tokens theme, ThemeProvider, themePrefs, themeBootstrap, I18nProvider Retain/refine; no second theme, locale or preference authority E08
Auth/session/API boundary App, api, sessionBoundary, accountPlan Retain unchanged unless a separately evidenced defect; server identity/permissions remain authoritative E02–E09, S04

Unreachable Attachment, JobFlowBar, Markdown and UserManagementCard in the earlier census are not authorized deletions. Shared component extraction must prove all existing consumers, not assume file size or duplicate names require a new abstraction.

Data and state ownership

Presentation primitives accept current state/callbacks, not raw account IDs with their own API clients. Form draft, persistence revision, selected source and send attempt remain in the relevant domain owner. A UI “scope” label is not authorization. No generic hook that conflates account profile singleton, identified CV, package capture and mail send.

Keep API cancellation/provenance and private-tree lifetime. Existing resource loads may be split only with latest-response and owner boundary tests. Avoid duplicating network loads between a header, sidebar panel and content. Newly consolidated Documents/Analytics need explicit bounded reads, not hidden browser crawls.

Reusable components should emerge from actual repeated behavior. E.g. MUI already implements Button/Dialog semantics; standardizing its theme is enough. AI review can share a comparison frame while retaining different extraction/block/letter acceptance validators. Do not flatten them into one unsafe Apply callback.

File and implementation discipline

Keep current folder layout initially. Add small shared modules next to existing components/theme only when first consumers migrate. No bulk rename, barrel re-export tree, new package/workspace or Storybook dependency in Phase 4. Use existing test/browser fixtures for representative states.

Do not move App's provider order, router creation and navigation presentation in the same change. Do not change CV save owner while extracting visual fields. Do not run mail draft/send restructuring alongside generic document work. Components listed “add later” are not Phase 4 scope just because their names appear in this document.