2.0 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
It builds as part of the serving stack:
cd .. # serving/
docker compose build kiosk
docker compose up -d
# main nginx serves it at http://${SERVER_IP}/kiosk/ (kiosk_url default)
The container publishes on 127.0.0.1:${KIOSK_APP_PORT:-8088}; the host-network
main nginx proxies /kiosk/ to it. To point the diskless kiosk here, keep the
Packer kiosk_url=http://boot.fleet.lab/kiosk/ default (resolved to the serving
host by the stack's dnsmasq).
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.