A satellite tracker, just because
Not every project here starts from a need. This one started from browsing “cool projects about space” and landing on “something that visually looks cool” — which turned into a live 3D tracker for every operational satellite CelesTrak publishes: somewhere around 12,000 objects, from Starlink and OneWeb down to weather satellites and tracked debris, rendered as points orbiting a day/night-shaded Earth.
The shape of it: a small backend refreshes orbital data from CelesTrak hourly and caches it, and the frontend runs the actual orbit math (SGP4 propagation) in a background thread so the page stays smooth while every point moves in real time. Click one and it shows altitude, speed, and position; filter by constellation; search by name.
A few real bugs came out of building it, which is usually the more honest part of any project writeup:
- Points far from the camera were shrinking below a single pixel and
becoming unclickable — three.js’s
sizeAttenuationwas working exactly as designed for realism, just not as intended for a UI you need to interact with. - One satellite group failing to fetch used to blank out the entire catalog instead of just that group — CelesTrak rate-limits its bigger exports separately from smaller ones, so a single throttled group was a near-certainty, not an edge case. Fixed to degrade one group at a time instead of all-or-nothing.
- The TLS certificate for the deployment stalled mid-issuance for several minutes despite the DNS record it was checking for having already propagated — a stuck validation controller, cleared by a restart.
It has no persistent storage on purpose — the whole cache rebuilds from CelesTrak on every restart. For a dataset that’s fully public and re-fetchable in minutes, that’s a better trade than babysitting a volume for data that was never precious to begin with.