Best Smoke Days — Methodology

How the 0-100 smoke score is calculated. Five weather signals, a wet-bulb stall model, cooker-specific wind sensitivity, and full transparency on the data sources.

Data sources

Forecasts are pulled from Open-Meteo as the primary source, with the US National Weather Service as failover. The worker tries Open-Meteo first; if Open-Meteo returns 5xx, times out, or sends malformed JSON, the request fails over to NWS within the same fetch cycle. Successful Open-Meteo responses are cached in Cloudflare KV with a 30-minute freshness window and a 6-hour stale-while-error window — so a brief upstream outage doesn't blank the forecast.

Both sources are airport-grade. They don't see your yard's trees, structures, or elevation. Step outside before lighting the fire — the score is a planning signal, not a ground truth.

The five scoring signals

  1. Precipitation (up to 50 points). Probability times accumulation. 90% rain + 0.5″ accumulation costs the full 50 points so the day lands in the red band on its own.
  2. Wind and gusts (scaled by cooker sensitivity). Effective gust = reported gust if present, otherwise sustained wind × 1.4 (CONUS inland gust factor). Penalty grows linearly from 10 mph and caps at 35 mph. Coefficient: offset 1.5×, pellet 1.0×, kettle 1.2×, kamado 0.5×, electric 0.1×.
  3. Cold mornings (up to 20 points). Penalty starts below 40 °F low and reaches full at 10 °F. Catches the days where startup is hard and fuel rate explodes.
  4. Hot afternoons (up to 25 points). Penalty starts above 85 °F high and reaches full above 110 °F (the danger-zone end of the operating range).
  5. Stall risk (up to 20 points, stall-sensitive cuts only). Computes the wet-bulb temperature inside the cooker cavity using the Stull 2011 formula. Maps wet-bulb 110 °F → 160 °F to 0–100% stall risk; applies as a penalty for brisket flat, brisket packer, pork butt, spare ribs, baby back ribs, and lamb shoulder.

The four bands

Confidence labels

Each day in the 7-day window carries a confidence label that reflects the forecast horizon, not the score: high for the next 24-48 hours, medium for days 3-4, low for days 5-7. The label is a forecast-uncertainty signal — a high-confidence red day is more reliable bad news than a low-confidence ideal day is reliable good news.

Open-source guarantees

The scoring engine lives in packages/shared/src/scoring.ts and is mirrored to _partials/weather-score-shared.js so the browser computes the same score the server does. A parity test runs both implementations on identical fixtures and asserts byte-for-byte agreement; if either side drifts, CI fails. The repository is at github.com/djmonty93/pitmaster.tools.

Have a question this page doesn't answer? See the FAQ or affiliate disclosures.