I wanted a simple tracker for recent Starlink launches. Somewhere I could check when a train would be visible from my location without making an account or closing five ad overlays. So I built Starspots, a companion to Sunspots. Same idea, 3D globe, live data, no accounts.
How It Works
Orbital data comes from CelesTrak (NORAD TLEs for every Starlink satellite) and launch info from Launch Library 2. The app matches TLEs to launches by epoch proximity and orbital element clustering (inclination + RAAN within 0.5 degrees), then groups them into deployment trains. Trains from the past 7 days get color coded, older ones fade to gray.
Pass Prediction
A Web Worker runs SGP4 propagation for every satellite in every train, stepping through 15-second intervals over a 5-day window. A satellite being above your horizon isn’t enough though, it also needs to be sunlit while you’re in darkness. So it computes astronomical twilight windows via SunCalc and checks whether each satellite is in Earth’s shadow. You get predictions that match what you can actually see with your eyes.
Reusing the Dither
Same postprocessing stack as Sunspots: bloom, chromatic aberration, vignette, ACES filmic tone mapping, and the custom Bayer dither from the Sunspots post. The luminance-based strength keeps the dither invisible in the dark space background and only textures the Earth surface and satellite trails.
Mobile & Haptics
Works on phones. The UI collapses into tabs and the time scrubber is touch-friendly. Same web-haptics integration, detent taps when scrubbing through days and feedback on train selection.
Links
Live at starspots.asynchronous.win, code on Github.