My girlfriend is obsessed with Flightradar24. Any time you can hear a plane fly overhead, she pulls out her phone to check where it came from and where its going. That gave me an idea: what if I built a little display that could sit on her desk and show whatever flight was overhead?
This project took me about one and a half months of on-and-off work to complete. I'm no software developer. Any script or code I write feels like I'm bashing my head into a wall repeatedly. I'm then met with elation upon breaking through, only to discover another wall minutes later. I won't lie to you, most of what I wrote was vibe-coding. I have mixed feelings about AI overall, but I can't deny its usefulness in helping me write code. I liken it to AI being the carpenter who gives me, the proverbial toddler, the wooden blocks to build a tower with. It generates a piece of code that I plug into the overarching structure of my script.
I started simple: I wrote a script to use the opensky-network API to scan for flights within a 10 km radius of a given set of coordinates. I also looked into setting up a PiAware to have my own flight tracking receiver (https://www.flightaware.com/adsb/piaware/). That looked cool, but it didn't solve the main challenge: the route information for the retrieved flight codes. Getting reliable data for this seems to requires paid APIs. I'm not against that per se, but I instead resorted to scraping websites for the information. That proved the most challenging part of the project, and it's something I constantly improved while assembling the other building blocks of the project as I scraped different types of flights (commercial, small independent ones, and ones that requested not to be tracked). I also tinkered with using proxies to scrape data directly in the script, but this would have again come with a cost, so I decided to put my device behind a VPN service I was already paying for).
Next came designing a layout for the script's data to display to. For this I settled on PyQt5 and used Qt Designer to create an initial layout. It worked well enough, but it looked a little boring. I then dusted off Aseprite and created a pixel-art landscape to serve as the background. At first I had the clouds bobbing up and down, but I decided the parallax effect was ultimately better. That was the least painful part of the process, and I'm really happy with how it turned out - no AI used there.
With all the pieces in place and the script running on my MacBook, it was time to build the actual display. I chose a Raspberry Pi 5 with 4 GB of RAM hooked up to a 5-inch, 800 x 480 pixel display. In hindsight, the hardware was probably overkill. This was my first time setting up and working with a Pi, but on that front everything was relatively smooth. I had it hooked up to an IP KVM to set up and test before connecting it to the actual display. I decided on the display before I designed my layout and artwork so I could build it specifically to match the resolution. The main headache that came with this step was getting a reliable, auto-starting VPN connection on the Pi, but I ultimately got a WireGuard config running smoothly after a bit of troubleshooting. Countless more changes to the scraping behavior later, and I had a finished product.
I'm extremely happy with how the end result turned out, and it was really well received as a gift too :) This project was a great exploration of many technical concepts I hadn't yet tinkered with (web scraping, the Pi, proxies/VPNs, a "UI" for a script), and I'm proud of it as a synthesis of scripting, pixel art, and hardware. I hope that a few years down the line I'll still be proud of the end product but look back at the technical details and see how I've grown since then.
Thanks for reading! Here's a link back home.