What we learned building live rooms for Party Room

Real-time voice is unforgiving. A 200ms delay on a web page goes unnoticed; on a call it makes people talk over each other.
Peer-to-peer stops working fast
With plain peer-to-peer WebRTC, every participant sends their stream to every other participant. That's fine for two people. With ten, each phone is uploading nine video streams and the battery is gone in minutes.
So Party Room uses a selective forwarding unit (we use LiveKit). Each person uploads one stream; the server forwards it to everyone else and adapts quality to each connection.
Presence is the hard part
Knowing who is in which room, who is speaking and who just left has to feel instant on every device. We keep that state on the server and push changes over WebSockets, rather than letting each client guess.
Lessons
- Measure on real phones on real mobile networks, not on a laptop on office Wi-Fi.
- Design for people leaving abruptly. Tabs close, trains enter tunnels.
- Keep the room list cheap to load. It's the first thing everyone sees.
You can see the result on the Party Room page.