The lab bench / four experiments
Read the manual. Then break the path.
Real-time systems fail in the space between the diagram and the wire. These labs open real sockets, real peer connections, and deliberate failure modes so you can see which layer is actually responsible.
# Next app + ws signaling server
$ bun run dev:all
# web http://localhost:3000
# signal ws://localhost:8081
# then open two tabs for the 1:1 and mesh labs
No camera?
Use the synthetic test feed.
No second device?
Open another tab, or use loopback/model mode.
No account?
Labs record to this browser's IndexedDB.
No SFU credentials?
The SFU model still runs. LiveKit is optional.
The bench
Four ways to make it fail.
Each lab records completion in this browser's IndexedDB. The WebRTC benches use local signaling in development and a same-origin WebSocket route on Vercel; the SFU lab runs as a model without external credentials.
WebSocket workbench
Open a live socket, send validated frames, measure latency, and kill the connection on purpose.
Open bench
Needs signaling
The 1:1 connection lab
Build a peer connection step by step with automatic or manual signaling, or loop back in a single tab.
Open bench
Needs signaling
Mesh under load
Join several tabs into a full-mesh room and watch bandwidth and encoder count grow.
Open bench
One or more tabs
SFU relay lab
Compare one-upload/many-download forwarding with mesh, then connect a LiveKit SFU when configured.
Open bench
Simulation · LiveKit optional
All four labs are required for the certificate.
The certificate is name-free and bound to this browser's anonymous progress record. No account, email, or personal details are collected.
01
Observe the real wire
Open the socket, inspect candidates, read getStats. Do not start with a framework abstraction.
02
Change one variable
One policy, one candidate filter, one broken link. Keep the blast radius readable.
03
Explain the failure
If you cannot name the layer, the fix is a guess. The labs end with a written model, not just a green badge.