5.9 KiB
Nexus authenticated UI contract
/dashboard is the visual authority for authenticated Nexus surfaces. This
contract keeps the remaining routes aligned without coupling presentation to
stores, services, API contracts, route behavior, or domain state.
Sources of truth
frontend/src/assets/nexus-tokens.cssis the only source for Nexus color, surface, typography, radius, focus, status, and page-geometry tokens.frontend/src/assets/nexus-components.cssis the shared presentation layer for the authenticated legacy shell and route families.components/layout/AppSidebar.vueis the single authenticated navigation component. Bothfrontend/src/App.vueandfrontend/src/layouts/NexusLayout.vuerender it.frontend/src/App.vuewithcomponents/layout/AppHeader.vueandfrontend/src/layouts/NexusLayout.vuewithcomponents/layout/Topbar.vueown the two content shells around that shared navigation./dashboardand/loginretain their standalone content implementations; the dashboard no longer owns a separate sidebar implementation.
Do not add raw color values to migrated views. Add or reuse a semantic token in
nexus-tokens.css, then consume that token from the component or shared layer.
Legacy variables must resolve to V2 tokens rather than introduce a second
palette.
Visual foundation
| Concern | Contract |
|---|---|
| Background | Galaxy background over --space-0 for authenticated routes |
| Sidebar | 248px desktop; overlay navigation at 900px and below |
| Topbar | 62px, glass surface, persistent above route content |
| Body type | Manrope, 12px minimum for interface copy |
| Page title | Space Grotesk, 24px / 30px, weight 700 |
| Metadata | JetBrains Mono, 11px minimum |
| Page inset | 20px desktop, 14px mobile |
| Panel | --glass, --line, 14px radius, controlled blur |
| Standard page | 1180px maximum |
| Workspace | 1440px maximum |
| Reading/form surface | 880px maximum |
| Focus | Visible :focus-visible outline using --a-blue and --focus-ring |
Blue-to-violet gradients and glows are reserved for active navigation, primary actions, and meaningful operational states. Neutral cards, inputs, metadata, empty states, and destructive confirmation surfaces use plain glass and semantic status colors.
Navigation contract
- Every authenticated sidebar presents the categories
Operations,Knowledge,Infrastructure, andGovernancein that order. - Render
components/layout/AppSidebar.vue; do not introduce another authenticated sidebar component or duplicate its navigation data. - Settings remains a persistent footer destination below the scrollable category list on every authenticated route.
- Use semantic RouterLinks for registered destinations and
aria-currentfor the active item. Agent, Project, and Task details activate their parent navigation destination. - Keep counts, labels, permissions, registered route targets, and logout
behavior owned by
AppSidebarand its existing stores/props.
Shared presentation vocabulary
- Use
.nexus-pagefor standard route roots. - Add
.nexus-page--workspaceonly for horizontally or spatially dense work surfaces such as Task Board and Chat. - Add
.nexus-page--readingfor detail, form, and notification surfaces. - Use
.nexus-page-headerfor route identity and local actions. - Use
.glass-panelor the route-family rules innexus-components.cssfor panels. - Keep loading, empty, error, warning, and success feedback inside the route frame. Existing copy and state guards remain authoritative.
- Use Lucide icons already present in the project. Do not use emoji, text glyphs, handcrafted SVGs, or icon-like CSS drawings.
Dashboard orchestration contract
- Live-Orchestrierung is the primary dashboard surface and owns the remaining
workspace after the
62pxtopbar. - Iris Chat is closed by default. Open it only through the topbar
Iris Chataction and render it as a modal dialog; do not restore a persistent rail. - Preserve the existing chat store, polling lifecycle, messages, send handler, error state, and thinking state when changing presentation.
- Keep operational status in one compact row and prioritize active, planning, and blocker signals on narrow layouts.
- Keep focus tasks in one compact row. Priority, state, title, and owner must remain visible or programmatically available.
- At
680pxand below, agent nodes use the compact card variant. Auto-layout must not overlap or clip nodes at the supported breakpoints. - Modal close by pointer and Escape must restore focus to the connected Iris trigger.
Responsive and accessibility rules
- At
900pxand below, the sidebar becomes a keyboard-operable overlay and the topbar exposes the navigation toggle. - At
1024pxand below, multi-column detail and settings layouts collapse presentationally without changing source order. - At
767pxand below, headers and action rows stack and the page inset becomes14px. - The document must never overflow horizontally at
375,768,1024,1440, or1920px. - Internal horizontal scrolling is allowed only for a domain-horizontal work surface, currently the Task Board columns.
- Every icon-only control needs an accessible name. Interactive cards must use link/button semantics and offer Enter/Space keyboard equivalence as appropriate.
- Preserve existing
v-model, handlers, emits, navigation destinations, permissions, and state transitions.
Route-family mapping
| Family | Routes |
|---|---|
| List/detail | Memory, Docs, Incidents, Calendar, Security |
| Grid/overview | Agents, Projects, Models, Activity, Notifications |
| Detail/form | Agent Detail, Project Detail, Task Detail, Settings |
| Workspace | Task Board, Chat |
When adding a route, choose the closest family, apply the shared root class, verify loading/empty/error states, and test the registered destination at all required breakpoints before adding navigation.