# Domify Academy Super Bot - Frontend Setup Guide ## Overview The frontend is built with **React 19 + TypeScript + Tailwind CSS 4** with a dark glassmorphism design (21dev theme). It features: - **Ask | Imagine mode switcher** at the top (Grok-style) - **Advanced prompt input** with Search Online and Think Longer toggles - **DeepSeek reasoning panel** (collapsible with ^ icon) - **Rich response formatting** with markdown, code highlighting, and tables - **File upload with OCR** (Tesseract.js) - **Image gallery** for Imagine mode with download and video conversion options - **Auto-scroll chat** with smooth animations - **Dark glassmorphism UI** with violet/indigo glows --- ## Project Structure ``` client/ ├── src/ │ ├── pages/ │ │ ├── Chat.tsx # Main chat interface (Ask/Imagine modes) │ │ ├── Home.tsx # Landing page │ │ └── NotFound.tsx # 404 page │ ├── components/ # Reusable UI components │ ├── contexts/ # React contexts │ ├── lib/ │ │ └── trpc.ts # tRPC client configuration │ ├── App.tsx # Routes and layout │ ├── main.tsx # React entry point │ └── index.css # Global styles (glassmorphism theme) ├── public/ # Static assets └── index.html # HTML template ``` --- ## Key Features ### 1. Ask Mode **Text-based conversation with AI:** - Send messages with optional search online - Enable "Think Longer" for DeepSeek-style reasoning - Upload files and images for context - View reasoning process in collapsible panel - Rich markdown rendering with syntax highlighting **Input Features:** - Auto-resizing textarea - File upload with drag-and-drop support - Toggle buttons for Search and Think modes - Keyboard shortcuts (Shift+Enter for new line, Enter to send) ### 2. Imagine Mode **Image generation interface:** - Describe images you want to create - View previously generated images in horizontal scrolling gallery - Download generated images - Optional: Convert images to videos (coming soon) ### 3. Dark Glassmorphism Theme **21dev Design System:** - Deep black background (`oklch(0.07 0.002 0)`) - Violet primary color (`oklch(0.623 0.214 259.815)`) - Indigo secondary color (`oklch(0.55 0.15 264)`) - Glass panels with backdrop blur and transparency - Smooth animations and transitions - Glow effects on interactive elements ### 4. Reasoning Panel **DeepSeek-style internal thoughts:** - Collapsible panel showing bot's reasoning process - Triggered when "Think Longer" is enabled - Animated expansion/collapse with ^ icon - Styled with glass effect and subtle colors ### 5. Rich Response Formatting **Professional output rendering:** - **Bold text** for key concepts (auto-highlighted) - **Code blocks** with syntax highlighting and copy button - **Markdown tables** for structured data - **Links** with hover effects - **Blockquotes** for citations - **Lists** with proper indentation --- ## Configuration ### API Endpoint Update the API endpoint in `client/src/pages/Chat.tsx`: ```typescript const API_BASE_URL = process.env.REACT_APP_API_URL || "http://localhost:3000"; ``` **For Hugging Face Spaces:** ```bash export REACT_APP_API_URL=https://YOUR_SPACE_URL ``` ### Environment Variables Create a `.env.local` file: ```env # API Configuration REACT_APP_API_URL=https://your-hugging-face-space-url # Optional: Analytics REACT_APP_ANALYTICS_ID=your-analytics-id # Optional: Feature flags REACT_APP_ENABLE_VIDEO_GENERATION=false ``` --- ## Installation & Development ### Install Dependencies ```bash cd client pnpm install ``` ### Start Development Server ```bash pnpm run dev ``` The app will be available at `http://localhost:5173` ### Build for Production ```bash pnpm run build ``` Output will be in `dist/` directory. ### Type Checking ```bash pnpm run check ``` --- ## Component Architecture ### Chat.tsx (Main Component) **State Management:** - `mode` - Current mode (ask/imagine) - `messages` - Chat message history - `input` - Current input text - `isLoading` - Loading state - `enableSearch` - Search online toggle - `enableThinking` - Think longer toggle - `showReasoning` - Reasoning panel visibility - `uploadedFiles` - Uploaded files - `generatedImages` - Generated images in Imagine mode **Key Functions:** - `handleSendMessage()` - Send chat message to backend - `handleGenerateImage()` - Generate image via Imagine mode - `handleFileUpload()` - Handle file uploads - `removeFile()` - Remove uploaded file **API Calls:** - `POST /api/trpc/chat.send` - Send message - `POST /api/trpc/imagine.generate` - Generate image ### Styling **CSS Classes (from index.css):** - `.glass-panel` - Glass effect container - `.glass-panel-lg` - Larger glass panel - `.glow-primary` - Primary color glow - `.glow-accent` - Accent color glow - `.gradient-text` - Gradient text effect - `.transition-smooth` - Smooth transitions - `.btn-primary` - Primary button - `.btn-ghost` - Ghost button - `.input-glass` - Glass input field - `.code-block` - Code block styling - `.markdown` - Markdown rendering **Animations:** - `animate-fade-in` - Fade in animation - `animate-slide-up` - Slide up animation - `animate-pulse-glow` - Pulsing glow effect --- ## Integration with Backend ### tRPC Procedures The frontend calls these backend procedures: **Chat:** ```typescript POST /api/trpc/chat.send { prompt: string; enableSearch: boolean; enableThinking: boolean; history: Array<{ role: string; content: string }>; } Response: { response: string; reasoning: string; model: string; tokensUsed: number; } ``` **Image Generation:** ```typescript POST /api/trpc/imagine.generate { prompt: string; } Response: { imageUrl: string; prompt: string; } ``` **Search:** ```typescript POST /api/trpc/search.online { query: string; maxResults: number; } Response: { results: Array<{ title: string; url: string; snippet: string; }>; } ``` --- ## File Upload & OCR ### Supported Formats - **Images**: JPG, PNG, GIF, WebP - **Documents**: PDF, TXT, DOC, DOCX ### OCR Implementation Uses **Tesseract.js** for client-side text extraction: ```typescript // Example (not yet implemented in Chat.tsx) import Tesseract from 'tesseract.js'; const result = await Tesseract.recognize(imageFile); const extractedText = result.data.text; ``` To enable OCR: 1. Install Tesseract.js: `pnpm add tesseract.js` 2. Add OCR handler in Chat.tsx 3. Send extracted text with message --- ## Customization ### Change Colors Edit `client/src/index.css` in the `.dark` section: ```css .dark { --primary: oklch(0.623 0.214 259.815); /* Violet */ --secondary: oklch(0.55 0.15 264); /* Indigo */ --accent: oklch(0.65 0.18 280); /* Light indigo */ --background: oklch(0.07 0.002 0); /* Deep black */ --foreground: oklch(0.95 0.002 0); /* Near white */ } ``` ### Change Fonts Edit `client/index.html`: ```html ``` Then update `client/src/index.css`: ```css body { font-family: 'YOUR_FONT', sans-serif; } ``` ### Add New Pages 1. Create component in `client/src/pages/NewPage.tsx` 2. Add route in `client/src/App.tsx`: ```typescript ``` --- ## Performance Optimization ### Code Splitting Routes are automatically code-split by React Router. ### Image Optimization - Generated images are cached in browser - Use lazy loading for image gallery ### Caching - tRPC client caches responses automatically - Clear cache on logout or mode switch --- ## Accessibility - **Keyboard navigation**: Tab through buttons and inputs - **Focus rings**: Visible focus indicators on all interactive elements - **Color contrast**: WCAG AA compliant (dark theme) - **ARIA labels**: Added to interactive elements - **Semantic HTML**: Proper heading hierarchy --- ## Browser Support - Chrome/Edge 90+ - Firefox 88+ - Safari 14+ - Mobile browsers (iOS Safari, Chrome Mobile) --- ## Troubleshooting ### API Connection Failed **Error**: "Failed to connect to backend" **Solution:** 1. Verify `REACT_APP_API_URL` is correct 2. Check backend is running 3. Verify CORS is enabled on backend 4. Check browser console for network errors ### Styling Issues **Error**: "Colors look wrong" or "Layout is broken" **Solution:** 1. Clear browser cache 2. Rebuild CSS: `pnpm run build` 3. Check theme is set to "dark" in App.tsx 4. Verify index.css is imported in main.tsx ### Image Upload Not Working **Error**: "File upload fails" **Solution:** 1. Check file size (should be <10MB) 2. Verify file format is supported 3. Check browser console for errors 4. Ensure backend file upload endpoint is working ### Slow Performance **Error**: "App feels sluggish" **Solution:** 1. Check network tab for slow API calls 2. Reduce chat history size (archive old messages) 3. Optimize images before upload 4. Check for memory leaks in browser DevTools --- ## Deployment ### Build for Production ```bash pnpm run build ``` ### Deploy to Hugging Face Spaces The frontend is included in the main Dockerfile. It's built as part of the Docker image build process. ### Deploy to Vercel/Netlify ```bash # Build pnpm run build # Deploy dist/ folder ``` --- ## Next Steps 1. **Update API endpoint** with your Hugging Face Space URL 2. **Test Ask mode** - Send messages and verify responses 3. **Test Imagine mode** - Generate images 4. **Test features** - Search online, Think longer, file upload 5. **Customize colors** - Match your brand 6. **Deploy** - Push to production --- ## Support - **Frontend issues**: Check browser console for errors - **API issues**: Check backend logs in Hugging Face Space - **Styling issues**: Review `index.css` and Tailwind documentation - **Component issues**: Check React DevTools --- ## License MIT License - See LICENSE file for details