Alvin Murithi@cypher-30
← All work

2025 · Actively developed

Chorus

Turns every phone and laptop in a room into one synchronized speaker.

Chorus running in the browser

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