Inspiration

Every airliner trusts GPS to know where it is. Near conflict zones, ground transmitters now block it with noise (jamming) or fake it (spoofing) every day, and ordinary passenger jets fly straight through. OPSGROUP's GPS Spoofing WorkGroup counted about 1,500 flights a day being spoofed in 2024, up from about 300 earlier that year. A spoofed plane can get false "terrain, pull up" alarms, drift off course, and show air traffic control a position that isn't real, and nothing in the cockpit says the signal is fake. Europe's aviation safety agency has asked for near-real-time tools that show interference along a route, but the public tools stop short: daily maps show where GPS was bad yesterday, and ground receivers can only locate a jammer near their own stations. We noticed that the data to do better is already free: every airliner broadcasts its position, speed, altitude and how much it trusts its own GPS about once a second (ADS-B), and volunteers collect it. Every airliner is already a sensor. Clearsky just listens.

What it does

  • Maps GPS trouble across the world from 45,222 real flights on 24 Sep 2026, then zooms into the hot spots.
  • Catches spoofing per aircraft. Over the Persian Gulf, it caught up to 19 airliners at cruise all reporting one spot near the Strait of Hormuz at walking pace, and explains each one in plain English: "Its GPS says it is crawling at 48 knots while 36,000 ft up. A real plane would fall out of the sky."
  • Locates the jammer from the planes alone and draws a 95% area. Over the Baltic it placed one near Kaliningrad, about 70 km from a site found independently with dedicated ground receivers.
  • "Is my flight affected?" Type a flight number: "Yes. This flight was fed a fake GPS position for about 8 minutes."
  • Route brief: fly any route through the current picture, including climb and descent, plus weather. The server version has Gemini or Grok write it and ElevenLabs read it aloud.
  • Live weather: a 48-hour forecast with storm, flood, wildfire and wind scores, jet-stream winds at cruise height, and a plain-English forecast anywhere you click.
    • Made for everyone: Simple/Expert wording, a guided tour, "drop your own jammer" to see the physics, a 3D view, Ask Clearsky, and a hands-free Demo mode for presenting.

How we built it

Data. A full day from the adsb.lol open archive (about 4 GB streamed from GitHub releases), cut into regions and replayed through exactly the same code that runs on a live feed or a home antenna. Weather from Open-Meteo; earthquakes, wildfires and storms from USGS, NASA EONET and NOAA. Jamming map. Every position report includes a number saying how much the plane trusts its own GPS. We split the map into hexagons and count how many planes in each one report low trust. The statistics are careful with small numbers, so one bad plane out of two isn't treated like forty out of eighty. Planes whose equipment is bad everywhere they fly are recognised as faulty and ignored. Finding the jammer. Radio can't bend around the Earth. A ground transmitter reaches high planes from hundreds of kilometres away, but low planes only close in, and planes that kept their GPS rule places out. Clearsky tries every possible location, antenna height and transmitter power, and keeps the one that best explains which planes lost GPS and which didn't. It can separate two jammers that overlap, and only shows a jammer once two checks in a row agree. Catching spoofing. A fake signal can change where GPS says the plane is, but not the plane's other instruments. For every aircraft, Clearsky tracks its path and looks for things that can't physically happen: jumps no airliner could fly, and impossible speeds between reports, an airliner at cruise height "crawling" at walking pace, GPS height that disagrees with the air-pressure altimeter, compared with honest planes at the same height, a wind that doesn't add up: the wind implied by the plane's GPS speed and its own airspeed should match its neighbours', many planes claiming the same spot, sudden dips in GPS confidence, and a machine-learning check for anything unusual. Each piece of evidence adds weight, and a plane is flagged only when the combined score is high, with a margin so alerts don't flicker. The fake signal's source is estimated from where each victim was when it got taken over. Flight paths and weather. Each plane's path is projected forward from its last speed and direction, with a margin of error measured on 400 real flights (half were within 9.5 km after 10 minutes). Weather risk uses simple, published 0–100 scores for thunderstorms, flash floods, wildfire weather and damaging wind, built from the forecast. The full formulas are in our pitch deck. Stack. Python, FastAPI and WebSockets on the back end; deck.gl on the front end in a single HTML page that also runs with no server. Gemini or Grok write the briefs and answer questions, always from a text summary of what is on the map (they never decide the risk). ElevenLabs speaks the brief, Tiger Data (TimescaleDB) stores history, MongoDB Atlas keeps a geospatial incident log, and Docker, Caddy and Vultr host it. 21 automated tests.

Challenges we ran into

Real data is messy. My first US run flagged 5 of 13,453 aircraft, then 7 after a sensitivity change. We traced every one instead of raising thresholds: a stratospheric balloon at 67,000 ft moving at 8 kt, jets sending broken air data, and airliners at 25,000 ft being compared with traffic at 37,000 ft in the jet stream. Fixing the physics took the US to zero. Poisoned references. When a crowd of planes is spoofed, their averages make honest planes look wrong. References are now built only from clean aircraft. Overlapping jammers broke single-source fits; we moved to a joint noisy-OR model with model selection and pruning. False jammers from bad avionics over the US: a real jammer degrades most receivers inside its reach (over 55% for the real Baltic jammers), while those false fits reached 3.5%, so we added that physical check. Stale air data made the wind-triangle test fire during turns; it now only runs in steady flight with fresh data. 4 GB downloads kept getting cut off, so we wrote a resumable, streaming archive reader.

Accomplishments that we're proud of

Catching a real spoofing event with 19 airliners at once, placing a real jammer near an independently published site, and getting to zero false alarms over 13,453 US aircraft by fixing physics rather than hiding results. And making all of it understandable to someone who has never heard of GPS spoofing.

What we learned

Radio propagation, ADS-B integrity fields and wind triangles; that validation (control regions, known-answer simulations) matters as much as detection; and that the hardest part of a technical tool is explaining it in one sentence to someone who flies twice a year.

What's next for Clearsky

Live 24/7 deployment on the real-time feed, alerts for dispatchers when interference appears on their routes, ship tracking (ships are spoofed in the same waters), and a public API for airlines and regulators.

Built With

Share this project:

Updates

Submission history