124 lines
5.9 KiB
Markdown
124 lines
5.9 KiB
Markdown
# 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.css` is the only source for Nexus color,
|
|
surface, typography, radius, focus, status, and page-geometry tokens.
|
|
- `frontend/src/assets/nexus-components.css` is the shared presentation layer
|
|
for the authenticated legacy shell and route families.
|
|
- `components/layout/AppSidebar.vue` is the single authenticated navigation
|
|
component. Both `frontend/src/App.vue` and
|
|
`frontend/src/layouts/NexusLayout.vue` render it.
|
|
- `frontend/src/App.vue` with `components/layout/AppHeader.vue` and
|
|
`frontend/src/layouts/NexusLayout.vue` with `components/layout/Topbar.vue`
|
|
own the two content shells around that shared navigation.
|
|
- `/dashboard` and `/login` retain 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`, and `Governance` in 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-current` for
|
|
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 `AppSidebar` and its existing stores/props.
|
|
|
|
## Shared presentation vocabulary
|
|
|
|
- Use `.nexus-page` for standard route roots.
|
|
- Add `.nexus-page--workspace` only for horizontally or spatially dense work
|
|
surfaces such as Task Board and Chat.
|
|
- Add `.nexus-page--reading` for detail, form, and notification surfaces.
|
|
- Use `.nexus-page-header` for route identity and local actions.
|
|
- Use `.glass-panel` or the route-family rules in `nexus-components.css` for
|
|
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 `62px` topbar.
|
|
- Iris Chat is closed by default. Open it only through the topbar `Iris Chat`
|
|
action 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 `680px` and 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 `900px` and below, the sidebar becomes a keyboard-operable overlay and the
|
|
topbar exposes the navigation toggle.
|
|
- At `1024px` and below, multi-column detail and settings layouts collapse
|
|
presentationally without changing source order.
|
|
- At `767px` and below, headers and action rows stack and the page inset becomes
|
|
`14px`.
|
|
- The document must never overflow horizontally at `375`, `768`, `1024`,
|
|
`1440`, or `1920px`.
|
|
- 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.
|