Continuation of the T10 test report fixes (45d0810). The prior workers
for these bugs wrote the code but died before committing. This commit
captures their work and additionally restores a GET /:id/permissions
route that the prior helper-script accidentally deleted.
- Bug #4 HIGH: GET /api/agents/_all/activity now skips the WHERE clause
when the SPA passes '_all' as the id.
- Bug #5 MED: Settings > Appearance tab now reads/writes useThemeStore
(Zustand) so theme changes are consistent with the command palette.
- Bug #6 HIGH: /projects/:id detail page now exists. Plus 4 sibling
detail pages (tasks/:id, habits/:id, notes/:id, canvas/:id) wired
into the route tree.
- Bug #8 MED: GET /api/agents/activity (bare path) now returns the
last 100 activity items instead of falling into /:id/activity with
id='activity' (which failed the UUID cast).
- Bug #10 LOW: tasks/:id, habits/:id, notes/:id, canvas/:id detail
pages are now committed (the worker that wrote them never committed).
- graph.tsx and index.tsx overlap with earlier committed fixes
(t_cc5d9887 and t_296f0121); changes are additive and don't regress.
Also restores GET /api/agents/:id/permissions which the prior helper
script accidentally removed when reformatting agents.ts.
Parent: t_e1cbd87d
Project E — Web SPA
The frontend SPA for Project E, built with React 19, TanStack Router, and Vite.
Architecture
apps/web/
├── src/
│ ├── components/
│ │ ├── shell/ # App shell: Sidebar, Topbar, CommandPalette, ShortcutsHelp, ThemeProvider
│ │ ├── ui/ # shadcn/ui primitives (button, dialog, input, etc.)
│ │ └── entities/ # Entity-specific components (detail panels, forms)
│ ├── hooks/ # Custom hooks (use-keyboard-shortcuts, use-realtime)
│ ├── lib/
│ │ ├── api.ts # Typed API client + React Query hooks
│ │ ├── stores/ # Zustand stores (theme, sidebar, keyboard-shortcuts, create-dialog)
│ │ ├── types/ # Shared TypeScript types
│ │ └── utils.ts # cn() utility
│ ├── routes/ # TanStack Router file-based routes
│ │ ├── __root.tsx # Root layout
│ │ ├── _app.tsx # Authenticated app layout (sidebar + topbar + palette)
│ │ ├── login.tsx # Login page
│ │ └── _app/ # All app pages
│ ├── main.tsx # Entry point
│ ├── routeTree.ts # Auto-generated route tree
│ └── index.css # Tailwind + CSS variables
└── dist/ # Production build output
Pages (14 routes)
| Route | Page | Description |
|---|---|---|
/ |
Dashboard | Configurable widget grid (8 widget types) |
/tasks |
Tasks | Full CRUD with filters, sort, kanban view |
/habits |
Habits | Track habits with streaks, completions |
/projects |
Projects | Project management with sections |
/notes |
Notes | Rich text notes with backlinks |
/calendar |
Calendar | react-big-calendar with DnD, date-fns localizer |
/graph |
Graph | react-force-graph-2d with custom renderers |
/search |
Search | Full-text search across entities |
/analytics |
Analytics | 6 chart types (recharts) |
/agents/activity |
Agent Activity | SSE live activity feed |
/canvas |
Canvas | Block-based editor |
/daily |
Daily Notes | Journal with calendar sidebar |
/settings |
Settings | 9 tabs (profile, domains, agents, webhooks, etc.) |
/login |
Login | Authentication |
OSS Components
- Calendar:
react-big-calendarv1.20 withwithDragAndDropHOC, date-fns localizer, custom event renderer with color tokens, custom toolbar, responsive (agenda on mobile) - Graph:
react-force-graph-2dv1.29 with custom node/link canvas renderers, hover highlighting, search-to-fly, filter panel (entity + relationship types), ResizeObserver, 500-node cap - Command Palette:
cmdkv1.1 with recent items, @mention agent search, theme/settings actions, mobile full-screen - Shortcuts:
@github/hotkeyv3.1 for global keyboard shortcuts (g+letter nav, n+letter create, ?, /, c)
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
⌘K / Ctrl+K |
Open command palette |
g then d |
Go to Dashboard |
g then t |
Go to Tasks |
g then h |
Go to Habits |
g then p |
Go to Projects |
g then n |
Go to Notes |
g then c |
Go to Calendar |
g then g |
Go to Graph |
g then s |
Go to Settings |
n then t |
New task |
n then h |
New habit |
n then p |
New project |
n then n |
New note |
c |
Focus create in palette |
/ |
Focus search |
? |
Show shortcuts help |
Development
# Install dependencies
bun install
# Start dev server (port 3000)
bun run dev
# Production build
bun run build
# Preview production build
bun run preview
# Type check
bun run typecheck
API
All API calls go through /api/* and are proxied to the Hono backend. The API client in src/lib/api.ts provides typed get/post/put/patch/delete methods plus React Query hooks (useApiQuery, useApiMutation).
Bundle Size
- Total JS: ~1.2 MB (369 KB gzipped)
- CSS: ~53 KB (10 KB gzipped)
- Budget: < 1.5 MB gzipped