An air traffic map: you pick a point and a radius, and the app pulls aircraft from FlightRadar24 every second, drawing them on the map along with their trails, heading and altitude.
Besides position, each aircraft gets a range and bearing from the chosen point — haversine distance and bearing computed directly, without a geo library. The project grew out of the simple question of what is flying overhead right now.
What I did
An Express proxy in front of FlightRadar24, so the client never calls the external API directly and does not run into CORS or rate limits.
Range (haversine) and bearing computed in-house rather than pulled from a geo library.
Markers, popups and trails on MapLibre GL: layers are created and torn down along each aircraft's lifecycle, with no leaks or duplicated sources.
Migrated from Mapbox to MapLibre with open OpenFreeMap tiles, removing the third-party account whose quota once made the map fail silently.
Server-side response cache: everyone watching the same area is served by a single upstream request, and if the source fails the last known aircraft list is returned instead of an empty one.
A self-rescheduling polling loop that stops cleanly when the search point changes — otherwise timers pile up and requests go out in bursts.
Docker Compose for client and server, deployment through GitHub Actions.
Interface
Live aircraft on a MapLibre map: callsigns, trails and the search radius circle around the chosen point