What we build / Cross-platform
One codebase across four television runtimes
This page is the technical argument, not the sales pitch. If you are the person who has to decide whether a shared codebase is real engineering or a story told to win a tender, it is written for you — including the parts that do not share.
The problem
An HbbTV terminal browser bound by ETSI TS 102 796. Tizen's Chromium-derived runtime. webOS. Android TV. Different key codes, different media pipelines, different application lifecycles, different packaging, different review queues — and, usually, four teams who each learn one of them.
The default answer is separate builds. The default outcome is divergence: by the second year the four applications no longer agree on what a programme is, and every feature is scoped four times. The feature your editorial team asked for ships on two platforms, and nobody can say exactly why it did not ship on the other two.
The architecture
Targets
- HbbTV
- Samsung Tizen
- LG webOS
- Android TV
Adapters
- HbbTV adapter: input · media · lifecycle · storage · packaging
- Samsung Tizen adapter: input · media · lifecycle · storage · packaging
- LG webOS adapter: input · media · lifecycle · storage · packaging
- Android TV adapter: input · media · lifecycle · storage · packaging
The only platform-specific code — about 10%
Shared
One React application — about 90% of the codebase
- Screens & routing
- Component library & design tokens
- Domain model & state
- API clients — REST + GraphQL
Backend
- Headless Drupal
- Elasticsearch
- EPG ingest
- VAST ad server
- Livestream origins
Shared
What is genuinely shared
The data layer
API clients, caching, and the contract with the CMS. One place where a programme, a series and a stream are defined, so all four platforms agree on what they are showing.
Domain and state
Continue-watching, favourites, the rules about what may be played where. Business logic written once.
The component library
Every screen is built from the same React components and the same design tokens, so a change to a tile is a change to every tile on every set.
Routing and composition
The same navigation model everywhere. A viewer who knows your app on one television knows it on the next.
Not shared
What is not shared, and why not
Five seams. Anyone who tells you there are none has not shipped on four runtimes.
- Input
- HbbTV has keysets and the six gating layers of clause 10.2.2.1 — a key press reaches your app only if six conditions all hold. Tizen wants registerKey. And webOS has the Magic Remote, which is a pointer, not a d-pad: that is an interaction-design problem, not a key-mapping one, and it is the seam that most often surprises people.
- Media
- video/broadcast and the A/V control object on HbbTV, AVPlay on Tizen, webOS media on webOS. Different DRM, different codec support, and different failure modes at the same bitrate.
- Lifecycle
- destroyApplication() against native suspend and resume, and four different answers to what the back button does on the first screen.
- Packaging
- A signed .wgt through Samsung Seller Office, an .ipk through the LG Content Store, an .apk through Play — against an HbbTV application that is a URL with the right Content-Type and no review at all. The asymmetry is not a detail: it decides your release calendar.
- Performance
- The oldest set you still support sets the budget for every set, and it is a different device on each platform. This is the constraint that decides how much React you can actually afford.
The bench
Costs
What it costs, and what it buys
A shared architecture costs more up front than one application for one platform, and less than two. The return is not in the first release. It is in every release after it, and it compounds: one release train, one QA pass, one feature request.
It also stops making sense somewhere, and we would rather say where. Below two platforms it is overhead you do not need. And if one platform's experience has to diverge fundamentally rather than cosmetically, forcing it into the shared model gets you the worst of both — a codebase with a branch in it that nobody wants to touch.
Tell us what you are building.
Christian answers these himself, usually within a working day.