
No accounts, no installs: everyone joins a room with a 6-digit code, and every device in the room plays the same audio at the same instant.
How it works
- Devices keep their clocks in sync the way NTP does: a rolling window of round-trip measurements against the server, which also doubles as the connection heartbeat.
- Playback is scheduled, not immediate: the server broadcasts an execution time in the future, and each client converts it to local time before starting its Web Audio source node.
- While playing, clients compare their actual position against the server-anchored expected position every few seconds. Small drift is corrected inaudibly with a tiny playback-rate nudge; large drift triggers a clean restart at the corrected offset.
- Uploaded audio plays through this tight, server-scheduled path. A separate Spotify integration handles discovery and per-user playback control, but is not part of the synchronized-audio path.
Where it stands
Tight sync is built around uploaded audio files streamed from object storage; Spotify playback is a discovery layer, not a synchronized one.
Built with
- Next.js
- Bun
- TypeScript
- WebSockets
- Web Audio API