Browse documents

Information Architecture

Status: v1.0 · Owner: Design Lead + Frontend Lead · Gate input: G1, G2 Defines the navigation model, the full screen inventory, the URL map, and the drill-through graph. The route map here is the contract for the Next.js App Router structure in apps/web/app/ and must stay in sync with the per-phase API surfaces.


1. Navigation model

Atlas uses a persistent left sidebar (desktop) / bottom nav (mobile) with a global top bar. Navigation is permission-drivennav.config.ts filters items by the user's permissions (Phase_2.md §5.6), so two users never see entries they cannot use.

1.1 Primary navigation (sidebar — desktop)

Grouped by mental model, not by engineering phase:

┌─ ATLAS ──────────────────┐
│  ⌂  Home / Dashboards    │   ← landing; user + tenant dashboards
│                          │
│  OPERATE                 │
│   ▸ Work Orders          │
│   ▸ Maintenance (cal)    │
│   ▸ Approvals (inbox)    │
│   ▸ Inspections          │
│                          │
│  ASSETS & SPACE          │
│   ▸ Assets               │
│   ▸ Locations / Plans    │
│   ▸ Systems              │
│                          │
│  DATA                    │
│   ▸ Telemetry            │
│   ▸ Connectors/Gateways  │
│   ▸ Imports              │
│   ▸ Tags / Ontology      │
│                          │
│  INTELLIGENCE            │
│   ▸ AI Chat              │
│   ▸ Workflows            │
│   ▸ Reports              │
│                          │
│  ─────────────           │
│  🔍 Search   ⌘K Palette  │
├──────────────────────────┤
│  ⚙ Admin (if permitted)  │
│   Users · Roles · Keys   │
│   Audit · Settings · AI  │
└──────────────────────────┘

The sidebar is collapsible to icons-only. Group headers (OPERATE, ASSETS & SPACE, etc.) are non-clickable labels. Admin is a separate cluster, only visible with admin permissions.

1.2 Bottom navigation (mobile — Phase 8)

Five slots, optimised for the field personas:

  ⌂ Home    ✓ Tasks    📥 Inbox    🔍 Search    👤 Me

Tasks = the technician's work-order queue (J1). Inbox = approvals (J2/J4). Everything else is reachable via Search and the Me/More sheet. Desktop-only modes (TV, War Room, dashboard editor) show a "best on desktop" message on mobile.

1.3 Global top bar (all viewports)

[≡ collapse]   [Tenant ▾]            [🔍 global search ⌘K]            [🔔]  [◐ theme]  [👤 user ▾]
  • Tenant switcher — only if the user belongs to >1 tenant.
  • Global search / Command palette (⌘K) — jump to any page, search any record, run actions.
  • Notifications drawer — in-app feed + unread count.
  • Theme toggle — light / dark / brand (+ user accent/density in user menu).
  • User menu — profile, settings, sessions, sign out.

2. Information hierarchy pattern (applies to every module)

Every module follows the same List → Detail → Drawer → Edit progression so users learn the pattern once:

LIST (table or board)
  ├─ filters, saved views, search, bulk actions
  ├─ row click ──▶ DETAIL (full page)
  │                 ├─ summary header (KPIs, status, primary action)
  │                 ├─ tabs: Overview · History · Related · Documents · Telemetry
  │                 ├─ related-entity links ──▶ (drill-through to other modules)
  │                 └─ Edit ──▶ EDIT (form) or inline DRAWER edit
  └─ secondary actions ──▶ DRAWER (quick view / quick action without leaving list)

This is the progressive-disclosure principle from 00_README.md made concrete. Power is always one level deeper than the calm default.


3. Screen inventory & URL map

Routes live under the authenticated (app) route group. :id denotes a record id. Phase column = when the screen ships.

3.1 Shell & account (P2)

RouteScreenPersonaPhase
/Home / default dashboardAllP2→P5
/login, /mfa, /accept-invite, /resetAuth flowsAllP2
/settings/profileProfileAllP2
/settings/sessionsActive sessions + revokeAllP2
/settings/notificationsNotification prefsAllP4
/settings/appearanceTheme / accent / densityAllP2/P5

3.2 Admin (P2/P3/P6) — visible with admin permissions

