Home · Architecture

Architecture

The cloud never reaches into the LAN to turn a TV on.

That constraint is the design. A cloud server cannot sideload a Roku or drive CEC through NAT, so the on-site box is not optional. It is the product. Cloud, if you use it, is a control plane the box calls.

Pieces

  1. Dutywall box: Linux appliance (Docker or a small PC). Flask panel, resolver, NWS poller, media, enroll, panic webhook.
  2. Displays: poll /roku-config.json, fetch media, post heartbeats. They do not need a public IP.
  3. Optional cloud: multi-tenant orgs, site tokens, inventory, billing structure. Agent-initiated HTTPS only.

Standalone

Leave the cloud URL blank. The box is source of truth. NWS still needs outbound HTTPS to api.weather.gov unless you skip weather. Panic stays on the LAN.

Cloud-managed

Create a site in the cloud panel, put the token on the box. Every ~30 seconds the box registers screens, pulls desired content, and pushes status. A live local panic or NWS auto-alert is not wiped by a cloud “all clear.”

See setup guides, standalone overview, and cloud-managed sites.