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:
+7
-17
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user