A live map of everything crossing Puget Sound — aircraft over SeaTac's airspace and Washington State Ferries on the water — in one frame, moving in real time.
A test app built with Fable 5. A small brief — "a real-time flight + ferry map" — taken end to end: streaming pipeline, geofencing, dead-reckoned motion, and a dark map UI, in one pass with Fable 5.
go run ./cmd/server # then open http://localhost:8080The default feed is synthetic — no keys, offline, alive the moment it boots (real ferry routes, aircraft transiting SeaTac). Go live with one flag:
go run ./cmd/server -source live # real aircraft (OpenSky, anonymous)
go run ./cmd/server -source live -wsf-key YOURKEY # + real Washington State FerriesTwo very different real-time feeds are fanned into one Go pipeline, normalized to a single schema, geofenced to the Sound, and streamed to the browser over SSE.
OpenSky (ADS-B) ─┐
├─▶ fan-in ─▶ geofence ─▶ world state ─▶ SSE ─▶ Leaflet map
WSDOT ferries ─┘ (TTL evict) (dead-reckoned)
- One schema, many sources — everything past the feed layer only sees a
Vehicle; adding a source is just anotherFeed. - One writer, no races — feeds fan into a single channel drained by one goroutine that owns the world map.
- Motion is felt, not blipped — the browser dead-reckons each vehicle at 60fps from its heading and speed, easing onto each new fix.
- No Go dependencies — standard library only.
cmd/server/ entrypoint + flags
internal/model/ Vehicle — the one schema every feed normalizes into
internal/feed/ Feed interface + opensky / wsf / demo sources
internal/pipeline/ fan-in, geofence, TTL world-state, SSE broadcast
internal/server/ static assets + /api/state + /events (SSE)
web/ Leaflet dark map — glowing icons, comet-tail wakes, HUD
Data sources are free: OpenSky works anonymously; a WSDOT ferries access code comes from https://wsdot.wa.gov/traffic/api/.
Go 1.26 · Leaflet · built with Fable 5.
