Web-based app launcher for all SmartLab production services running on appserv1.
Single-page cinematic launcher styled after the HAL 9000 interface aesthetic from 2001: A Space Odyssey + Ron Cobb Semiotic Standard iconography. Each app gets a tall monolith-proportioned button with a 3-letter code, Cobb-bordered glyph, and live IP:port readout.
- Color field: Flat saturated panel per app (no gradients)
- Typography: Monospace bold, wide letter-spacing — Eurostile Bold Extended aesthetic
- Glyph: Square, W÷3 of button width, inset 14px left + 14px bottom, Cobb octagonal border
- Codes: 3-letter operational shorthand (STB, CDK, ...)
- Background:
#07070F— near-black field with top/bottom chrome bars
- Host: appserv1 — 192.168.4.148 (Docker app host)
- Served by: nginx :80 (reverse proxy)
- Pattern: Static HTML/CSS/JS — no backend required
- Production URL:
http://192.168.4.148/
SmartLabLauncher is a static site served at nginx root (/):
- Local development:
C:\Users\john_\dev\SmartLabLauncher\ - Production path:
/home/john/smartlab/launcher/on appserv1 - nginx volume mount:
./launcher:/usr/share/nginx/launcher:ro(read-only) - Served at:
http://192.168.4.148/(root path)
- Edit locally on dev PC (
C:\Users\john_\dev\SmartLabLauncher\) - Test changes using local HTTP server (port 7700)
- Commit & push to GitHub (
johnmknight/SmartLabLauncher) - Deploy to production via SCP:
scp index.html dragon.obj john@192.168.4.148:/home/john/smartlab/launcher/
- Changes are live immediately (nginx serves static files, no restart needed)
SmartLabLauncher loads app data dynamically from the HomeOps launcher_manifest
add-in (HomeOps is the SmartLab backend framework on appserv1):
- API endpoint:
http://192.168.4.148:8086/addins/launcher_manifest/api/apps(cross-origin from the launcher; HomeOps sendsAccess-Control-Allow-Origin: *) - Returns:
{ app_server_url, apps[] }— codes, names, colors, ports, routes, glyphs - Container counts:
…/api/containers(via the Docker socket HomeOps mounts) - Buttons generated client-side from the API response (no hardcoded apps)
- Config mode (
[ CFG ]button or Shift+C) does add/move/toggle/delete via the add-in's CRUD endpoints — a capability CommandDeck never had.
Note: This replaced CommandDeck's
/deck/api/apps. CommandDeck was decommissioned 2026-05-28; the manifest now lives in HomeOps and is editable.
Dynamic — loaded from the HomeOps launcher_manifest add-in. Current apps:
| Code | App | Port | Color | Route |
|---|---|---|---|---|
| CHM | CargoHoldManager | :8091 | #1A42CC cobalt |
/cargo/ |
| AO | ArtemisOps | :8085 | #1A5C8A blue |
/artemis/ |
| MSO | MarchogSystemsOps | :8082 | #8A1A1A red |
/marchog/ |
| LDL | LEDLibris | :8088 | #F59E0B amber |
/libris/ |
A second, standalone launcher page optimised for the TouchOps touch panel (DISPLAY3, the ~1168×400 wide strip — see the TouchOps left button bar).
- URL:
http://192.168.4.148/touchops.html— add this as a TouchOps tab. - Same infrastructure: reads the same HomeOps
launcher_manifestadd-in (/api/apps,/api/containers, and the CFG CRUD endpoints). Single source of truth withindex.html; no separate manifest. - Strip-optimised layout: no CLI cinematic boot (instant fade-in); thin top
chrome only (title · container count · UTC clock ·
[ CFG ]), no bottom bar. Buttons fill the strip via a fluid grid that adapts to app count — a single tall row for ≤5 apps, 2 rows above that (6 apps → 2×3). Tiles use container-query units so the code/glyph scale to the tile; the page fills the viewport fluidly (no fixed-px box) so there is zero overflow at any size. - Retained: flat per-app colour, Orbitron code, app name, Cobb-octagon glyph, Three.js wireframe backgrounds, status dots, hover/glow/press, and the full CFG config mode (add/move/toggle/delete).
index.html (the cinematic full-screen launcher) is unchanged.
Static site — HTML + CSS + vanilla JS. No framework, no build step.
Served directly from nginx on appserv1. Two pages: index.html (cinematic,
nginx root /) and touchops.html (touch-panel strip).
- Local:
C:\Users\john_\dev\SmartLabLauncher - GitHub:
https://github.com/johnmknight/SmartLabLauncher