WhatsApp for Developers - A revolutionary real-time chat platform with collaborative multiplayer boards, built by developers, for developers.
- Instant messaging with WebSocket-powered real-time sync
- Code syntax highlighting for sharing snippets
- Message history with infinite scroll
- Typing indicators to see who's composing
- Read receipts and unread message counts
- Rich media support (images, videos, links)
- Live collaboration - See everyone's cursor in real-time
- Drag & drop cards with text, images, and videos
- Infinite canvas with pan and zoom
- Card management - Create, move, resize, and delete
- Real-time sync across all connected users
- Persistent storage - All boards saved to database
- Google OAuth - Secure, one-click sign-in
- JWT tokens for API security
- Session management with automatic refresh
- HTTPS/WSS support for production
- Public & Private rooms - Control access
- Direct Messages - 1-on-1 conversations
- Room search - Find conversations quickly
- Member management - See who's in each room
- Invite links - Easy team onboarding
server/
βββ server.js # Main Express + Socket.io server
βββ db.js # PostgreSQL connection pool
βββ auth.js # Google OAuth & JWT handling
βββ schema.sql # Database schema
βββ .env.example # Environment variables template
client/
βββ src/
β βββ components/ # React components
β β βββ Sidebar.jsx
β β βββ ChatArea.jsx
β β βββ Board.jsx
β β βββ CreateRoomModal.jsx
β βββ pages/ # Page components
β β βββ Login.jsx
β β βββ Chat.jsx
β βββ services/ # API & Socket services
β β βββ api.js
β β βββ socket.js
β βββ store/ # Zustand state management
β β βββ index.js
β βββ App.jsx # Root component
β βββ main.jsx # Entry point
βββ .env.example # Environment variables template
- Users - Profile, auth, presence
- Rooms - Chat channels & metadata
- Messages - Chat history
- Board Cards - Collaborative board state
- Direct Messages - 1-on-1 threads
- Notifications - User alerts
- Node.js 20+
- PostgreSQL 14+
- Google OAuth credentials
git clone <your-repo-url>
cd gizmochat# Create database
createdb gizmochat
# Load schema
psql gizmochat < server/schema.sqlcd server
cp .env.example .env
nano .env # Fill in your values
npm installcd ../client
cp .env.example .env
nano .env # Fill in your values
npm install# Terminal 1 - Backend
cd server
npm run dev
# Terminal 2 - Frontend
cd client
npm run devNavigate to http://localhost:5173
See DEPLOYMENT.md for complete Linode deployment instructions.
Quick summary:
- Setup Linode server (Ubuntu 24.04, 2GB RAM minimum)
- Install dependencies (Node.js, PostgreSQL, Nginx)
- Configure database and load schema
- Deploy backend with PM2
- Build & serve frontend with Nginx
- Setup SSL with Let's Encrypt
- Configure firewall and monitoring
PORT=3001
NODE_ENV=production
DB_HOST=localhost
DB_PORT=5432
DB_NAME=gizmochat
DB_USER=gizmochat_user
DB_PASSWORD=your_password
JWT_SECRET=your_secret
GOOGLE_CLIENT_ID=your_client_id
GOOGLE_CLIENT_SECRET=your_client_secret
CLIENT_URL=http://localhost:5173VITE_API_URL=http://localhost:3001/api
VITE_SERVER_URL=http://localhost:3001
VITE_GOOGLE_CLIENT_ID=your_client_idPOST /api/auth/google- Login with Google tokenGET /api/users/me- Get current user profile
GET /api/rooms- Get user's roomsPOST /api/rooms- Create new roomGET /api/rooms/:id/messages- Get room messages
GET /api/users/search?q=query- Search users
POST /api/dm/create- Create/get DM thread
message:send- Send chat messagemessage:typing- Update typing statusboard:card:create- Create board cardboard:card:move- Move card positionboard:card:resize- Resize cardboard:card:delete- Delete cardboard:cursor- Update cursor positionroom:join- Join a roomroom:leave- Leave a room
message:new- New message receiveduser:typing- User typing statususer:presence- User online/offlineuser:joined- User joined roomuser:left- User left roomboard:card:created- Card createdboard:card:moved- Card movedboard:card:resized- Card resizedboard:card:deleted- Card deletedboard:cursor:update- Cursor position updateboard:state- Full board state
Edit client/tailwind.config.js:
colors: {
accent: {
DEFAULT: '#your-color',
hover: '#your-hover-color',
},
}- Edit
server/schema.sql - Create migration script
- Run:
psql gizmochat < your-migration.sql
- Backend: Add socket event handlers in
server/server.js - Frontend: Create components in
client/src/components/ - State: Add stores in
client/src/store/index.js
- Node.js - JavaScript runtime
- Express - Web framework
- Socket.io - Real-time communication
- PostgreSQL - Relational database
- JWT - Authentication tokens
- Google OAuth - User authentication
- React 18 - UI framework
- Vite - Build tool
- Tailwind CSS - Styling
- Zustand - State management
- React Query - Data fetching
- Socket.io Client - WebSocket client
- React Router - Routing
- Lucide React - Icons
- PM2 - Process management
- Nginx - Web server & reverse proxy
- Let's Encrypt - SSL certificates
- UFW - Firewall
We welcome contributions! Here's how:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow existing code style
- Write meaningful commit messages
- Test your changes thoroughly
- Update documentation as needed
MIT License - see LICENSE file for details
- Original LiveBoard concept for inspiration
- Socket.io team for real-time magic
- React team for the amazing framework
- PostgreSQL community for rock-solid database
- Tailwind CSS for beautiful styling
Need help?
- π§ Email: gizmo.dev352@gmail.com
- π Issues: https://github.com/Harsh-2121/gizmochat/issues
- π Docs: See DEPLOYMENT.md
- File upload support
- Voice/Video calls
- End-to-end encryption
- Mobile apps (React Native)
- Desktop apps (Electron)
- AI assistant integration
- Advanced board tools (drawing, shapes)
- Screen sharing
- Threaded conversations
- Message reactions
- Custom emojis
- Dark/Light theme toggle
- Internationalization (i18n)
Built with β€οΈ by developers, for developers
Star β this repo if you find it useful!
A standalone DirectX 12 path tracing sample is available in dx12_path_tracer/, including a simple lit scene with diffuse and reflective spheres.