Before you ship

  • Read the deployment summary block in the Unreal log at startup. from the network must say token required. If guarded by still names the published default token and the kiosk is on a shared network, replace it — see locking the control channel.

  • Streaming (D, E) with a tunnel on the Unreal box: Set RequireTokenFromLocal=true, otherwise tunnel traffic appears local and skips the token.

  • The token is not in config.json. Confirm by fetching http://<host>:8080/config.json from another machine and verifying it returns no token.

  • Every flip button’s state key is published on BeginPlay, and every …Pending key is cleared there.

  • Nothing on the tablet is a small target. Test with a gloved thumb.

  • The browser’s own chrome is unreachable — full screen, no context menu, no address bar. The sample blocks the context menu for you. Launch with --kiosk, not --app=.

  • Hold the pointer against the top edge of the glass for a few seconds. Nothing appears. A fullscreen --app window slides its title bar back down there, including minimise and close.

  • The page declares <meta name="google" content="notranslate">. Open it on a box using a different Windows language to confirm no translate bubble appears.

  • The window stays on the right monitor after a reboot or Windows display rearrangement. Coordinates were asked for, not hardcoded.

  • Close the browser window. Something puts it back. If nothing does, a visitor has found the exit.

  • Minimise it (Win+D will do). Something puts it back within a second or two. This is easily missed: closing kills the process so a supervisor notices, but minimising leaves a healthy process behind a black screen that passes every health check.

  • Start the tablet machine before Unreal. The tablet should wait and appear on its own, instead of sitting on a browser error page which nothing recovers from.

  • Pull the network cable and watch the tablet. It should fog within seconds and automatically recover about a second after plugging it back in.

  • Latch Manual blackout and check the big screen. If it shows an error, consider a video loop instead.

  • Two tablets, if deploying two: press a button on one and watch the other follow.

  • Streaming (D, E) only: -PixelStreamingEncoderTargetBitrate is set, the log confirms it applied from command line, and Committed stays flat with a viewer connected for twenty minutes. Flat is the only passing result — see streaming leaks memory. If it climbs, the kiosk will not survive a working day regardless of nightly restarts, because the big screen’s browser stays connected constantly.

Where to read more

README.md

the full reference — every state key, every Blueprint node, the theming variables, and the changelog

PROTOCOL.md

the wire format. Read this to write a host on another engine; nothing in it is Unreal-specific

apps/tablet/src/tablet.ts

the shortest useful read in the repo: the whole tablet as data