RouteScreenPhase
/admin/usersUsers list + invite + editP2
/admin/rolesRoles + permission matrixP2
/admin/api-keysAPI keys (create/revoke, shown once)P2
/admin/auditAudit log (filterable)P2
/admin/settingsTenant settings + brandingP2
/admin/connectorsConnectors + gateways + healthP3
/admin/importsImport wizards + jobsP3
/admin/tagsTags / ontologyP3
/admin/reconciliationReconciliation reportsP3
/admin/aiAI provider, budgets, no-egressP6

3.3 Operate (P4/P7)

RouteScreenPhase
/work-ordersWO list (table ⇄ Kanban)P4
/work-orders/newCreate WOP4
/work-orders/:idWO detail (timeline, checklist, costs)P4
/work-orders/calendarMaintenance calendarP4
/maintenance-plansPlanned maintenance (RRULE)P4
/inboxApprovals inboxP7
/inspections/:idMobile inspection executionP8

3.4 Assets & space (P4)

RouteScreenPhase
/assetsAsset list + saved viewsP4
/assets/:idAsset detail (overview/telemetry/WOs/docs/history)P4
/locationsLocation hierarchyP4
/locations/:idLocation + ceiling-plan overlayP4
/systemsSystems hierarchyP4

3.5 Data (P3)

RouteScreenPhase
/telemetryTelemetry explorer (query + live)P3
/documentsDocument libraryP4

3.6 Intelligence (P5/P6/P7) & developer (P2)

RouteScreenPhase
/dashboardsDashboards list + templatesP5
/dashboards/:idDashboard viewP5
/dashboards/:id/editDashboard editor (palette/canvas/inspector)P5
/dashboards/:id/tvTV mode (chrome-free)P5
/war-roomWar Room multi-paneP5
/aiAI chat (threaded, citations)P6
/workflowsWorkflow listP7
/workflows/:id/editWorkflow designer canvasP7
/workflow-runs/:idRun timeline + replayP7
/reportsReport templates + runsP4
/searchGlobal search resultsP4
/api/docs, /api/docs/scalarDeveloper portalP2

4. Drill-through graph (the connective tissue)

The product's value is that everything links to everything. These drill paths are required, not optional:

KPI card  ──────────────▶  underlying record list (filtered)
Work Order ──────────────▶  Asset · Location · Assignee · Workflow that owns it · Documents
Asset      ──────────────▶  Telemetry (live) · Work Orders · Location on plan · Documents · History
Location   ──────────────▶  Ceiling plan → marker → Asset detail
Alert      ──────────────▶  DataPoint · Asset · AI explanation · Workflow run · resulting WO
Telemetry  ──────────────▶  DataPoint · Asset · add-to-dashboard
AI answer  ──────────────▶  cited source (document / record / help)
Workflow run ────────────▶  each node's input/output · created entities · approver
Dashboard widget value ──▶  its canonical record (the universal click-through rule)

Universal rule: any value rendered from a record is clickable to that record. No "look but can't touch" numbers.


5. Breadcrumbs, deep-linking & state

  • Breadcrumbs reflect the IA hierarchy, e.g. Assets / Chiller CH-01 / Telemetry. Every breadcrumb segment is a link.
  • Deep-linkable state: list filters, saved views, selected tab, and time ranges live in the URL query so a view can be shared/bookmarked (and embedded for dashboards).
  • Back is sacred: drawers and modals don't break the back button; closing a drawer returns to list state intact.
  • Tenant in context, not in URL: tenantId comes from session, never the path (multi-tenancy security model, Phase_1.md §5.3). Switching tenant resets navigation to that tenant's Home.

6. Empty-state IA (first-run experience)

A new tenant must never see a blank product (J3). Each top-level surface ships a designed empty state with a clear next action:

SurfaceEmpty state CTA
Home"Create your first dashboard" / start from a template
Work Orders"Create a work order" + import history
Assets"Import your asset ledger" (→ wizard)
Connectors"Connect a gateway" (→ guided connect)
Workflows"Start from a template"
AI ChatSuggested starter prompts

Empty states are first-class screens in the design system (UX_patterns.md State Matrix), not throwaway placeholders.


7. Responsive IA collapse rules

BreakpointSidebarTop barTablesDashboards
≥1280 (desktop)Full sidebarFullFull tableGrid as authored
768–1279 (tablet)Collapsed-to-iconsFullTable, fewer columnsGrid, fewer columns
<768 (mobile)Hidden → bottom navCompactCard list (no h-scroll)Vertical stack by layout.y

TV and War Room are explicitly desktop/kiosk only and surface a friendly redirect on mobile (Phase_8.md §6.3).