Live Demo https://zync-sk7g.onrender.com/
Overview • Features • Architecture • Tech Stack
Zync is a modern full-stack video conferencing platform built using native WebRTC APIs, Socket.IO, and a custom real-time signaling architecture.
Unlike SDK-based meeting applications, Zync implements the WebRTC connection lifecycle manually using RTCPeerConnection, enabling deeper control over peer negotiation, signaling, and media stream management.
The platform supports:
- 🔴 Real-time video/audio communication
- 🖥️ Screen sharing
- 💬 In-meeting chat
- 👥 Dynamic participant grids
- 🔐 Secure session-cookie authentication
- 🖼️ Optimized avatar uploads with image compression
- 🔗 Human-readable GitHub-style meeting links
- ⚡ P2P communication using STUN/TURN infrastructure
Most modern video conferencing platforms rely heavily on proprietary SDKs that abstract away the underlying real-time communication layer.
Zync was built to deeply understand and implement:
- WebRTC peer negotiation
- ICE candidate exchange
- Real-time signaling architecture
- Media stream lifecycle management
- Scalable Socket.IO room systems
The goal was to engineer a production-style conferencing platform using native browser APIs instead of black-box abstractions.
- Native WebRTC peer-to-peer media streaming
- Self-managed signaling using Socket.IO
- Dynamic participant grid rendering
- Live participant join/leave handling
- Camera toggle
- Microphone toggle
- Screen sharing support
- Self-view video preview
- Real-time Socket.IO powered messaging
- Profile pictures inside chat
- Usernames + timestamps
- Persistent authenticated messaging layer
- Session-token based authentication
- HTTP-only secure cookies
- Password hashing using bcrypt
- Socket-level authentication middleware
- Protected meeting routes
- Frontend image compression before upload
- Backend fallback compression using Sharp
- Multer-based upload pipeline
- Base64 optimized avatar delivery
- Fully responsive UI
- Dark themed modern aesthetic
- shadcn/ui components
- Redux persistent state management
- Optimized React architecture
- Smooth real-time updates
- Synchronizing peer connections across multiple participants
- Managing dynamic room state using Socket.IO
- Handling disconnect/reconnect scenarios
- Implementing secure socket authentication using session cookies
- Optimizing avatar uploads with frontend + backend compression
- Managing real-time media stream updates efficiently
- Building responsive participant grids for varying room sizes
- Frontend image compression before upload
- Backend fallback compression using Sharp
- P2P media streaming to reduce server load
- Lazy loaded frontend routes
- Optimized Redux persistence
- Minimal signaling payloads
- Efficient room broadcasting with Socket.IO
- HTTP-only secure session cookies
- bcrypt password hashing
- Socket-level authentication middleware
- Protected API routes
- Controlled CORS configuration
- Secure credential handling
Current architecture is optimized for small-to-medium sized conferencing rooms using peer-to-peer topology.
Future scalability improvements may include:
- SFU architecture integration
- Redis Socket.IO adapter
- Horizontal signaling server scaling
- Media server integration
- Distributed TURN infrastructure
1. User joins meeting
2. Socket.IO authenticates session cookie
3. Existing participants fetched
4. Signaling exchange begins
5. RTCPeerConnection established
6. ICE candidates exchanged
7. P2P media streams connected
8. Video/audio/chat synchronized live
| Event | Description |
|---|---|
join-meeting |
Join a meeting room |
existing-users |
Fetch current participants |
user-joined |
Notify new participant |
signal |
Exchange WebRTC signaling data |
chat-message |
Real-time meeting chat |
user-left |
Participant disconnect event |
User Login/Register
│
▼
Session Token Generated
│
▼
HTTP-only Cookie Stored
│
▼
Socket.IO Middleware Validation
│
▼
Authenticated Real-Time Connection
backend/
├── src
│ ├── config
│ ├── controllers
│ ├── middlewares
│ ├── models
│ ├── routes
│ ├── utils
│ ├── io.js
│ ├── app.js
│ └── server.jsfrontend/
├── src
│ ├── components
│ ├── hooks
│ ├── Pages
│ ├── store
│ ├── types
│ ├── api.ts
│ ├── routes.tsx
│ └── main.tsxVITE_API_BASE_URL=
VITE_SOCKET_URL=PORT=
MONGODB_CONN_STR=
ENV=
FRONTEND_URL=cd backend
npm installCreate .env
PORT=
MONGODB_CONN_STR=
ENV=
FRONTEND_URL=Run development server
npm run devcd frontend
npm installCreate .env
VITE_API_BASE_URL=
VITE_SOCKET_URL=Run frontend
npm run dev- Meeting recording
- AI-generated summaries
- Live captions
- Virtual backgrounds
- Meeting analytics
Pull requests, feature suggestions, and improvements are welcome.
fork → clone → branch → commit → push → PR
