A real-time collaborative whiteboard platform for teams, classrooms, and creative minds.
Let's Collab is a real-time collaborative whiteboard platform where users can create, organize, and share multiple whiteboards. Each board supports live drawing, sticky notes, shapes, text, and media β all synced instantly for every collaborator.
Perfect for remote teams, classrooms, designers, and anyone who needs a shared visual workspace.
- Email/password and OAuth (Google) authentication
- JWT-based secure sessions with HTTP-only cookies
- Inline profile editing (name, username, email)
- Create unlimited whiteboards
- Rename, delete, and organize boards
- Dashboard with board previews and thumbnails
- Search and sort (by name, created date, last updated)
- Live sync across all collaborators using Socket.IO
- Permission levels: Viewer, Editor, Owner
- Invite collaborators by username or email with role selection
- Live cursors showing collaborator positions and names
- Presence indicators for active users
- Full-featured drawing powered by Excalidraw
- Shapes, lines, arrows, text, and sticky notes
- Color picker with custom palettes
- Undo/redo support
- Zoom and pan controls
- Export to PNG and SVG (via Excalidraw's built-in export)
- Auto-save on every Excalidraw change event
- Real-time synchronization via WebSockets
- Persistent storage with PostgreSQL via Prisma ORM
- Optional Redis caching for faster board and user lookups
- React (v19) with Vite β Fast, modern development
- Excalidraw β Professional whiteboard canvas
- Zustand β Lightweight state management
- TailwindCSS β Utility-first styling
- Socket.IO Client β Real-time communication
- react-hot-toast β Notifications
- Node.js with Express.js (v5) β RESTful API
- PostgreSQL with Prisma ORM β Type-safe database access
- Socket.IO β WebSocket-based real-time sync
- Passport.js β Google OAuth 2.0 strategy
- JWT β Secure token-based auth
- Redis (optional) β In-memory caching for faster API responses
- Vercel β Frontend hosting
- Render β Backend and database hosting
Get up and running in 5 minutes:
# Clone the repository
git clone https://github.com/IronwallxR5/Let-s_Collab.git
cd Let-s_Collab
# Install dependencies
cd backend && npm install
cd ../frontend && npm install
# Set up environment variables (see SETUP.md)
cp backend/.env.example backend/.env
cp frontend/.env.example frontend/.env
# Run database migrations
cd backend
npx prisma migrate dev
# Start the application
# Terminal 1 - Backend
cd backend && npm run dev
# Terminal 2 - Frontend
cd frontend && npm run devFor detailed setup instructions, see SETUP.md
Manage all your whiteboards in one place with an intuitive interface.
Collaborate in real-time with a full suite of drawing tools.
See live cursors and invite team members with different permission levels.
Let-s_Collab/
βββ backend/ # Node.js + Express API
β βββ config/ # Passport, Redis, and server configuration
β βββ controllers/ # Route handlers (auth, boards, collaborators, invites, socket, users)
β βββ middleware/ # Auth, cache, and validation middleware
β βββ prisma/ # Database schema & migrations (PostgreSQL)
β βββ routes/ # API route definitions
β βββ utils/ # Shared helper utilities
βββ frontend/ # React + Vite app
β βββ src/
β β βββ components/ # Reusable UI components (ShareScreen, InviteBox, ProfileDropdown, etc.)
β β βββ constants/ # App-wide constants (routes, roles, storage keys)
β β βββ contexts/ # Theme context
β β βββ hooks/ # Custom React hooks
β β βββ lib/ # Utility functions (cn, date formatting, etc.)
β β βββ pages/ # Route pages (Home, Login, Dashboard, Whiteboard, AuthCallback)
β β βββ services/ # API service layer (whiteboardService, inviteService)
β β βββ store/ # Zustand state (authStore)
β βββ public/ # Static assets
βββ SETUP.md # Setup instructions
βββ CONTRIBUTING.md # Contribution guidelines
βββ README.md # This file
The app uses PostgreSQL managed via Prisma ORM. Key models:
- User β Authentication, profile, Google OAuth linking
- Board β Whiteboard title, thumbnail, Excalidraw elements (JSON), owner
- BoardCollaborator β M:M join table with role (
VIEWER|EDITOR) - Invite β Pending/accepted/declined invitations linked to boards
Run migrations with:
cd backend
npx prisma migrate dev # development
npx prisma migrate deploy # production| Resource | Endpoint | Description |
|---|---|---|
| Auth | POST /auth/register |
Register with email/password |
| Auth | POST /auth/login |
Login and receive JWT cookie |
| Auth | GET /auth/google |
Initiate Google OAuth flow |
| Users | GET /users/me |
Get current authenticated user |
| Users | PATCH /users/me |
Update profile (name, username, email) |
| Boards | GET /boards |
List all boards for a user |
| Boards | POST /boards |
Create a new board |
| Boards | GET /boards/:id |
Get a single board |
| Boards | PATCH /boards/:id |
Update board (title, thumbnail, elements) |
| Boards | DELETE /boards/:id |
Delete a board (owner only) |
| Collaborators | GET /collaborators/board/:boardId |
List collaborators |
| Collaborators | POST /collaborators/board/:boardId |
Add collaborator by email |
| Collaborators | DELETE /collaborators/:collaboratorId |
Remove collaborator |
| Collaborators | PATCH /collaborators/:collaboratorId |
Update collaborator role |
| Invites | POST /invites/board/:boardId |
Send invite (by email or username) |
| Invites | GET /invites/pending |
Get pending invites for current user |
| Invites | PATCH /invites/:id/accept |
Accept an invite |
| Invites | PATCH /invites/:id/decline |
Decline an invite |
| Invites | DELETE /invites/:id |
Cancel an invite (owner only) |
We love contributions! Whether it's bug reports, feature requests, or code contributions, we welcome them all.
See CONTRIBUTING.md for detailed guidelines.
Quick contribution steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License.
- Excalidraw - Amazing whiteboard library
- Socket.IO - Real-time engine
- Prisma - Next-generation ORM
- All our contributors
Made with β€οΈ by the Let's Collab Team
β Star us on GitHub β it helps!
Website β’ Report Bug β’ Request Feature