Skip to main content
hendeaux
Things I’m building

Watch Party

I built Watch Party so my friends and I could watch movies together from our Macs. Movie night includes someone arriving late, stopping to talk, and going back to a scene. The app gives us shared playback controls and a conversation that stays around afterwards.

Join late, pause to talk, and return to a scene together.

An edited recording of two native clients on one Mac, with an original animation and staged conversation. Shared actions stay in time; the close-up shows Alex’s player and Sam’s chat. Open the recording.

When a friend joins, their player catches up to the room. Anyone can pause or move to another moment, and the others follow. Each message can carry a timestamp, so “let’s watch that again” can take everyone straight back to the scene being discussed.

The less obvious part is knowing why the movie stopped. A pause while someone buffers should end when their player is ready. A pause to talk should stay paused. I track that difference on the server, so a connection catching up cannot restart the movie in the middle of a conversation.

The discussion stays with the movie after everyone leaves. There is also a general chat in the lobby, so we can talk between watch sessions without starting a film.

A Raspberry Pi at home serves the files and keeps the shared playback state. The native SwiftUI app uses VLCKit to play them on each Mac, so the Pi does not have to transcode video. I use Rust and WebSockets to coordinate the room, SQLite to save the conversations, and Tailscale to keep access within our group.

So far, a friend and I have tested watching together on two Macs, including shared play and pause. The newer chat features have passed local checks and still need that same two-person test. This is a personal project for our small group, built around spending time together.