🧠 This is a model, not the mountain. Every score on the dashboard is a summary of weather data run through the formulas below. It can be wrong, especially at the edges. Use it to inform your own assessment, not to replace it.

How SkiCorn works

A short tour of the model so you can decide how much to trust it on any given day. Everything here is read directly from the running configuration — if a number on the dashboard moves, this page moves with it.

What "corn" actually is

Spring corn is the rounded, ball-bearing-like surface that forms when a saturated snowpack goes through repeated freeze/thaw cycles. The recipe is simple in theory:

  1. Overnight refreeze. Air temps drop below freezing, ideally with clear skies so the snowpack also loses heat by radiating it to the sky. The surface locks up.
  2. Daytime softening. Sun and warm air thaw the top inch or two of the refrozen surface into a uniform layer of loose, round grains.
  3. Hit the timing window. Too early and you're skating on bulletproof ice; too late and it's slop. The window can be 20 minutes or 3 hours depending on aspect, elevation, and air temp.

SkiCorn estimates how favorable the recipe was on a given day. It does not model: slope aspect, slope angle, recent skier traffic, wind loading or rime, sun cups, microclimates, or your fitness for the tour. Those are still on you.

The formula

The composite Corn Score is built from three positive contributions and (optionally) one penalty:

score = refreeze × 0.5                  <-- 0..50 pts
      + warming  × 0.3                  <-- 0..30 pts
      + min(20, streak_days × 5)    <-- 0..20 pts
                                              ----
                                              capped at 100

if Camp Muir wind > 25.0 mph:
    score = score × 0.8                       <-- multiplicative penalty

if any veto fires (rain, >4" new snow):
    score = 0                                  <-- hard override

Refreeze and warming alone cap at 80 points; the streak bonus is what pushes a score into the 80–100 range. A perfect-looking day with a 0-day streak (e.g., the very first good day after a storm) maxes out around 80 — that's by design, since corn really does set up better after several consecutive freeze/thaw cycles.

Component scores

🥶 Refreeze (0–100)

Scored on the estimated snow-surface low, not the raw air temperature. On a clear, calm, dry night, snow radiates infrared heat directly to the sky and the surface decouples from the air — it can run 12°F colder than the SNOTEL air-temp probe at 5 ft. Cloud, wind, and humid air all suppress this effect.

surface_low = air_low − ΔT_radiative
ΔT_radiative = 12°F × cloud_factor × wind_factor × humidity_factor

cloud_factor    = 1 − cloud_cover_pct/100         (clear → 1, overcast → 0)
wind_factor     = exp(−wind_mph / 12)           (calm → 1, 5 mph → 0.66, 12 mph → 0.37, 20 mph → 0.19)
humidity_factor = (T_air − T_dewpoint) / 8°F      (dry → 1, saturated → 0)
    

The temperature score is then a single 0–100 ramp on the surface estimate:

Why this replaced the old "air temp + cloud bonus" model: a 36°F clear/calm/dry night used to score ~20 (no air freeze, plus a cloud bonus) even though the surface actually drops to ~26°F and freezes solid. A 36°F overcast night scored the same. The surface model separates the two correctly.

Calibration note: the 12°F maximum deficit is the literature value for maritime mid-latitude spring snow; once we have a few weeks of local dewpoint history it can be tuned against observed surface temps.

🏔️ Freezing level & partial-route boost

The route from Paradise (5,400 ft) to Camp Muir (10,080 ft) spans nearly 5,000 ft of elevation. When Paradise doesn't freeze but the freezing level sits below Camp Muir, most of the route did refreeze overnight.

Example: if Paradise hits 34°F but the freezing level is ~6,000 ft, roughly 87% of the route froze. The temp sub-score jumps from ~20 (standard 34°F scoring) to ~35 (87% × 65 cap). The lowest slopes near Paradise won't be corn, but everything above ~6,000 ft should be.

☀️ Warming (0–100)

🔄 Streak (0–20 bonus pts)

Counts consecutive prior days with overnight low ≤ 32.0°F at Paradise. Each day contributes 5 bonus points, capped at 20. For future outlook days, NWS forecast overnight lows fill in for missing observations (otherwise the streak would just be today's value repeated).

💨 Wind

Maximum forecast sustained-or-gust wind at Camp Muir over the period. If it exceeds 25.0 mph, the composite is multiplied by 0.8 (a ~20% penalty). Below that threshold the wind has no effect on the score.

⛔ Hard vetoes (force score to 0)

Borderline rain (e.g., trace precip near 33–34°F) is downgraded from a hard veto to a warning — the inference can be wrong and you deserve to make the call yourself.

Worked example

Say last night's overnight low at Paradise was 26°F with 20% cloud cover, 3 mph wind, and a 15°F dewpoint; today's forecast high is 50°F, the freeze/thaw streak is 3 days, and Camp Muir winds are forecast at 30 mph:

surface_low = 26 − 12·(1−0.20)·exp(−3/12)·min(1, (26−15)/8)
            = 26 − 12·0.80·0.78·1.00 ≈ 18.5°F  → temp score = 100
refreeze: 100 (surface ≤ 28°F)
warming:  100 (50°F is the peak)
streak:   3 days × 5 = 15

base:    100 × 0.5 + 100 × 0.3 + 15 = 50 + 30 + 15 = 95
wind:    30 mph > 25.0 mph → ×0.8 → 76
final:   76

The dashboard will show 76 / 100 as a "good" day with a wind-penalty bullet in the "Why this score?" panel and the −19 pts shown explicitly in the contribution breakdown.

How confidence is computed

The single confidence number is the blend of four sub-scores; the dashboard shows a small bar for each:

The four are blended with a multiplicative penalty for the worst of the four, so a single very weak input (e.g., 5-day-out forecast) really does drag the headline confidence down — it will not silently saturate at 100.

Glossary

SWE (Snow Water Equivalent)
The depth of liquid water you'd have if the snowpack melted in place. SNOTEL measures this directly with a snow pillow.
Lapse rate
How fast air temperature drops with elevation. SkiCorn uses a default of 3.5°F per 1,000 ft when only Paradise data is available, and computes a dynamic rate when both Paradise and Camp Muir readings exist. Used to estimate temperatures at Camp Muir (10080 ft) from Paradise (5400 ft).
Freezing level
Elevation above which air temperature is below freezing. SkiCorn computes an overnight freezing level from NWS forecast temps and uses it to estimate what fraction of the route refroze — even when Paradise itself is above freezing. Also found in the NWAC and UW forecasts as a narrative value.
Refreeze
Overnight cooling that locks the snow surface back up after a previous day's thaw. Modeled on estimated surface temperature, which can run up to 12°F below air temp on a clear, calm, dry night (radiative cooling to space).
Mush
Over-warmed corn that's lost its structure — slow, sticky, no fun.
Veto
A hard override that forces the composite score to 0 regardless of the underlying component scores (e.g., confirmed rain).
Streak
Consecutive prior days with overnight freeze. Long streaks build up well-developed corn; the very first day after a storm rarely skis well even when the temps look right.

Known limitations & failure modes

Verify before you commit

Before you trust the score for a tour, please: