Real-time kanban flight status display for defense aviation. Mounted on kiosk TVs across the hangar, pilot lounge, flight ops, and classroom. Zero interaction required — it just runs.
Mounted on TVs across four locations. No logins, no onboarding, no user manual. If it needs explanation, it's broken.
Flight ops, maintenance, safety, and the front office all read the same board. No more radio calls to ask what's happening.
Glance up, know everything. UP NEXT means move. STANDBY means relax. No spreadsheets. No walking to ops.
Decoded METAR, compass rose, 8-hour TAF strip — readable from 30 feet. Go/no-go calls without pulling out a phone.
Flights migrate automatically. Weather refreshes live. Notifications push safety alerts. Zero maintenance overhead.
Hangar, pilot lounge, flight ops, classroom — same data, same second. One URL. Deploy once, runs everywhere.
--fb-gap universal buffer at every nesting level. Kanban cells are 8-row × 2-column sub-grids. Tiles size via grid-row: span — zero JS layout math.buildAndShowPages() orchestrates all 3 columns. Column with most pages sets the 30s tick. paginateTiles() auto-selects single vs dual column mode per page.animateTurn() staggers tiles out bottom-first (60ms apart), fires applyPendingMoves() in the blank, staggers new tiles in. Headers stay via z-index.claimNotifyRows(col, N, 'top'|'bottom') makes notifications real grid children. _availRows recalculates, forcePageRebuild() re-renders immediately.generateWeather() builds a 24hr model. refreshWeather() mutates live data every 20 sim minutes with full VFR/MVFR/IFR/LIFR recalc. METAR string built from live state.WeakMap tile refs for O(1) lookup. DOM swaps only on 30s page turns. Pill/countdown text updates in-place. Per-column selective animation — static columns untouched.cancelAnimationFrame on unload.Weather. Flights. Done.
This project proved something I keep coming back to: the hardest part of building a data system isn't the data or the system — it's knowing what question the room is actually asking. Every technical decision on this board — the grid architecture, the paging engine, the notification push system — exists because someone in a pilot lounge needed an answer they could read from across the room without touching anything.
That's the pattern. Figure out what people actually need, build the ontology to serve it, and then get out of the way. The board runs itself. That's the point.