A beautiful, production-ready collaborative whiteboard application with real-time drawing synchronization.
🚀 Live Demo: https://infinite-whiteboard.vercel.app/
- Real-time Collaboration: Draw with multiple users simultaneously
- Room-based Sessions: Create or join rooms with unique IDs
- Beautiful UI: Living watercolor animations and glassmorphism design
- GSAP Animations: Smooth animated underlines on navigation
- Color Palette: 8 vibrant colors to choose from
- Clear Board: Reset the canvas for all users in the room
- React 18 with Vite
- Tailwind CSS v4
- GSAP for animations
- Socket.io-client for real-time communication
- Lucide React for icons
- Node.js with Express
- Socket.io for WebSocket connections
- CORS enabled for development
- Install all dependencies:
npm run install:allStart both the server and client concurrently:
npm run devThe application will be available at:
- Frontend: http://localhost:5173
- Backend: http://localhost:3001
- Create a Room: Click "Create Room" to start a new session
- Join a Room: Click "Join Room" and enter a room ID
- Draw: Use your mouse to draw on the canvas
- Change Colors: Click any color in the toolbar
- Clear Board: Click the clear button to reset the canvas
- Leave Room: Click leave to return to the lobby
liveboard/
├── server/ # Backend server
│ ├── index.js # Express + Socket.io server
│ └── package.json # Server dependencies
├── client/ # Frontend application
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── App.jsx # Main application
│ │ ├── main.jsx # Entry point
│ │ └── index.css # Styles with animations
│ ├── vite.config.js # Vite configuration with proxy
│ └── package.json # Client dependencies
└── package.json # Root package with concurrently
This project is optimized for Replit with:
- Vite proxy configuration for WebSocket connections
- Proper CORS settings
- Host configuration for external access
- Monorepo structure with separate client/server
- Colors: Edit the
colorsarray inApp.jsx - Animations: Modify keyframes in
index.css - Drawing Settings: Adjust line width and style in canvas initialization