01 — Context
An IPTV operator's web client for live channels, programme guide, on-demand catalogue, recordings and payments ran on an end-of-life front-end framework, with three player variants selected at build time. Test coverage was thin and many end-to-end suites were empty stubs.
02 — Challenge
The client had to be rebuilt on a modern stack while the old one stayed live, without losing behaviour nobody had written down. The rebuild also had to handle encrypted (DRM) playback and the old build's hidden production defects.
03 — Approach
One capability at a time
A strangler-fig migration: each capability (login, profiles, home, live TV and guide, player, catalogue, search, recordings, payments, settings) is replaced one vertical slice at a time.
Behaviour mined before code
Behaviour is extracted from the old client and probed against staging, then written as signed-off specs (about 240 requirements across 10 capabilities) before implementation.
Encrypted playback, guarded contracts
A generalised playback state machine and live-media resolution handle DRM-encrypted streams. API contract tests catch backend drift.
Tests on realistic data
Mocked APIs are seeded from real fixture shapes, and about 150 unit and integration test files back the new client.
04 — Outcome
Live TV, the channel zapper and the programme guide now run on the new stack. Spec-mining found serious production defects in the old client, including one that stopped most channels from playing when guide data was missing.

