open source · real-time, runs locally
Live data globe
- Built for:
- One screen that answers “what’s happening on Earth right now” — the planes, the ships, the quakes, the satellites overhead — without a tab full of separate dashboards.
- Not built for:
- A hosted service with a login. Graticule is a local-first desktop app; the data is public and live, but the globe runs on your own machine, not a server farm.
A dark Earth on a starfield, and on it: every aircraft an open ADS-B feed can see, the ships that broadcast their position, the last three days of earthquakes, the satellites passing overhead, the weather radar. Sixteen public feeds, normalized into one live globe you can spin. It’s the only piece of my work that’s mostly front end — and it’s public on GitHub, so it can be checked.

The idea
All of this data is public and free — aircraft transponders, ship AIS, the USGS earthquake feed, NORAD’s satellite catalog, NOAA weather. What doesn’t exist is one calm place to see it together. The aviation sites show planes; the quake sites show quakes; nobody shows you the planet.
Graticule is that one place. The hard part isn’t any single feed — it’s holding sixteen of them at once, on a globe, without the thing turning into noise. Twelve thousand aircraft is a lot of dots. The work is making that legible.
Decisions
local-first
It’s a desktop app, not a website. A FastAPI backend runs sixteen async feed loops on your machine and serves the globe to a local window; nothing is hosted, no account, no public IP. The data comes from the open internet, but the thing that assembles it is yours and runs offline of any service I’d have to keep alive.
orbits on the client
Satellites aren’t streamed position-by-position — that would be a firehose. The backend sends each satellite’s orbital elements once, and the browser propagates the actual positions forward in real time from the math. Hundreds of satellites move smoothly while the network stays quiet.
make it legible
Twelve thousand aircraft can’t all be full icons. Entities fade in and out by distance, cluster when they’re dense, and drop to dots when you’re zoomed out — importance gating decides what earns pixels at any altitude. The point of the engineering is that a whole-world view stays readable instead of becoming a smear.
System
Many feeds fan into one in-memory store; the store fans out to the browser over a single WebSocket; the browser renders. The backend never blocks on a slow feed — each runs its own loop and writes into the shared state on its own clock.
| Layer | Implementation | Purpose |
|---|---|---|
| Globe | CesiumJS 1.121 | 3D Earth · entity rendering · LOD |
| Satellites | satellite-js | Client-side orbit propagation from TLEs |
| Backend | FastAPI · async + WebSocket | 16 feed loops · in-memory state · fan-out |
| Shell | pywebview · uv | Local desktop window · no hosting |
| Feeds | OpenSky · USGS · NOAA · Celestrak · FAA | 16 public REST / WS sources |
Where it stands
A two-day sprint, and honest about it. It runs — point it at the feeds and the globe fills with live planes, satellites, and quakes; the figure above is a real frame from a real launch. It’s public on GitHub and builds cleanly. What it isn’t: deployed anywhere you can click, or covered by tests. It’s the front-end-and-real-time-systems counterweight to a portfolio that otherwise lives in the backend — a polished thing that draws twelve thousand moving objects without falling over, kept exactly as honest as that.
Acknowledgments
Graticule stands on CesiumJS for the Earth, satellite-js for orbital math, and the open feeds that make it possible — OpenSky, USGS, NOAA, NASA, Celestrak, the FAA — every one of them public and free. Source is on GitHub.
← Index