[Phase 3] Frontend: React 19 + Tailwind v4 + Split-screen UI #5
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Implement the frontend web UI.
Acceptance Criteria
frontend/vite.config.ts— Vite + React + Tailwind v4frontend/index.html— HTML entry pointfrontend/src/main.tsx— React root renderfrontend/src/App.tsx— main app with mode toggle, theme toggle, layoutfrontend/src/components/Header.tsx— mode toggle, theme toggle, settingsfrontend/src/components/ChatPanel.tsx— main chat panel with streaming messagesfrontend/src/components/OocSidebar.tsx— OOC channel (DM mode only)frontend/src/components/InputBar.tsx— text input + sendfrontend/src/components/DiceRoller.tsx— inline dice notation parser + resultsfrontend/src/components/SettingsModal.tsx— edit config from UIfrontend/src/components/ToolCallBanner.tsx— shows active tool callsfrontend/src/hooks/useAgent.ts— agent integration + event streaming via WebSocketfrontend/src/hooks/useWebSocket.ts— WS connection to backendfrontend/src/hooks/useDiceRoller.ts— dice rolling logicfrontend/src/context/AppContext.tsx— mode, messages, theme statefrontend/src/styles/index.css— Tailwind imports + custom fantasy themeDesign Direction
Bold, fantasy-themed UI. Avoid generic AI aesthetics.
API Contract
Backend WebSocket (
ws://localhost:3000/ws) sends events:{ type: "message_update", delta: string }{ type: "tool_execution_start", toolName: string, args: object }{ type: "tool_execution_end", toolName: string, result: string }{ type: "message_complete" }Backend REST endpoints:
POST /api/search—{ query, entityType?, topK? }→{ results: SearchResult[] }POST /api/roll—{ notation }→{ roll: DiceRoll }GET /api/config→Config(sanitized)POST /api/config—{ config }→{ success: boolean }See
project.mdsections 3, 8, 12 for full spec.