✈️SkyWatch: Real-Time Aircraft Tracking Display
My partner loves planes, and from our apartment in Russian Hill we have a front-row seat to SFO and Oakland air traffic. I built SkyWatch to show which planes are visible overhead at any given moment—no need to pull out a phone or search flight tracking apps.
It's a Raspberry Pi with a 7.5-inch e-ink screen that displays the closest aircraft in real-time: flight number, airline, altitude, and distance. Updates every minute.
🔧Hardware
Total cost: ~$100–120 for all components.
- Raspberry Pi 4 (2GB RAM minimum, 4GB or 8GB recommended) — ~$35–55
- Waveshare 7.5-inch tri-color e-Paper HAT (800×480 pixels, black/white/red) — ~$60–70
- MicroSD card (16GB minimum, Class 10 or better) — ~$8–12
- USB-C power supply (5V/3A for Raspberry Pi 4) — ~$8–10
- Optional: Case or frame for mounting — varies
💻Tech Stack
I built this with Claude's help—Claude picked the tech stack and wrote the vast majority of the code. I provided the vision and made the architectural decisions.
- Python 3.7+ — Core language
- OpenSky Network API — Free ADS-B aircraft tracking data
- Pillow (PIL) — Image rendering for e-ink display
- Flask — Web preview mode for development/testing
⚙️How It Works
- Data collection: Queries OpenSky Network API every 60 seconds for aircraft within 15 miles
- Filtering: Removes planes outside field of view (330° to 90°, northwest to east) and above 20,000 feet
- Visibility ranking: Scores aircraft by altitude + distance to determine which are most visible to the naked eye
- Data enrichment: Looks up airline names from a local database (62 airlines)
- Display: Renders closest aircraft with flight number, airline, altitude, and distance. Closest aircraft gets a red accent bar.
✨Key Features
- Smart refresh: E-ink display only updates when aircraft count changes or every 10 minutes minimum (preserves screen lifespan)
- Empty state: When no planes are visible, displays random aviation facts
- Web preview mode: Run with
--webflag to test in browser before deploying to hardware - Error handling: Falls back to cached data for 5 minutes if API is down
📚Documentation
The project includes 13 detailed guides covering everything from initial setup to troubleshooting WiFi issues and emergency recovery. Setup time is about 1.5–2 hours including hardware assembly.
💭Reflections
It was so fun to develop a little device that solved a problem that I (but very few others) had. Claude helped me navigate a dozen corners that I would have struggled with myself.
I spend a lot of time creating digital products—it was fun to feel like this was a real device. It's stopped being a "project" and become an object—like a clock or lamp.