feat(dashboard): merge Analytics into Dashboard, remove Kanban Board

Closes issue #5 (Dashboard | Update menu & page):
- Analytics content (heatmap, sparkline, token/cost/workflow/productivity
  charts) moves into a new "Analytics" tab on the Dashboard page, alongside
  the existing Monitor/Health tabs. The standalone Analytics page, its
  /analytics route, and its sidebar menu entry are removed.
- The Kanban Board page, its /kanban route, and its sidebar menu entry are
  removed entirely (page content deleted, not just hidden).
- Updated ARCHITECTURE.md, README.md, client/README.md, docs/API.md, and
  the affected client tests/snapshots to match.
This commit is contained in:
2026-08-25 11:45:39 +07:00
parent 8c026d4cc7
commit 8ce20e8163
13 changed files with 1445 additions and 4564 deletions
+7 -17
View File
@@ -67,12 +67,10 @@ graph TB
Layout[Layout Component]
subgraph "Pages"
Home[Dashboard]
Kanban[KanbanBoard]
Home[Dashboard<br/>Monitor / Analytics / Health tabs]
Sessions[Sessions]
Detail[SessionDetail]
Feed[ActivityFeed]
Analytics[Analytics]
Workflows[Workflows]
Settings[Settings]
end
@@ -100,7 +98,7 @@ graph TB
end
Router --> Layout
Layout --> Home & Kanban & Sessions & Detail & Feed & Analytics & Workflows & Settings
Layout --> Home & Sessions & Detail & Feed & Workflows & Settings
Home & Detail --> AgentCard & StatCard & StatusBadge
Feed --> EventDetail
API --> REST
@@ -183,12 +181,10 @@ client/
│ │ └── workflows/ # D3.js workflow visualization components (12 files)
│ │
│ ├── pages/ # Route pages
│ │ ├── Dashboard.tsx
│ │ ├── KanbanBoard.tsx
│ │ ├── Dashboard.tsx # Monitor / Analytics / Health tabs
│ │ ├── Sessions.tsx # Filterable table; shows each session's real name (synced live from the transcript), falls back to the short ID
│ │ ├── SessionDetail.tsx # Agent tree + event timeline + Conversation tab (slash-command pills & output, inline rename markers)
│ │ ├── ActivityFeed.tsx # Real-time event log; row click expands payload; Session btn navigates
│ │ ├── Analytics.tsx
│ │ ├── Workflows.tsx
│ │ ├── Settings.tsx
│ │ └── NotFound.tsx
@@ -230,17 +226,15 @@ graph TB
App[App.tsx<br/>Router + WS + Notifications]
Layout[Layout.tsx<br/>Sidebar + Outlet]
Dashboard[Dashboard<br/>Monitor tab: stats + agents + events<br/>Health tab: SystemHealthTab]
Kanban[KanbanBoard<br/>4-column agent board]
Dashboard[Dashboard<br/>Monitor tab: stats + agents + events<br/>Analytics tab: tokens + heatmap + trends<br/>Health tab: SystemHealthTab]
Sessions[Sessions<br/>filterable table]
Detail[SessionDetail<br/>agent hierarchy + timeline]
Feed[ActivityFeed<br/>streaming event log]
Analytics[Analytics<br/>tokens + heatmap + trends]
Workflows[Workflows<br/>D3.js visualizations]
Settings[Settings<br/>pricing + notifications + hooks]
App --> Layout
Layout --> Dashboard & Kanban & Sessions & Detail & Feed & Analytics & Workflows & Settings
Layout --> Dashboard & Sessions & Detail & Feed & Workflows & Settings
Dashboard --> StatCard[StatCard × 6]
Dashboard --> AgentCard[AgentCard × N]
@@ -450,18 +444,16 @@ useEffect(() => {
graph TB
Root["/"]
Dashboard["/ (Dashboard)"]
Kanban["/kanban"]
Sessions["/sessions"]
Detail["/sessions/:id"]
Feed["/activity"]
Analytics["/analytics"]
Workflows["/workflows"]
CcConfig["/cc-config"]
Run["/run"]
Settings["/settings"]
NF["/* (NotFound)"]
Root --> Dashboard & Kanban & Sessions & Detail & Feed & Analytics & Workflows & CcConfig & Run & Settings & NF
Root --> Dashboard & Sessions & Detail & Feed & Workflows & CcConfig & Run & Settings & NF
style Dashboard fill:#3B82F6
style Detail fill:#3B82F6
@@ -480,11 +472,9 @@ function App() {
<Routes>
<Route path="/" element={<Layout />}>
<Route index element={<Dashboard />} />
<Route path="kanban" element={<KanbanBoard />} />
<Route path="sessions" element={<Sessions />} />
<Route path="sessions/:id" element={<SessionDetail />} />
<Route path="activity" element={<ActivityFeed />} />
<Route path="analytics" element={<Analytics />} />
<Route path="workflows" element={<Workflows />} />
<Route path="cc-config" element={<CcConfig />} />
<Route path="run" element={<Run />} />
@@ -883,7 +873,7 @@ test('renders session title and cost', () => {
### Snapshot Testing
`pages/__tests__/screens.snapshot.test.tsx` renders **every routed screen**
(Dashboard, Kanban, Sessions, Session detail, Activity feed, Analytics,
(Dashboard, Sessions, Session detail, Activity feed,
Workflows, Claude Config, Run, Settings, Not found) and asserts each against a
committed snapshot in `pages/__tests__/__snapshots__/`. These are structural
regression guards — they catch unintended changes to layout, markup, or