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.