Systems & interfaces
Multi-Watch
Watch anything together, perfectly in sync — no accounts, just a room code.
SYNC DRIFT
~1s
ACCOUNTS
0
The problem
Watching something with friends who aren't in the room means one of two bad options: a screen share that turns 1080p into a slideshow, or the "3, 2, 1, press play" ritual that desyncs within a minute and can never recover, because nobody knows who is ahead.
Every product that solves this properly wants an account first.
What I built
Create a room, get a six-character code, read it out loud, done. Whoever has control plays, pauses or seeks and every other player follows instantly.
Sources are YouTube (any URL format — watch?v=, youtu.be, /embed/, /shorts/,
/live/, with or without a timestamp), a file you drag in, or a direct video URL.
How it works
The codes exclude 0, O, 1, I and L. Room codes get read aloud across a
noisy room or typed from a screenshot, and those five characters are where every
failure happens.
Identity lives in localStorage — a random ID, a display name, an avatar colour — so
a refresh or ten seconds of bad Wi-Fi doesn't drop you from the room or reset your
role.
Roles are host, co-host and viewer, and permission checks are enforced server-side. A viewer who disables their own UI restrictions still can't drive playback. If the host vanishes and doesn't return within a grace period, hosting hands to the longest-tenured co-host so nobody is stranded.
Sync is a continuous correction loop: each client self-checks against a host heartbeat and nudges itself back, which holds a room within about a second over long sessions through jitter and buffering stalls. Joining halfway seeks you to the right position before playback starts.
The player fits the content rather than the frame — portrait phone clips, ultrawide, square — letterboxing cleanly instead of stretching.
Decisions
Server-side permission enforcement
Disabling controls in the viewer's UI
A disabled button is a suggestion. Anyone can open devtools and re-enable it, and in a room of friends someone will, as a joke, in the middle of a film. The authority for who may seek has to live where the client can't reach it.
Continuous drift correction with a host heartbeat
A single sync on join
Sync-on-join is correct for one instant and wrong forever after — buffering stalls and clock skew pull players apart within minutes with no way back. A correction loop means the room self-heals instead of needing someone to call out a timestamp.
Automatic host handover on disconnect
Ending the room when the host leaves
The host's Wi-Fi dropping is the most likely event in any session, and it should not end everyone else's evening. Handing to the longest-tenured co-host keeps the room alive with no intervention.