WallpaperMachine
The wallpapers you love. A new home on your Mac.
Every plane our own antenna hears over Seattle and Renton, live on a map: airlines, routes, photos and altitude, as they fly.
Translation pending
LifestyleJavaScript · PythonGitHub @spencerbdavisOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Self-hosted ADS-B flight tracker PWA: RTL-SDR + readsb, dead-reckoned planes, to-scale silhouettes, faux-3D SEA/BFI/RNT airports
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗A self-hosted ADS-B flight tracker for the skies above Renton, WA, built as an installable phone app. A $30 software-defined radio on a windowsill hears the aircraft overhead, and a small web app turns that into a live map with real aircraft silhouettes, airline logos, routes and a faux-3D view of SEA, Boeing Field and Renton airports.
Live: sky.spenc.ee (Add to Home Screen on a phone for the app). The public site is served through a Cloudflare tunnel from a filtered copy of the data that leaves out anything locating the receiver; see nginx.conf. This repo is the whole project.
1090 MHz +--------------------------- docker compose ---------------------------+
antenna --> RTL-SDR | ultrafeeder (readsb + tar1090) sky-api (stdlib Python, SQLite) |
| /data/aircraft.json /api/ac/<hex> lookups + log |
| traces, receiver.json /api/fill community gaps |
| \ / |
| +-----> sky-web (nginx) <--+ |
+----------------------------|---------------------------------------- +
v
web/ PWA (vanilla JS + Leaflet), service worker
sky-api looks aircraft up on adsbdb.com only when someone taps a plane, and tops up what the antenna cannot hear (parked and taxiing aircraft at SEA/BFI behind terrain, traffic beyond range) from adsb.fi, adsb.lol and airplanes.live. Those feeds are read-only; nothing from the receiver is sent to them.
Dead reckoning. The receiver reports a position about once a second per aircraft. Between fixes the app advances each marker along its track at its ground speed on every animation frame, then blends any disagreement with the next real fix in over a short window, so planes glide instead of jumping.
Route trust. Callsign-to-route databases are wrong often, because one flight number flies several legs per day. sky-api computes the cross-track distance from the aircraft to the origin-destination great circle and marks the route "trusted" only within ROUTE_SLACK_NM (120 nm). Untrusted routes are not shown.
Silhouettes. tools/build_shapes.py crops and normalizes the outlines in shapes-src/ (one common scale, about 1 unit per meter) into web/shapes/, with an index of sizes, type aliases and ADS-B emitter-category fallbacks. The app scales each icon by real aircraft size, and at airport zoom draws it at true size.
Faux-3D buildings. tools/build_airports.py pulls aerodrome features from Overpass and writes a compact web/airports.json (coordinates rounded to about 1 m). The app draws buildings as extruded footprints with a shifted roof layer and shadow, with the walls shaded by facing. Detail arrives with zoom: runways always, taxiways, then buildings.
Service worker. web/sw.js precaches the app shell (versioned, so a release replaces the old cache) and keeps a size-capped cache of map tiles. Live data (/data/, /api/) always goes to the network.
.env next to docker-compose.yml (see .env.example):
LAT=47.48
LON=-122.21
Use your real receiver location here; it stays on your machine (.env is git-ignored). The app also reads it at runtime from receiver.json.docker compose up -d, then open http://<host>:8504/. The stock tar1090 UI is at /classic/.~/adsb on a server: SKY_HOST=user@host ./deploy.sh.python3 tools/build_airports.py (stdlib only) and python3 tools/build_shapes.py (needs cairosvg and Pillow).Sightings are stored in state/sky.db (SQLite).
web/airports.jsonweb/vendor/leaflet/GPL-3.0, see LICENSE. The aircraft silhouettes are derived from GPL-3.0 work, which sets the license for the whole repo.