Built for two people and one film
Partmov is not a streaming catalogue and not a video call with a player bolted on. It is a room that two people enter to watch one thing at the same time, and it optimises for that single case.
What the product actually promises
The promise is narrow and testable: both viewers see the same frame within a few tens of milliseconds, playback starts together, and when one connection stumbles the recovery is handled by the platform rather than by two people typing “wait, where are you?”
Everything else is subordinate. There is no feed, no recommendation engine, no public rooms, no follower graph. A room holds one title, two people, and a shared clock. That constraint is what makes the sync problem tractable and the privacy story honest.
Design test used throughout: if a feature does not make the two people more synchronised, more private, or more comfortable, it does not ship.
From empty account to shared film
Eight steps, none of which require the guest to create an account or install anything.
Host signs in with a link
Email address in, magic link out, signed session cookie back. No password, no social login, no profile to fill in. The account exists to own media and rooms, nothing more.
Host adds a film
A resumable upload streams the original file into private object storage. The client shows probe results within seconds — container, duration, video and audio streams, embedded subtitle tracks — and the transcode job is queued immediately.
The pipeline prepares the title
FFmpeg produces three renditions and an HLS master playlist, extracts subtitles into WebVTT, grabs a poster frame, and builds a sprite sheet for scrub previews. The title becomes playable when the lowest rung finishes, and quality rungs light up as they land.
Host creates a room and invites one person
A room is bound to exactly one title and one invite link. The link carries a random 22-character token, an expiry, a use limit of one, and optionally a passphrase. Nothing about the room is discoverable.
Guest joins and both arm playback
The guest opens the link, picks a display name, and lands in the room. Each client fetches signed manifest URLs, buffers the first segments, and reports readiness. The room shows a calm 'ready when you are' state rather than autoplaying into a stall.
Start together
The host presses play. The server schedules a start timestamp roughly 400 ms in the future and broadcasts it. Both players seek to the same position and unpause on that shared instant.
Watch, drift, correct, recover
Every second each client reports its position and buffer health. The server answers with the authoritative position. Small gaps close through rate nudges; a rebuffer on one side triggers an optional courtesy pause for both, which is the default for two-person rooms.
Leave and come back
Closing the tab does not destroy the room. Position, subtitle choice, and audio track persist. Reopening the link resumes from the stored position with the same roles.
Who can do what
Two roles keep the permission model small enough to reason about, and the control model explicit enough that nobody fights over the remote.
Five surfaces, one job each
The room stays quiet on purpose. Loom-like dark surfaces, solid blue accents, and transitions measured in fractions of a second.
“We have all the time in the world.”
| Surface | Behaviour |
|---|---|
| Stage | The player fills the viewport with no chrome over the picture. Controls fade after three idle seconds and return on pointer move, tap, or key press. |
| Status line | One row, always truthful: who holds the remote, whether both people are connected, and the current sync delta in milliseconds. |
| Control strip | Pause for both, timeline with buffered range, subtitle and audio menus, quality override, volume. Nothing else. |
| Companion rail | Collapsed by default. Holds chat and six reactions. Opening it shrinks the stage rather than covering it. |
| Interstitials | Join, ready, rebuffer, and reconnect states are full-width whispers under the player, never modal dialogs that block the film. |
- Palette — background
#1F1F21, secondary#18191A, text#CECFD2, accent#1868DB, healthy-sync#4BCE97, attention#FBC828. Flat fills only — no gradients. - Motion — 160–240 ms fades for controls, 420 ms for sheets and reveals, no bounce, no parallax. Every animation respects
prefers-reduced-motion. - Typography — one soft product sans for titles and interface text, sized to Loom Lens body and heading steps so the product reads clear rather than decorative.
- Mobile — the same room in portrait: stage on top, status line beneath, control strip as a bottom sheet, rail as a full-height drawer. Landscape goes edge to edge.
What Partmov deliberately is not
- Not a public catalogue. There is no browse page, no search across other people's libraries, and no shared index.
- Not a social network. Chat exists because pausing to type a full message is worse than a two-word reaction; it is not a feed.
- Not a rooms-for-twenty product. Group watch changes the sync trade-offs and the moderation surface, so it stays out of scope.
- Not a piracy tool. Uploads are private to the uploader, links are single-use, and takedown tooling exists from day one.
- Not DRM-first. Access control, expiring URLs, and audit logs cover self-owned files; DRM only enters if a licensor contractually demands it.