The main application running on the kiosks is a VueJS web app, installed as a PWA on the individual tablets. This pairs up to web-views running on a media server, which outputs to a large LED wall.

In this case there are multiple tablets on site, and they will be hot swapped out during the event.

During the actual event - the only visible UI on the tablets is the kiosk application, so we needed an easy way to pro-actively debug and check the state of all the devices without having to physically check each one by one.

For that we built up a quick fleet management system within the app. Each instance of the web app has a built in heartbeat that’s emitted via a web-socket to our management system, and exposes a few helper utility functions.

Instances send a heartbeat every 5 seconds with a payload that looked something like:

{
    msg: 'heartbeat',
    id: '{instance_id}',
    state: '{current_view}'
    meta: { ... }
}