Find your next open-source project

Search by name, purpose, or keyword — or paste a GitHub repository URL

dev-Armaan/satellites

Data

A browser app that replays a week of satellite passes over any place and matches them to public Earth imagery.

187
24
TypeScript
MIT
5 days old

What it does

Watched answers a simple question for any point on Earth: which imaging, weather, radar and crewed satellites passed over it in the last 7 days, and what public photos exist of the spot. Enter a city, landmark or coordinates, and the browser replays the past week of orbits for nearly 400 satellites, flags every pass whose field of view crossed the location, and matches archive imagery from Sentinel-2, Landsat, NASA weather products and Sentinel-1 radar. Results include a gallery, a pass timeline and a pass replay that reveals the photo line by line along the satellite's track.

Every pass receives one of four labels—Watched, Likely watched, Could have pointed here, or Passed overhead—so you can tell a confirmed image apart from a geometric possibility. Only the first label implies an actual photo. Try a place live or read the architecture notes for the matching and imagery pipeline.

Run it locally

You need Node 22.12+, 24 or 26+ and npm. The app works without any backend configuration:

git clone https://github.com/dev-Armaan/satellites.git
cd satellites
npm install
npm run dev

The dev server serves the app at http://localhost:5173. Without Supabase, nothing is recorded, the landing-page lookup counter is hidden, and share links encode the pass in the URL instead of using short /s/ links. To enable persistent lookups and shares, create a Supabase project, apply its migrations, copy .env.example to .env.local, and set VITE_SUPABASE_URL and VITE_SUPABASE_PUBLISHABLE_KEY. Never put a secret key in a VITE_ variable. Use npx vercel dev if you also need the share-card and share-page functions in api/.

Run npm test for engine, imagery and UI tests, and npm run test:backend for the API functions. The full deployment path, including the GitHub Action that refreshes orbital elements, is in the self-hosting guide.

Accuracy and limits

Passes are searched only for satellites whose instruments the app knows about; the rest of the roughly 17,000-object catalog is drawn on the globe but not queried. Military and intelligence satellites are mostly absent from public catalogs. In the displayed photos, a pixel is at best 10 m across, and Landsat 8/9 can be sharpened with its 15 m panchromatic band—well above the scale of a person. Public element sets are accurate to about a kilometre when issued and drift afterward, so pass times can be seconds off. Archives publish hours to days after capture, so the newest passes may lack a photo. Sentinel-1 radar images are shown at 20 m and are not matched on the same footing as optical imagery.

The orbit math and photo toning run in Web Workers in the browser. The site stores lookups, shares and usage counters in Supabase; exact coordinates, IP addresses and cookies are not kept in the database, and raw events are deleted after 48 hours. Most place-name searches are resolved from a bundled list, while unresolved searches go to Open-Meteo, Photon and Nominatim. Geocoding and imagery providers therefore see the queried point and surrounding area. Code is MIT-licensed, but imagery, orbital data, textures and fonts retain their own terms, and forks should not present themselves as the official site.

HotRepo's take

Watched entered the TypeScript new-project list on 13 November 2026, with 48 stars gained in the reported 24-hour window and 176 stars at the snapshot. The collected hourly curve over the preceding days shows steady accumulation from 101 to 176 rather than a single spike. The source is a full application, not a landing page: the pass-search engine, GPU satellite rendering, archive matching, share backend and Supabase migrations are all part of the repository. The most useful engineering detail is the claim that a seven-day search across 394 satellites completes in about 1.3 s on one Node thread, with browsers splitting the work across Web Workers. That statement comes from the project's own test case, so it describes the engine under those conditions rather than a general benchmark.

Written by AI from the project's README, updated . The project's own docs are the source of truth.

You might also like

  1. bilawalsidhu/gods-eye-viewA browser globe that overlays live aircraft, ships, satellites, cameras and quakes on real maps for public-data explorers.JavaScript60,211