Interactive architecture
Inputs become one controlled state.
Select any block or connection to see what it receives, what it outputs and which parts of Good Old TV depend on it. This map describes the current implementation, including the remaining periodic status path.
External input Caregiver app Owner and controller actions
commands configuration update approval
External input Physical remote Viewer button presses
11 button types press / release
External system Television Power, routing and HDMI display
on / standby / unknown active source
External systems Streaming providers Authenticated media websites
page lifecycle media events
External input Signed update feed Authenticated OTA packages
manifest signature bundle
Boundary adapter Realtime transport Firebase command and state stream
queued command result heartbeat
Boundary adapter Remote input adapter Hardware-specific keys become the common contract
power channel playback sound
Boundary controller TV connection controller Single owner of CEC and route evidence
power route checking / stable
Boundary adapters Provider adapters One common media contract
ready playing buffering paused ended error
Boundary controller OTA updater Verifies, activates and rolls back releases
available ready installing healthy rollback
Control Command policy Authority, night protection and button enablement
accepted intent rejected reason
Central control Playback state manager The only place that decides viewer-facing mode
STANDBY PREPARING PLAYING MANUAL_PAUSED EXTERNAL_SOURCE ERROR_RECOVERY
Published state Status cache Redacted last-known state for caregivers
TV state Good Old TV state channel update freshness
State and storage Channel & checkpoint store Owner profile and resumable content state
channel order checkpoint settings played history
Output controller Audio controller Raspberry Pi HDMI audio sink
volume % muted / audible
Viewer output Single viewer surface Provider, preparation, paused and recovery screens
one Chromium tab current surface
State and storage Release slots Active and previous known-good application
active version previous version pending marker
Caregiver output App status display Remote screen, warnings and diagnostics
live snapshot command outcome attention
Physical output TV picture & sound What the viewer actually receives
Good Old TV visible external input standby
Caregiver output Privacy-safe diagnostics Technical cause without credentials or listening history
transition cause failure class freshness
Important boundary
Observation should not become control.
The status cache exists so the caregiver app can display the latest known state. A heartbeat can prove that the Gadget remains online, while bounded reconciliation can recover a missed external event. Neither should repeatedly manipulate a stable provider page. Control belongs in explicit transitions owned by the relevant controller.
Simplified state machine
Follow the arrows between states. Swipe sideways on a phone.