All Things Spatial
ATS Labs · Esri SDK Showcase · Calcite · experimental

ATS Orbit Watch

Live satellite tracking — SGP4 propagation in the browser, no server required.

What it is

ATS Orbit Watch tracks satellites live, entirely in the browser. CelesTrak GP (OMM) orbital elements are propagated client-side with satellite.js — the standard SGP4/SDP4 implementation — and rendered on the ArcGIS Maps SDK, with every position updating on a two-second tick. Five constellations are a click apart: Space Stations, Brightest, GPS, Weather, and Geostationary. Select any satellite and it gains a ground track spanning ±50 minutes, a visibility footprint sized from its live altitude, and an optional follow mode that keeps the camera on it as it moves.

The architecture is the distinctive part: there is no server, no websocket, and no stream — just published orbital elements and mathematics. The browser does the orbital mechanics itself, which means the app costs nothing to run, scales to any number of viewers as static files, and keeps working from bundled element snapshots even if CelesTrak is briefly unreachable (live fetches are cached for fifteen minutes).

It suits satellite operators' outreach pages, ground-station and antenna-pass planning conversations, STEM classrooms and museum installations — and, for ATS prospects, it is the cleanest possible demonstration of real-time computation delivered with zero infrastructure.

The experience

Within seconds of load, satellites are drifting across the dark map — the Space Stations group loads first, with ISS (ZARYA) leading the list. The shell is mission-control dark with a glass detail card, and the interaction model is deliberately simple:

The data — where it comes from

One live API, one bundled fallback, one anonymous basemap — all free.

SourceWhat it providesRefreshCostAttribution
CelesTrak GP API (gp.php, FORMAT=json) — groups: stations, visual, gps-ops, weather, geoCurrent OMM orbital elements for the five constellationsElements refreshed by CelesTrak through the day; app caches each group 15 minFree (public)Data courtesy of CelesTrak / Dr. T.S. Kelso
Bundled element snapshots (tle_stations.json, tle_visual.json)Offline fallback for the Stations and Brightest groups if CelesTrak is unreachableStatic, refreshed at build timeFreeCelesTrak
Esri dark-gray vector basemap (anonymous)Dark world basemap under the constellationVendor-managedFree (no API key)Esri attribution renders in-map automatically

How it was assembled

The application is a fully static single-page app — no backend, no database, no server-side rendering. The stack: TypeScript, ArcGIS Maps SDK for JavaScript 5.0.x, Calcite Design System 5.0.x, and Vite 8.

Module map — the codebase is small and deliberate; each file owns one concern:

Key engineering decisions