A full-featured video conferencing application built with React, Node.js, Socket.IO, and WebRTC. Inspired by Google Meet, this project provides real-time video calls, screen sharing, chat, and meeting management.
Want to test the application? Use these pre-configured demo accounts:
Guest Account 1:
- Email:
[email protected] - Password:
Password@123
Guest Account 2:
- Email:
[email protected] - Password:
Password@123
- Real-time Video Conferencing - P2P mesh WebRTC connections
- Audio/Video Controls - Mute/unmute, camera on/off
- Screen Sharing - Share your entire screen with participants
- Live Chat - In-meeting text messaging
- Participants Panel - See who's in the meeting
- Room Management - Create, join, and manage meeting rooms
- JWT Authentication - Secure user sessions
- Email Verification - Account verification system
- Password Reset - Secure password recovery
- Protected Routes - Authentication-based access control
- Responsive Design - Works on desktop, tablet, and mobile
- Google Meet UI - Familiar and intuitive interface
- Meeting History - View and manage your past meetings
- Room Validation - Verify room existence before joining
- Error Handling - Graceful error states and recovery
- Socket-based Signaling - Fast WebRTC negotiation
- Room Grace Period - Automatic cleanup of empty rooms
- Optimized Layouts - Adaptive video grid for different participant counts
- Memory Management - Efficient resource cleanup
π client/
βββ π src/
β βββ π components/ # Reusable UI components
β β βββ π room/ # Video conferencing components
β β βββ π ui/ # shadcn/ui components
β βββ π pages/ # Route components
β βββ π hooks/ # Custom React hooks
β βββ π context/ # React Context providers
β βββ π api/ # API service functions
β βββ π services/ # Socket.IO client
π server/
βββ π src/
β βββ π controllers/ # Route handlers
β βββ π models/ # MongoDB schemas
β βββ π routes/ # Express routes
β βββ π sockets/ # Socket.IO server logic
β βββ π middlewares/ # Express middlewares
β βββ π services/ # External services (email, cloud)
β βββ π utils/ # Helper functions
- Frontend: React 19, Vite, TailwindCSS, shadcn/ui, React Router
- Backend: Node.js, Express.js, Socket.IO, MongoDB, Mongoose
- WebRTC: RTCPeerConnection, getUserMedia, getDisplayMedia
- Authentication: JWT, bcrypt, nodemailer
- Cloud: Cloudinary (file uploads)
- Validation: Zod schemas
- Node.js 18+ and npm
- MongoDB 5.0+
- Modern browser with WebRTC support
git clone <repository-url>
cd vido-conferencing# Install server dependencies
cd server
npm install
# Install client dependencies
cd ../client
npm install# Database
MONGODB_URI=mongodb://localhost:27017/video-conferencing
# JWT
JWT_SECRET=your-super-secret-jwt-key-here
JWT_EXPIRES_IN=7d
# CORS
ALLOWED_ORIGINS=http://localhost:5173
# Email Service (nodemailer)
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USER=[email protected]
EMAIL_PASS=your-app-password
# Cloudinary (optional - for file uploads)
CLOUDINARY_CLOUD_NAME=your-cloudinary-name
CLOUDINARY_API_KEY=your-api-key
CLOUDINARY_API_SECRET=your-api-secret
# Server
PORT=5000
NODE_ENV=developmentVITE_API_BASE_URL=http://localhost:5000/api
VITE_SOCKET_URL=http://localhost:5000# Terminal 1 - Start backend server
cd server
npm run dev
# Terminal 2 - Start frontend dev server
cd client
npm run dev- Frontend: http://localhost:5173
- Backend API: http://localhost:5000/api
- Socket.IO: http://localhost:5000
- Sign up/Sign in to your account
- Click "New Meeting" button
- Share the generated room ID with participants
- Participants join using the room ID
- Navigate to
/room/{roomId}or use join form - Allow camera/microphone permissions
- Wait for other participants to connect
- π€ Microphone: Toggle audio on/off
- πΉ Camera: Toggle video on/off
- π₯οΈ Screen Share: Share your screen
- π¬ Chat: Send text messages
- π₯ Participants: View attendee list
- π Leave: Exit the meeting
- My Meetings: View meeting history at
/my-meetings - Active Status: See which meetings are currently active
- Participant Count: View live participant counts
- Room Cleanup: Inactive rooms auto-delete after 5 minutes
sequenceDiagram
participant A as User A
participant S as Socket Server
participant B as User B
A->>S: join-room
S->>A: existing-participants
S->>B: user-joined
A->>S: offer
S->>B: offer
B->>S: answer
S->>A: answer
A<->B: ICE candidates via server
A<->B: Direct P2P connection established
join-room- Join a meeting roomverify-room- Validate room existenceoffer/answer- WebRTC negotiationice-candidate- ICE candidate exchangetoggle-audio/video- Media state changesstart/stop-screen-share- Screen sharingsend-message- Chat messages