A cozy space for meetings, movie nights, and collaboration.
MeetNest is a real-time, peer-to-peer video calling and screen sharing application built with WebRTC. Create a room, invite a friend, and enjoy crystal-clear video calls, live chat, and synchronized screen sharing — all from your browser, no downloads required.
| Feature | Description |
|---|---|
| 🎥 Video Call | High-quality P2P video & audio powered by WebRTC |
| 🖥️ Screen Sharing | Share your screen in real-time with a single click |
| 💬 Live Chat | Built-in text chat alongside your video call |
| 🔐 TURN/STUN Support | Reliable connectivity via Turnix.io ICE servers |
| 🏠 Room System | Create or join rooms with simple 8-character codes |
| 📱 Responsive UI | Works on desktop, laptop, tablet, and mobile |
| 🧊 Glassmorphism UI | Modern frosted-glass design with a warm White + Orange palette |
- Backend — FastAPI + python-socketio (async ASGI)
- Frontend — Vanilla HTML / CSS / JavaScript
- Real-time — Socket.IO for signaling, WebRTC for media
- TURN/STUN — Turnix.io for NAT traversal
- Package Manager — uv
- Python 3.12+
- uv (fast Python package manager)
git clone https://github.com/Avijit0001/MeetNest.git
cd MeetNestCreate a .env file in the project root:
TURNIX_API_KEY = "your_turnix_api_key_here"
TURNIX_ICE_URL = "https://turnix.io/api/v1/credentials/ice"💡 Get a free API key from Turnix.io. Without it, the app falls back to Google STUN servers (works on the same network but may fail across NATs).
uv syncuv run uvicorn app.main:app --host 0.0.0.0 --port 8000Then open http://localhost:8000 in your browser.
To share with friends outside your local network, use ngrok:
ngrok http 8000Share the generated ngrok URL with your friend — they can join your room directly!
MeetNest/
├── app/
│ ├── main.py # FastAPI + Socket.IO signaling server
│ ├── static/
│ │ ├── css/
│ │ │ └── style.css # UI styles (White + Orange glassmorphism)
│ │ └── js/
│ │ └── app.js # Client-side WebRTC + Socket.IO logic
│ └── templates/
│ └── index.html # Single-page application template
├── .env # Environment variables (not committed)
├── .gitignore
├── pyproject.toml # Project metadata & dependencies
├── uv.lock # Lockfile for reproducible installs
└── README.md
┌──────────┐ Socket.IO ┌──────────────┐ Socket.IO ┌──────────┐
│ User A │ ◄─────────────────► │ FastAPI + │ ◄─────────────────► │ User B │
│ (Browser)│ signaling │ Socket.IO │ signaling │ (Browser)│
└────┬─────┘ │ Server │ └────┬─────┘
│ └──────────────┘ │
│ │
│ WebRTC (P2P — video, audio, screen) │
└─────────────────────────────────────────────────────────────────────┘
- User A creates a room → gets an 8-character room code
- User B joins with the code → signaling server relays SDP offers/answers
- WebRTC establishes a direct P2P connection for media streaming
- Chat messages are relayed through Socket.IO
- Screen sharing uses
replaceTrack()to swap video tracks seamlessly
| Method | Endpoint | Description |
|---|---|---|
GET |
/ |
Serve the main application |
GET |
/health |
Health check (room count, connected users) |
GET |
/debug/rooms |
Debug view of all active rooms |
GET |
/api/turn-credentials |
Fetch TURN/STUN credentials from Turnix.io |
Avijit Paul
Made with 🧡 by Avijit Paul