How athletes watch — phone, web or Apple TV — with signed playback and an A/B loop
Watch
Athletes watch on their phone (the iPhone app or the mobile web), in a browser, or on a paired Apple TV. Every playback URL is signed and short-lived, and footage is only ever visible to the athlete it belongs to and their coaching team.
On the phone or web
The athlete portal's session page (/athlete/sessions/[id]) opens on the guided review if one is published (the player pauses at gated keypoints for a Got it), with the clip pills to switch clips and two tabs:
- Coach Notes — the coach's annotations, each with a seek button.
- Stats — the measured Session Insights: rides, stance, relative speed and compression, exactly as the coach sees them.
The iPhone app shows the same review in its guided player, plus a clip player with an A/B loop: set point A, set point B, and the clip loops between them until cleared (the web player has the same loop control for coaches; both follow the same rules, so a loop behaves identically everywhere).
On Apple TV
- Pair a TV. The Apple TV app shows a six-character code and a QR code. Scan it (or open
/tv?code=…on any signed-in device), confirm Sign in to this TV as you, optionally name the TV, and the TV picks up your session on its next poll. - Browse and play. The TV app lists sessions, plays clips with the HUD, plays guided reviews, and offers a side-by-side compare view.
- Send to TV. On the web session page, the tv button in the player toolbar lists your paired TVs (with an online dot) — send the current clip, and the footage on your laptop dims to a ghost while the TV plays: your mouse becomes a laser pointer on the big screen, and the transport controls drive the TV.
- Manage TVs from Settings → TVs: rename or sign a TV out (which bounces it back to its sign-in screen).
Signed playback
Clients never receive a raw storage URL. The browser or app asks /api/video/sign for an HMAC-signed, access-checked URL (1-hour TTL) and plays it through the /api/video/stream byte-range proxy; the iPhone uses its own playback endpoint with the same check. Overlay sidecars load through an access-checked proxy too.
Who can see what
An athlete sees their own sessions and reviews. A coach sees the athletes assigned to them (owners and admins see the whole roster). Nothing about an athlete is published anywhere public.