Screens
Key engineering
Under the hood
One API behind many clients. Ingest and normalisation happen server-side, so every surface consumes the same shaped data instead of each client re-deriving it, and slow background work is kept off the request path.
A relational core for accounts, entitlements and the channel map, with a cache in front of the read-heavy paths. Device identity and entitlement state are also held on the device, so playback does not depend on the server being reachable.
Containerised services with backups to object storage. Five client surfaces and the API ship together through a purpose-built release CLI, gated by the test suite — the coordination is as much of the work as the code.
Upstream sources are the unreliable part, so their work is queued, retried and reconciled: a bad source degrades the programme guide rather than the playback. Offline verification means a server problem never locks out someone who has paid.
Stack
What it took
- Licensing has to survive a bad connection. Devices carry a cryptographic identity and entitlements verify on the device itself, so a viewer who has paid keeps watching when the line wobbles mid-stream.
- Playback is four different problems. A TV remote, a phone, a browser and a set-top box each need their own player behaviour, codec handling and recovery strategy, unified behind one account and one library.
- Programme guides never agree. Several sources are reconciled into one channel map with fuzzy matching, because no two providers name the same channel the same way.
- Five services, one release. TV, mobile, web, dashboard and API ship together through a purpose-built CLI, with roughly 700 tests gating the pipeline — a coordination problem as real as any feature.
