A robust, real-time video conferencing application built for seamless communication using WebRTC and Socket.io.
Juncture is a full-stack video conferencing solution designed to emulate the feeling of being in the same room. Unlike basic wrappers, Juncture implements a custom WebRTC signaling server using Socket.io to establish secure Peer-to-Peer (P2P) mesh connections.
It features a sophisticated "Lobby" system where hosts have administrative control to admit or reject participants, ensuring meeting privacy and security.
The following diagram illustrates the P2P Mesh Topology and the Signaling Flow of the application.
Architecture Highlights:
- Signaling Path: Clients communicate via WebSockets (Socket.io) to the Node.js server to exchange connection details (SDP & ICE Candidates).
- Media Path: Once connected, video and audio streams flow directly between clients (Peer-to-Peer), bypassing the server for low latency.
- Lobby Governance: The server acts as a gatekeeper, holding users in a
waitingQueuestate until the Host approves theadmit-userevent.
- Real-Time Audio/Video: Low-latency communication using WebRTC with STUN/TURN server integration.
- Host Governance:
- Waiting Room: Participants enter a waiting queue before joining.
- Admit/Deny: Hosts receive real-time notifications to control entry.
- Interactive Collaboration:
- Screen Sharing: Seamlessly share your entire screen or specific windows.
- Real-Time Chat: Integrated persistent chat with the ability to download chat history as a
.txtfile. - Hand Raising: Visual indicators for non-verbal communication.
- Smart UI/UX:
- Picture-in-Picture (PiP): Minimize your self-view while focusing on others.
- Responsive Design: Optimized for various screen sizes using Material UI.
- Framework: React.js
- Styling: Material UI (MUI) & CSS Modules
- Real-time Client:
socket.io-client - State Management: React Hooks (
useState,useRef)
- Runtime: Node.js
- Framework: Express.js
- Signaling:
socket.io(Custom implementation for signaling and room management) - Database: MongoDB (via Mongoose)
- Security:
cors,dotenv
Follow these instructions to set up the project locally.
- Node.js (v16+)
- MongoDB (Local or Atlas URL)
- npm or yarn
-
Clone the repository
git clone [https://github.com/coder-aman-sahu/juncture.git](https://github.com/coder-aman-sahu/juncture.git) cd juncture -
Backend Setup
cd backend npm install # Create a .env file in the backend directory # Add: MONGO_URL=your_mongodb_url # Add: PORT=8000 npm start
-
Frontend Setup
cd ../frontend npm install npm start -
Access the App Open http://localhost:3000 to view the application.
To scale this application for enterprise use, the following updates are planned:
- Scalability: Transition from Full Mesh topology to an SFU (Selective Forwarding Unit) architecture (e.g., Mediasoup) to support 50+ participants per call.
- Reliability: Integrate TURN servers (e.g., Coturn or Twilio) to ensure connectivity for users behind strict corporate firewalls (Symmetric NAT).
- Performance: Implement Redis Adapter for Socket.io to allow horizontal scaling of the signaling server across multiple instances.
Contributions are welcome! Please fork the repository and submit a pull request for review.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Aman Sahu
- GitHub: @coder-aman-sahu