Files
diskless-workstation/serving/kiosk-app/README.md
T

2.6 KiB

Fleet Kiosk App

A cyber sci-fi spaceship monitoring & control terminal — the page the diskless kiosk (weston + Chromium) loads at boot. Replaces the old single static serving/http/kiosk/index.html test page.

Built with Svelte 5 + Tailwind CSS v4 + Vite, served as a static bundle from its own nginx, and reverse-proxied at /kiosk/ by the main serving nginx (../http/default.conf). Fully self-contained — no CDNs or web fonts — so it renders on the air-gapped boot LAN (the stack's dnsmasq sinkholes external call-home).

Pages

Top navbar with five views, each with dummy telemetry:

  • BRIDGE — overview tiles, systems status, subsystem load, event log
  • REACTOR — core output/temp/containment, power distribution, fuel cells
  • NAVIGATION — heading/velocity, tactical radar plot, flight plan, FTL drive
  • LIFE SUPPORT — atmosphere mix, per-deck environment, recyclers
  • COMMS — channels, signal bars, message traffic

Routing is hash-based (#/power, #/nav, …) so deep links stay client-side and the proxy needs no SPA-fallback rewrite. A shared 1 Hz clock and small random-walk "jitter" helpers make the static data feel live.

Develop

npm install
npm run dev      # http://localhost:5173/kiosk/

Build the container

This is an independent project with its own CI. The build is standalone:

docker build -t fleet-kiosk:dev .
docker run --rm -p 8088:80 fleet-kiosk:dev   # http://localhost:8088/

CI (.gitea/workflows/ci.yaml) builds + pushes git.bitasylum.org/audiobuzz/fleet-kiosk (branch-aware tags; :latest on main). The fleet serving stack consumes the published image — it sets KIOSK_IMAGE/KIOSK_VERSION in its .env and the kiosk compose service pulls it (publishing on 127.0.0.1:${KIOSK_APP_PORT:-8088}, proxied at /kiosk/). For local serving-stack dev you can instead uncomment build: ./kiosk-app on that service. To point the diskless kiosk here, keep the Packer kiosk_url=http://boot.fleet.lab/kiosk/ default (resolved by the stack's dnsmasq).

Relationship to the fleet repo

Consumed by diskless-workstation as a git submodule at serving/kiosk-app/. This repo owns the app + its image; the OS-side kiosk runtime (weston, Chromium lockdown, kiosk-session, the systemd unit) lives in that parent repo under files/kiosk/. See CLAUDE.md for the integration contracts.

Replacing the dummy data

All fictional telemetry lives in src/lib/data.js. A future runtime agent could swap these constants for a fetch() to a fleet API; the components only read from that module.