I developed a LAN-only pair of tools to control info-beamer (classic, or whatever the old license was called), because we have spotty LAN and can’t guarantee Internet access. Unfortunately, this gives up the really nice tooling of info-beamer hosted, but it has been good enough to get through a once-yearly convention.
We only had 3 displays running, and your application is a couple orders of magnitude larger. In theory, it should scale OK, but there are probably some pain points that would be exposed.
You run beamin-target on each Raspberry PI (or development computer) which is responsible for starting up info-beamer. It then runs a really basic web server that beamin-controller pushes updates to. The update is just a zipped copy of your application which the target unzips on top of the running node.
Because info-beamer is really clever about how file-updates cause data reloads, this actually ends up being pretty graceful. For example, if you have one laptop with a reliable internet connection, that laptop can update its copy of the node with new data, then perform
beamin --push schedule which could be configured to only push a new schedule.json file and cause the displays to refresh only that data.
The target also supports running python scripts as “services” for tasks like building JSON files for info-beamer to consume.