Skip to content

Add production frontend with initial view#753

Open
backnotprop wants to merge 4 commits into
feat/websocket-event-hubfrom
feat/frontend-initial-view
Open

Add production frontend with initial view#753
backnotprop wants to merge 4 commits into
feat/websocket-event-hubfrom
feat/frontend-initial-view

Conversation

@backnotprop
Copy link
Copy Markdown
Owner

Summary

Layer 5 in the daemon stack. Adds the production frontend app (apps/frontend/) with the initial landing view — project selector, quick actions (Code Review, Browse Archive), and active sessions list.

  • Daemon: Project registry persisted to ~/.plannotator/projects.json, auto-registers from session cwd, GET/POST/DELETE /daemon/projects endpoints, cwd on session summaries
  • Frontend: TanStack Router, Zustand+Immer, Tailwind v4 with Neutral theme (oklch), shadcn sidebar (offcanvas), sonner toasts, oxlint/oxfmt/vitest tooling
  • Landing page: Project selector table → Launch actions → Active sessions list, all vertically centered in the prototype's shell pattern (bg-mutedrounded-xl bg-card shadow → centered content)
  • Dev tooling: bun run dev:frontend starts daemon + Vite with auto-proxy from ~/.plannotator/daemon.json

Stack

Layer PR Branch
L1 #733 feat/single-server-runtime
L2 #734 feat/plannotator-daemon-runtime
L3 #738 feat/runtime-frontend-shell
L4 #744 feat/websocket-event-hub
L5 this feat/frontend-initial-view

Test plan

  • bun run dev:frontend starts daemon + frontend, proxy connects
  • Landing page shows empty state when no projects registered
  • Add project dialog registers a project via daemon API
  • Project table renders, selection highlights row
  • Code Review / Browse Archive disabled until project selected
  • Active sessions appear when daemon has sessions
  • Sidebar opens/closes with Cmd+B, sessions grouped by mode
  • bun run --cwd apps/frontend check passes (typecheck, oxlint, oxfmt, vitest)
  • bun test packages/server/daemon/project-registry.test.ts passes (9 tests)
  • bun run --cwd apps/frontend build produces single-file HTML

Daemon:
- Project registry persisted to ~/.plannotator/projects.json
- Auto-registers projects from session cwd on creation
- GET/POST/DELETE /daemon/projects endpoints
- cwd exposed on DaemonSessionSummary
- project-registry feature flag + 9 unit tests

Frontend (apps/frontend/):
- TanStack Router, Zustand+Immer, Tailwind v4, oxlint/oxfmt
- Daemon API client with project + session creation methods
- WebSocket hub client with event stream + polling fallback
- Landing page: project selector table + Code Review/Archive actions
- Offcanvas sidebar: sessions grouped by mode (matching prototype)
- Add project dialog
- DiffKit theme + prototype shell pattern (bg-muted → card → content)
- 13 shadcn primitives vendored in components/ui/
- Single-file HTML build (viteSingleFile)
- Dev script: daemon + Vite with auto-proxy (scripts/dev-frontend.ts)
badge, card, dialog, dropdown-menu, label — not imported by any app code.
use-project-actions, use-sessions-by-project — orphaned after sidebar
and landing page rewrites.
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