How this works
Ragnorak watches a fixed cohort of business jets, military aircraft, and large airliners (selected by ICAO hex from public aircraft metadata) and asks a simple question: is the number currently airborne unusual for this time of day and week?
Live counts come from OpenSky's open ADS-B feed, sampled every 4 to 15 minutes, and from a sweep of adsb.lol around 28 major airports every 10 minutes; the highest count in each half hour is kept. Historical baselines were built from a 365-day backfill of ADS-B Exchange half-hour heatmap files. For each half-hour-of-week the system computes an expected mean and standard deviation; the deviation between the current count and the expected count, weighted by sample variance and absolute excess, becomes the σ score. The score is mapped to a level from 5 (nominal) to 1 (extreme outlier), 90 seconds after each half hour closes.
US federal holidays are learned separately — Thanksgiving travel and Independence Day surges live in their own ±2-day profiles rather than dragging the weekly baseline around. Level 3 and worse are kept in the archive above.
Limits: ADS-B coverage is incomplete; aircraft can be blocked or misidentified; the cohort is heuristic, not a perfect definition of every business jet; max-people is a seat-count estimate, not a passenger manifest. The aircraft on the map move between reports: each glides to its newest reported position, so the picture runs one report behind. Inspired by kylemcdonald.net/ews.
Sources: aircraft positions from the OpenSky Network and adsb.lol (ODbL); aircraft types from the OpenSky aircraft database; owners from plane-alert-db (ODbL); basemap © OpenStreetMap contributors, Protomaps.