EchoMeet – Zoom-Inspired Video Conferencing
A MERN stack-based video conferencing app with screen sharing, real-time chat, and meeting room generation using Socket.io. Designed as a lightweight Zoom alternative.
Problem Statement
After the Nullclass EdTech internship working on a video streaming platform, I wanted to apply those learnings by building a full WebRTC + Socket.io video conferencing app solo — to deeply understand peer-to-peer media negotiation, signaling, and room management from scratch.
Solution
MERN-stack video conferencing app with WebRTC for P2P audio/video and Socket.io as the signaling layer. Room generation with unique codes, live chat alongside video, screen sharing via getDisplayMedia(), and audio/video latency under 100ms.
Code Structure
echomeet/ client/ components/{VideoRoom,Chat,Controls} hooks/{useWebRTC.js,useSocket.js} server/ socket/{signaling.js,rooms.js} models/{Session,User}
Key Strategies
WebRTC P2P for Media
Direct P2P eliminates server-side media load entirely for rooms of 2-4 participants.
Socket.io as Signaling Layer
Room-scoped SDP/ICE negotiation keeps signaling decoupled from the media layer.
UUID Room Codes
UUID v4 room codes with server-side validation prevent unauthorized participants from guessing IDs.
React Custom Hooks
useWebRTC.js and useSocket.js encapsulate complexity, keeping component code clean and testable.
Technical Challenges
Performance Decisions
Audio/video latency <100ms via STUN-assisted WebRTC. React UI interaction delay <200ms. Socket.io signaling round-trip <50ms. Join success rate improved ~30% after MongoDB session persistence added.
Trade-offs Made
Mesh WebRTC over SFU: simpler but does not scale beyond 4-5 participants — mediasoup/Janus needed for larger rooms. Some production concerns (TURN server, recording) deliberately deferred for learning scope.
Lessons Learned
WebRTC is deceptively complex: SDP negotiation, ICE gathering, track management each have sharp edges. Signaling must be reliable — Socket.io disconnect during SDP exchange aborts the connection entirely.
Future Improvements
mediasoup SFU for 5+ participant rooms, MediaRecorder API recording, TensorFlow.js BodyPix virtual backgrounds, breakout rooms, DTLS-SRTP end-to-end encryption.
Security Considerations
UUID v4 room IDs not guessable. Participant verification on join via server-side room state. WebRTC media encrypted by default via DTLS-SRTP. Socket.io events scoped to authenticated room namespaces.
Explore EchoMeet – Zoom-Inspired Video Conferencing
Check out the source code or see it live.
