Inspiration

A plane passing directly overhead is one of the few genuinely free spectacles left, and almost nobody ever sees one properly. You hear it, you look up, and by then it's gone — or it was never going to pass over you at all, only near you.

Every flight tracker on the App Store answers "what is that plane?". Not one of them answers the question you actually have when you're standing outside: is one coming over me, and where do I need to be?

What it does

Underplane scans nearby aircraft, predicts where each one will cross, estimates whether you can get there in time, and guides you to the best intercept point.

Most of the time the honest answer is "stand still" — and the app says so, with a countdown on your lock screen via a Live Activity. When you can improve your position, it gives you a walking or driving route to the intercept point and a margin you can trust. When the aircraft passes, it grades the catch on how close to directly overhead you actually stood: PERFECT at 0m, down through Good.

Catches land in a flight log and a trophy case of 14 badges, a leaderboard ranks everyone who has stood under one, and tapping any flight gives you its route context.

Nothing about the grade is decorative. It's computed from your real position against the aircraft's real track — it measures how well you positioned yourself.

How we built it

  • iOS client (SwiftUI + MapKit): live map, candidate cards, route preview, walking/driving start flow, catch tracking, animations, and social/stats screens. ActivityKit drives the lock-screen countdown.
  • Backend (Node + TypeScript + Express on Fly.io): pulls live aircraft state, projects tracks forward, scores catchability, and returns the best candidates and map markers.
  • Data sources: OpenSky for live aircraft, adsbdb (and optional AeroAPI) for route metadata.
  • Core logic: a travel-time + margin model, horizon/radius tuning, hysteresis to stop the target flipping, and safety checks before any navigation is committed.
  • RevenueCat powers the subscription and paywall: the free tier caps catches, Plus removes the cap and unlocks alerts, stats and the leaderboard.

Airlines are identified with no lookup at all — a callsign's first three letters are the ICAO operator code, so SIA011 resolves to Singapore Airlines offline, instantly, with no API key.

Challenges we ran into

  • Catchability is heavily constrained by geometry and lead time, so many places and times genuinely have no reachable plane. The app had to be willing to say "nothing right now" instead of inventing a target.
  • Frequent polling caused UX instability — targets and cards changing underneath you, the camera re-zooming — before we took proper ownership of UI state.
  • Cheap server-side estimates versus real client routing produced misleading early numbers.
  • Some mathematically "close" points were not actually walkable: airport perimeters and fences are real, and the map doesn't know that on its own.
  • Moving from mock data to live data exposed real-world intermittency and a long tail of edge cases.

Accomplishments that we're proud of

We shipped a real live-data intercept loop, not a mock, that finds genuinely reachable catches.

And the catch itself is real. Nothing is faked or fuzzed to make the moment feel good — when the app says PERFECT, an aircraft genuinely crossed within metres of where you stood. We could have graded generously and nobody would have known. We didn't.

Alongside that: much clearer UX with stable targeting and an explicit confirm/start flow, correctness improvements from routing-aware gating and airport-grounds safety filtering, and social proof built around the core loop.

What we learned

The hardest problem here isn't code, it's spatiotemporal reality — where aircraft actually go versus where a person can actually stand. Lead time and corridor positioning matter far more than small parameter tweaks. Clear UI state ownership is critical in a polling-based app. And safety and feasibility checks have to be first-class, not cosmetic.

We also learned that the interesting half of a "spot things" app is the prediction, not the identification. Every competitor in this category is reactive — photograph what already went past. Turning it forward-looking changed it from a catalogue into a game with skill in it.

What's next for Underplane

Real-time "catch available" alerts so you don't have to stare at the map. Better place intelligence — suggesting reliable standing spots under repeat corridors. Stronger no-go geofencing around restricted and airport property. Photo capture on a catch, so each one produces something shareable. Themed collections on top of the flat badges. And Android.

Built With

Share this project:

Updates

Submission history