July 24, 2026 · 3 min
The television is not a browser
Make Enemies reached Fire TV and Android TV with one shared client. Roku made us draw a harder line.
Make Enemies begins on a television. Players join from their phones. The large screen runs the room, performs the host lines, and keeps everyone looking at the same terrible decision.
That makes television support sound simple. Put the web client in a wrapper and submit it everywhere.
It worked for Fire TV. We built a dedicated Capacitor flavor that opens the live TV surface, keeps an offline fallback, and handles the remote explicitly. Android TV needed a different answer, so its flavor bundles the client instead of depending on a remote page. Same codebase, separate application IDs, separate delivery rules.
Then we reached Roku.
Roku does not give us a web view. A public channel is BrightScript and SceneGraph, which means the television surface has to be native. The Worker and Durable Object can remain authoritative. The phone controllers can keep their WebSocket connection. The display cannot simply load /tv and pretend nothing changed.
So we built the boundary before we built the bridge.
The repository now contains a small native SceneGraph prototype with lobby, live-round, and standings fixtures. It can be sideloaded for layout and remote-navigation work. It does not connect to production, and it is not ready for the store.
The connected version needs a narrow public snapshot feed. A Roku display gets its own token, long-polls versioned TV state, and never receives the private phone payload. The room code alone is not authority. Mole information stays off the television. Cache headers say no.
That is less glamorous than announcing a Roku release. It is also true.
We have a television made from fixtures, waiting for a physical box and a backend contract. Sometimes the honest milestone is a screen that knows exactly what it cannot do yet.