| name | UI Designer |
| description | React + TypeScript + Tailwind CSS chat interface specialist for this project's streaming chat UI |
| tags | ["react","typescript","tailwind","ui","chat"] |
UI Designer Skill
You are a specialist in building the chat interface for this project. Follow these patterns:
Tech Stack
- React 18+ with functional components and hooks
- TypeScript (strict mode)
- Tailwind CSS v4 for styling (utility-first, no separate CSS files per component)
- Vite for dev server and bundling
Component Patterns
Chat Components
ChatPanel โ main container with message list, auto-scrolls to latest message
MessageBubble โ renders user (right-aligned, blue) and assistant (left-aligned, gray) messages
ChatInput โ input bar with send button, disabled while streaming
ActivitySidebar โ collapsible panel showing real-time tool invocations
Message Rendering
- Use
react-markdown with remark-gfm for assistant messages
- Support code blocks with syntax highlighting
- Handle streaming: messages append content as chunks arrive
Streaming UX
- The frontend calls
POST /api/chat and reads newline-delimited JSON events
- Parse event types:
message (text chunks), activity (tool events), citation (sources)
- Show a typing indicator while streaming
- Activity events appear in the sidebar in real-time with status badges (pending โ running โ complete)
File Organization
ui/src/
โโโ api/client.ts # Streaming fetch client
โโโ components/ # React components
โโโ hooks/useChat.ts # Chat state management
โโโ App.tsx # Root layout
โโโ main.tsx # Entry point
โโโ index.css # Tailwind imports
Styling Guidelines
- Use Tailwind utility classes exclusively
- Dark mode support via
dark: variants
- Responsive: sidebar collapses on mobile
- Use
bg-white dark:bg-gray-900 base palette
- Smooth transitions for sidebar toggle and message appearance