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 --web flag 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.