4.5 KiB
Authenticated dashboard design migration audit
Outcome
The dashboard V2 language now covers all 16 other authenticated routes through a shared token source, presentation layer, and aligned legacy shell. Dashboard and Login remain visually unchanged. No product behavior, backend contract, route registration, store/service/composable logic, or permission rule was modified.
Implemented layers
- Expanded
nexus-tokens.cssinto the V2 source for surfaces, text, accents, status colors, focus, typography, page geometry, and legacy aliases. - Added
nexus-components.cssfor route frames, headers, glass panels, controls, badges, modals, and state surfaces. - Aligned
App.vue,AppSidebar, andAppHeaderwith the dashboard's galaxy, 248px sidebar, 62px topbar, glass, and responsive navigation. - Applied standard, workspace, or reading-width contracts to every migrated route family.
- Replaced presentation emoji/glyph icons with existing Lucide icons and added accessible names, semantic interactive elements, keyboard equivalence, and visible focus.
- Unified both authenticated navigation shells around the four dashboard categories and added a persistent Settings destination to the dashboard footer. Shared-shell and dashboard destinations now use RouterLinks, while detail routes retain the active state of their parent section.
Evidence matrix
| Evidence | Coverage | Result |
|---|---|---|
| Fresh dashboard reference | /dashboard, 1440 × 900 |
Passed |
| Full desktop route matrix | all 18 registered routes, 1440 × 900 |
Passed |
| Full migrated mobile matrix | 16 migrated routes, 375 × 812 |
Passed |
| Representative responsive matrix | 5 route families at 768, 1024, 1920px |
Passed |
| Automated geometry | document width and route-root geometry | Passed |
| Same-viewport visual comparison | dashboard reference beside migrated Agents | Passed |
| Core interactions | filters, forms, modal, detail changes, board, chat, notifications | Passed |
| Keyboard/accessibility | names, semantics, focus, equivalent activation | Passed |
| Frontend gates | typecheck, tests, build | Passed |
Evidence is under screenshots/. The final reference is
screenshots/00-dashboard-reference-1440.png; route captures are under
screenshots/design-migration-routes/; and the combined visual comparison is
screenshots/design-qa-comparison-dashboard-vs-agents-1280.png.
Measured contracts
- Sidebar:
248pxdesktop. - Topbar:
62px. - Page title: Space Grotesk
24px / 30px, weight700. - Desktop/mobile inset:
20px / 14px. - Maximum route widths: standard
1180px, workspace1440px, reading/form880px. - No document-level horizontal overflow at the required breakpoints.
- Task Board columns retain their intentional internal horizontal scroller.
Findings resolved during QA
- The inherited 768px shell breakpoint initially hid the sidebar without
exposing the mobile navigation button. The shell now switches coherently at
900px. - Scoped Settings width rules initially overrode the shared reading-width
modifier. Higher-specificity shared contracts now enforce
880pxfor every reading/form root. - Undefined or ambiguous legacy color aliases and hard-coded route colors were replaced by V2 semantic tokens.
- Presentation emoji/glyph icons and unnamed icon controls were replaced with Lucide icons and explicit accessible names.
- The shared sidebar initially exposed one flat list and the dashboard omitted Settings. Both shells now expose the same category framework and persistent Settings access without changing routes, handlers, stores, or permissions.
- A RouterLink migration initially shadowed each dashboard item's target with the current route. The prop/current-route names are now distinct, and browser checks confirmed the real registered destinations.
Residuals
There are no P0-P2 design defects. A deliberate Task Board route leave aborts the fixture-backed live stream and logs the existing polling-fallback warning. This is outside the presentation scope and does not affect the rendered result or interaction path.
Verification
pnpm typecheck -> passed
pnpm test -> passed (1 file, 2 tests)
pnpm build -> passed (1,882 modules)
git diff --check -> passed; line-ending notices only
Navigation follow-up evidence:
navigation-groups-after-dashboard.png
navigation-groups-after-settings.png
navigation-groups-after-settings-375.png
navigation-groups-comparison-dashboard-vs-settings-1440.png