Air Signal turns air quality and weather into a judgement about being outside: run, cycle, open the windows, let the kids out. It covers about 62,000 cities and, instead of one index number, scores 14 signals and says which one is costing the points, because “the air is clean but the UV will burn you in twenty minutes” is the useful sentence.
The 14 signals
Air (PM2.5), temperature, wind, UV, pressure, humidity, sea state, earthquakes, fire distance, pollen, geomagnetic activity, daylight, noise and the moon. Each is scored on its own curve in the Rust core (the ideal temperature is 23 °C, wind under 25 km/h, UV under 6), then combined.
Sensors and the model, resolved rather than averaged
Two sources: the CAMS atmospheric model through Open-Meteo, and Sensor.Community, about 15,000 citizen sensors. Cheap sensors read high in humidity or beside a road, and models miss local events, so where the two disagree the site says by how much and resolves it, weighting the sensors more as the gap grows. In Moscow the model said 130 µg/m³, ten sensors agreed on 6.7, and the answer is 6.2; an average would have been 68, a number that was true nowhere.
Crew Air, for outdoor crews
airsignal.app/crew answers, hour by hour for a site and a shift, what California’s wildfire-smoke rule (Cal/OSHA §5141.1) and heat rule (§3395) require. Built at the Stanford Cleantech Hackathon, 23-24 October 2026, and live and free since.
- NowCast, not the daily mean. Open-Meteo’s PM2.5 AQI is a 24-hour average; the rule uses the current AQI, so the engine recomputes the EPA NowCast from hourly PM2.5.
- Rules are data. One JSON rulebook per jurisdiction, not thresholds buried in code.
- Checked against the ground. An AirNow monitor within 25 km that disagrees scales the forecast, cautiously (clamped to 0.5-3×); NASA VIIRS fires within 50 km raise a warning, and the wind draws each fire’s smoke cone.
- A record and a signal. It prints the record an inspector asks for, and the same plan goes out as JSON for a dispatch system.
How it is built, and what it does with your data
One Rust core, airq, behind every surface: the CLI runs it natively, airsignal.app runs it compiled to WebAssembly on Cloudflare Workers, and the iPhone apps ask the site’s API, so every surface gives the same number from the same code. No account, no ads, no tracking beyond a page counter. Every page also answers in Markdown, with an OpenAPI document for agents.
Where to use it
- Web: airsignal.app, live
- Crew Air: airsignal.app/crew, live, free
- iPhone: Air Signal and Crew Air, thin clients of the same API, in App Store review
- Core: github.com/fortunto2/airq (Rust, AGPL-3.0)
How it was built
- airq: the project page: the merge algorithm, pollution fronts, source attribution, the crates
- Stanford Cleantech Hackathon 2026: how Crew Air was built in two days, with the pitch and the judges’ questions


