Flight Tracker icon

Flight Tracker

Live

macOS background service that monitors flights within 2 nautical miles of Vancouver, WA, rotating them on an AWTRIX smart pixel clock and archiving to GitHub Pages.

AWTRIX pixel clock displaying flight

The pitch

I live under the flight path into PDX. Every few minutes, a plane passes overhead. I wanted to know: what is it? Where's it going? How high?

Flight Tracker is a macOS service that runs 24/7 on a home server, watches the local airspace, and displays current flights on a physical pixel clock. It also archives everything to a web history.

Specs

Runtime Node.js background service, macOS LaunchAgent
Data Source dump1090 SDR receiver (RTL-SDR) over local network
Enrichment OpenSky Network API for flight numbers, routes, aircraft type
Display AWTRIX 3 32x8 pixel clock via local MQTT
Archive GitHub Pages with Actions deployment every 5 minutes
Range 2 nautical miles from Vancouver, WA (configurable)

What mattered

The SDR receiver. A cheap RTL-SDR dongle ($30) plugged into a Raspberry Pi runs dump1090, decoding ADS-B signals from aircraft. It exposes a local JSON API. No internet required for detection, only for enrichment.

The AWTRIX display. A 32x8 pixel matrix mounted on the wall cycles through nearby flights: callsign → altitude → speed. Custom icons for different aircraft types. Visible across the room, glanceable like a clock.

Rotating display logic. If multiple flights are in range, it rotates every 10 seconds. If nothing's close, it shows the time. Prioritizes by proximity, not just signal strength. A flight directly overhead gets featured even if it's farther away laterally.

GitHub Pages as a database. Every detected flight gets logged to a JSON file, committed by a GitHub Action, and deployed to Pages. The history is a static site. No server costs, no database, git history as audit trail.

macOS LaunchAgent reliability. The service restarts on crash, on boot, and after sleep. Logs to local files with rotation. Has been running for months without manual intervention. The only failure mode is power outage (and it auto-recovers).

The best home automation is ambient and requires zero interaction.