Skip to content

feat(dashboard): console shell with sidebar, mobile menu sheet and roster - #867

Open
kmonsoe wants to merge 1 commit into
feat/agent-runtime-draft-rationalefrom
feat/console-shell
Open

feat(dashboard): console shell with sidebar, mobile menu sheet and roster#867
kmonsoe wants to merge 1 commit into
feat/agent-runtime-draft-rationalefrom
feat/console-shell

Conversation

@kmonsoe

@kmonsoe kmonsoe commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Stacked on #866 (→ #865). Third slice of the Oversight console: the sidebar shell replaces the topbar dashboard chrome on all /dashboard/* routes, per the design's console frame.

What's here

  • shells/console-shell.tsx — desktop: 280px bone sidebar (border-r border-ink) with logo + org switcher (drives /v1/me/memberships, pick → setActiveOrgId + reload, reuses the existing dashboard.orgSwitcher keys), role-gated nav groups with cobalt left-bar active state and live count badges, and the "On duty now" foot card fed by GET /v1/orgs/me/roster (feat(conv): review-queue read model, internal notes, draft reject stamps #865) with per-member claim loads (viewer highlighted cobalt).
  • Badges/v1/inbox aggregate: waiting = crm+outreach+cms+feedback buckets (Overview), queue = live conversations, learning = kb candidates; refreshed over the org realtime channel with the same event-prefix filter inbox-data uses.
  • Mobile (per the mobile mockups) — no tab bar: 56px header (logo · org · current-screen label · ☰) opening a full-screen menu sheet (52px rows, role-gated, count badges) with an avatar + sign-out foot.
  • nav/console-groups.ts (+tests) — mirrors settings-groups: consoleGroupsForRole (agents lose adminOnly items), extendConsoleGroups for the cloud app, isConsoleItemActive (exact match for /dashboard so Overview doesn't swallow every route). Ships with Admin/Overview + Workspace/Settings; the Conversations / Automation / Learning entries land with their destination PRs, exactly like the previous stack did.
  • DashboardShell keeps its public props (brand, logoSrc, leftSlot→sidebar head slot, withConfirmDialog) so apps/web and the cloud web need no changes; settings routes keep their own chrome branch.
  • i18n: nav.automation/nav.learning + dashboard.console.* in en and nb (nb transcreated: Oversight group → "Drift", "På vakt nå", "har {count}").

Tests

dashboard-pages: 92 passed (new: role filtering, exact-root active matching, group splicing). Typecheck clean for dashboard-pages and apps/web. Full visual walkthrough (desktop + 390px) happens once the queue destination and overview rework land on this stack.

🤖 Generated with Claude Code

https://claude.ai/code/session_01CPwvC1MqF1uhpNqC8BmvQN

…ster

DashboardShell delegates to a new ConsoleShell: 280px bone sidebar with
org switcher, role-gated nav groups with /v1/inbox badges, and an
On-duty-now roster card; phones get a 56px header with a full-screen
menu sheet and sign-out foot. Settings routes keep their own chrome.
console-groups.ts mirrors the settings-groups nav-data pattern.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CPwvC1MqF1uhpNqC8BmvQN
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant