MDMaurice Däppen.
01

Argus.

Dark command-center web app that aggregates open-source, near-real-time situational data into one layered, click-to-inspect 3D globe, fed by a live SSE data spine.

argus
Argus screenshot
Lines of code
~6.3k
Live data layers
5
Tracked entities
~20k
Vector map layers
8

Argus is a dark command-center web app that fuses open-source, near-real-time situational data into one interactive 3D globe. Aircraft, satellites, earthquakes, vessels, and global event signals all normalize into a single entity model and render as glowing, click-to-inspect markers over a vector hologram Earth. A Fastify backend polls every upstream source once and fans the result out to all clients, so the browser never touches a third-party API directly.

The backend is a single Fastify service that owns every upstream relationship. A generic interval poller fetches each source on its own budgeted cadence, normalizes the response into one Entity shape keyed by layer and category, and writes it into an in-memory registry that doubles as a pub/sub hub. One poll feeds every client. The registry stamps each layer with a monotonic revision and assembles a consolidated world snapshot on a fixed cadence, so a client request is always a cheap read of pre-built state and never triggers an external fetch. The server exposes both an SSE stream and a consolidated poll endpoint; the live client polls only the layers the operator has switched on, skips any layer whose revision has not changed, and frees a layer's data the instant it is toggled off.

The hardest rendering problem is satellites. SGP4 orbital propagation is the single heaviest CPU operation in the app, and running it on the render thread caused periodic frame stalls. Argus moves it into a dedicated Web Worker that builds SGP4 records once, then on each throttled tick propagates every satellite and posts back Earth-fixed positions as a transferable Float32Array, leaving the main thread to do nothing but a km-to-meter scale and a billboard assignment. Selecting a satellite spawns a separate worker request that samples one full orbital period at a single GMST, producing a frozen inertial ellipse that closes exactly on its first point. Satellites are propagated entirely client-side from TLEs cached server-side, so smooth orbital motion costs zero ongoing API calls.

Argus renders a vector Earth rather than photographic tiles, which removes the need for any Cesium ion token or imagery key. Coastlines, borders, rivers, lakes, topographic contours, and submarine cables ship as bundled GeoJSON and are lifted off the WGS84 ellipsoid to a precisely chosen 60 km float height that wins the depth test against the globe at planetary scale without z-fighting. The lift uses the closed-form geodetic surface normal instead of the iterative Cartographic inversion, verified identical to roughly a nanometer, which meaningfully cuts boot-time main-thread load when tens of thousands of vertices are repositioned. Plain polylines avoid ground classification entirely so the wireframe renders on software GPUs.

Resilience is designed in rather than bolted on. Every poller logs and swallows its own errors so one failing source can never take the server down, and the registry keeps the last good cache while flagging the failed layer in a health map streamed to clients. Sources degrade gracefully: OpenSky runs anonymously or lifts its rate limit with OAuth2 client credentials, AIS vessels stream live over WebSocket when a key is present or fall back to a labelled synthetic fleet on real shipping lanes, and GDELT falls back to a labelled synthetic signal when throttled. No data-source secret ever reaches the browser. Production ships as a Docker multi-stage build behind Caddy, which serves the built SPA and SSE-aware reverse-proxies the API.

PrevFlashieNext IDmint
All projects