Real physics. Not guesswork.
skateable.'s scoring engine keeps track of the water sitting on a spot, hour by hour: rain in, evaporation out, dew and frost along the way. Evaporation comes from the same Penman-Monteith equation hydrologists use, and the model is checked against sensors that measure whether real road surfaces are wet or dry.
The complete pipeline
How a score is made
Every score, whether it is now, an hour ago or tomorrow morning, goes through the same steps, and the score ring, forecast chart, widgets, watch, CarPlay, Android Auto and Apple TV all run this one engine.
SKATEBOARDING DRYNESS ENGINE v2 ──────────────────────────────────────────────── 1. Water balance // every hour, oldest first W = W - E - soak // E = evaporation, soak = into the pores W = min(C, W + rain) // C = film the surface can hold P = P + overflow - drain // P = standing water in low spots W = W + dew // instead of E, surface below dew point below 0 C: water turns to ice, and ice must melt before it dries | v 2. Evaporation // FAO-56 hourly Penman-Monteith E = ET0(T, RH, wind, Rn) Rn = sun at this hour, place and date, after cloud, shade and albedo | v 3. Wetness ceiling ceiling = 100 when dry, falling as W / C rises, lowest when frozen | v 4. Conditions // how dry the air keeps a dry surface Dcond = humidity, cold, wind, sun, condensation, frost + nudge from recent dry/wet reports | v 5. Score S = min(Dcond, ceiling) - session window penalty Ddisplay = 100 - (100 - S)(2 - G) + P G = grip of the surface, P = your tolerance setting
Overview
Four generations of scoring
The skateability score has been rebuilt several times. Every version produces a 0 to 100 score for how dry and skateable a spot is. The original v1.0 is described further down.
| Capability | v1.1 | SDE v1.2 | SDE v2 |
|---|---|---|---|
| Park attributes (surface, sun, drainage) | Yes | Yes | Yes |
| Community dry/wet reports | Yes | Yes | Yes |
| Drying speed depends on the weather (VPD, sun, wind) | No | Yes | Yes |
| Session window, forecast confidence and amount | No | Yes | Yes |
| Score forecast timeline with per-hour explanation | No | Yes | Yes |
| Grip per surface, wind chill, frost, environment attributes | No | Yes | Yes |
| Tracks the water on the surface, hour by hour | No | No | Yes |
| FAO-56 hourly Penman-Monteith evaporation | No | No | Yes |
| Dew wets the surface; ice melts before it dries | No | No | Yes |
| Rain measured by gauges near starred spots | No | No | Yes |
| Checked against road-surface sensors | No | No | Yes |
| One engine on phone, widgets, watch, cars and TV | No | No | Yes |
Current
Skateboarding Dryness Engine (SDE) v2
SDE v1.2 estimated drying with a curve that started when it last rained, its speed set by the weather at the moment of scoring. It never followed the water itself: rain at dusk that sat through a cold, damp night could read as nearly dry by morning if the morning looked good. SDE v2 keeps a running total of the water on the surface instead, from 48 hours before now through the forecast.
Water balance
Each hour, rain adds water and evaporation takes it away. The engine tracks it in three places:
- The film on top, what your wheels meet. Once it is full, extra rain runs off to the low spots.
- Standing water in bowl bottoms, flats and cracks. How much collects and how fast it drains depends on drainage and on whether the spot sits low. Puddles cover a small part of the surface, so they evaporate slowly, and a big downpour keeps a poorly drained park damp for hours after a shower would have cleared.
- The pores. Open, weathered concrete and bare timber soak the film up within an hour or two; dense, smooth decks and steel barely absorb at all, so the water stays on top until it evaporates. Water in the pores leaves the surface dark but grippy, so it does not hold the score down, and it dries out slowly.
where C = film the surface can hold, E = evaporation, soak = water drawn into the pores
The hour's evaporation comes off first and its rain lands after, so an hour that was rained on always ends wet. On an hour when the surface is below the dew point, nothing evaporates and dew is added instead.
Because the water carries from hour to hour, drying follows the weather as it actually happens: rain at dusk dries slowly through a still, damp night and faster on a breezy one, a light drizzle that never fills the surface clears sooner, and a shaded spot with poor drainage stays wet long after a sunny smooth deck. The "EST. DRY IN" time is simply when the forecast hours clear both the film and the standing water.
Evaporation
Evaporation uses the hourly Penman-Monteith reference equation from the UN FAO's Irrigation and Drainage Paper 56, the global standard for estimating evaporation from weather data. The engine uses its form for open water, because rain on a deck is a thin film with nothing like a leaf holding it back, and scales the wind's part for a flat slab: air moves more smoothly over concrete than over grass, so it carries vapour away more slowly. Two forces drive it:
- Net radiation (Rn) supplies the energy to turn water into vapour. The engine works out the sun's height for the spot's latitude, longitude and the exact hour, then allows for cloud, shade and how much light the surface reflects (albedo). At night a deck gives back the heat it soaked up during the day, so the air and wind keep drying it until morning.
- Vapour pressure deficit (VPD) is how much more moisture the air could hold. On a humid day even strong sun dries a park slowly, because the air has little room for more water vapour.
where es(T) = 0.611 x exp(17.27 x T / (T + 237.3))
Dew, frost and ice
On clear, still nights a surface cools below the air. When it drops below the dew point, water condenses onto it, so a spot can turn damp without any rain. Below freezing, surface water turns to ice. Ice does not evaporate: it has to melt first, then the meltwater dries like rain. A frozen wet surface scores very low until it thaws.
Materials
Different surfaces take in sunlight and hold water differently. These are the values the engine uses:
| Material | Albedo | Holds water | Grip |
|---|---|---|---|
| Asphalt | 0.10 | Medium | 0.95 |
| Modern concrete | 0.35 | Low | 1.0 |
| Aged concrete | 0.25 | High | 0.92 |
| Wood | 0.25 | Highest | 0.8 |
| Metal | 0.40 | Lowest | 0.6 |
Albedo is how much sunlight a surface reflects. Asphalt (0.10) absorbs 90% of it and dries faster in sun; metal (0.40) reflects much more.
Grip only matters when the surface is wet. A dry surface in good conditions scores 100 whatever it is made of. When wet, low grip makes the wetness count for more: a damp metal ramp scores lower than damp concrete, because wet metal is genuinely dangerous.
From water to a score
Two things set the score, and the lower one wins:
- The wetness ceiling. A dry surface allows 100. As water builds up the ceiling falls smoothly through damp and wet bands, and a soaked or frozen surface allows very little. Puddles left only in the low spots hold it in the damp band. A drying deck climbs back hour by hour, with no jump as the last trace goes.
- Conditions. How good a dry surface feels in this air: very high humidity, cold, condensation risk and frost pull it down; wind and sun help. Recent community reports nudge it (below).
Community reports
Weather models describe an area, not your spot. When skaters log a session as dry or wet, recent reports nudge the score towards what they saw. Each report fades with a 30-minute half-life, agreeing reports add up with diminishing returns, conflicting reports cancel out, and the total nudge is capped at 15 points so reports never override the physics.
nudge = sign(net) x min(√|net| x 3, 15)
Measured rain
Forecast models sometimes miss a shower completely. For starred spots in England, skateable. also reads Environment Agency rain gauges near the spot every hour, and the phone remembers any rain it saw in a live reading. For each hour the engine takes the wetter of the forecast model and what was measured.
Rain gauge data: Environment Agency, Open Government Licence v3.0.
Display filter
- Grip (G): amplifies wetness on slippery surfaces, as above.
- Tolerance (P): your preference in Settings, from -5 (wants it fully dry) to +5 (happy skating slightly damp).
When dry (S = 100): Ddisplay = 100 for every material
Checked against real roads
Skate spots have no sensors, but roads do. Finland's road weather stations report every few minutes whether the road surface is dry, moist or wet, alongside the weather. The engine's settings were tuned on hundreds of these stations and then tested on stations and days it had not seen. The tuning is repeated as more rain events are collected.
Road weather data: Fintraffic / digitraffic.fi, license CC 4.0 BY.
Comparison
What changed in practice
The same 2 mm shower on two different spots, scored by SDE v2 with today's settings, with the weather after the rain held steady.
| Spot | Weather after the rain | Dry after |
|---|---|---|
| Smooth concrete, direct sun, good drainage | June midday, 22C, 55% humidity | Within the hour |
| Smooth concrete, direct sun, good drainage | October evening, 9C, 88%, overcast | ~19 hours |
| Aged concrete, full shade, poor drainage | June midday, 22C, 55% humidity | ~22 hours |
| Aged concrete, full shade, poor drainage | October evening, 9C, 88%, overcast | Still wet 2 days later |
A sunny summer deck really does clear fast, and a shady, badly drained corner really does stay wet for a day or more. The score now shows both.
Features
Score forecast timeline
Because the engine scores every hour, it produces a full score trajectory: the past 48 hours and the forecast ahead. The water carries through the whole timeline, so the chart, the score ring and the "EST. DRY IN" time always agree.
Tap the score ring on the Dashboard to see the forecast. The chart shows how the score has changed and how it is predicted to change, with colour-coded fills (green for dry, amber for drying, red for wet) and optional weather overlays for temperature, wind, rain, and humidity.
A mini preview of the forecast curve also appears inside the score ring itself, giving you an at-a-glance sense of the trend without opening the full forecast view.
Features
Session window
If rain is forecast within 2 hours, the score drops to reflect the shrinking window for a session. The closer the rain, the larger the penalty (up to -15 points). The dashboard hint shows when rain arrives.
Forecast confidence, not just timing
A 45% chance of rain and a 95% chance of rain should not read the same. The engine scales both the penalty and the message by the forecast probability:
- 80%+ probability: full penalty. Hint reads "Rain expected in ~45m. Session window closing."
- 60-79% probability: 75% of the penalty. Hint reads "Rain likely in ~45m. Session window closing."
- 40-59% probability: 40% of the penalty. Hint reads "Rain possible in ~45m" with no session-window warning - a marginal forecast shouldn't tell you to pack up.
- Below 40%: ignored entirely.
Amount threshold
Probability alone isn't enough. A 90% chance of 0.1 mm drizzle is not a session-ending event. A forecast hour has to carry at least 0.3 mm of rain before it counts as the next rain; drizzle hours are skipped and the engine looks further ahead.
Features
Latitude-aware sun
The engine works out the sun's height for each spot and each hour from its latitude, longitude and the date, rather than assuming a fixed day. In a UK summer that means drying sun from about 4:30am to 9:30pm; in winter the sun is lower and the days are short, so the same shower takes far longer to clear. In Scandinavia the difference is larger still.
Features
Wind chill awareness
When wind makes it feel significantly colder than the air temperature (3C+ difference), the dashboard hint shows the feels-like temperature using the North American Wind Chill Index formula. The surface might be dry, but you will want an extra layer.
where T = air temp (C), V = wind speed (km/h)
Features
Ice, frost, and snow detection
Freezing works on two levels. Water already on the surface turns to ice, which holds the score very low until it melts (see Dew, frost and ice above). A dry surface in freezing air gets a gentler penalty, using air temperature adjusted for wind chill:
- Hard freeze (below -3C): -15 point penalty. Frost likely.
- Light frost (0C to -3C): -5 to -8 point penalty. Frost likely in shaded areas. Burns off once the sun hits.
- Near freezing (0C to 2C): a hint, and a small penalty only when the air is very humid. Cold air is often very dry, so the surface can be perfectly skateable.
- Above 2C: no freeze risk.
The penalties for a dry surface are intentionally gentle. Cold air is frequently very dry, and a light overnight frost burns off quickly in morning sun. The hints warn you to watch for slick patches without crying wolf.
Features
Environment attributes
Five optional per-spot attributes let the engine account for local conditions that weather data alone cannot capture:
| Attribute | Options | Effect on scoring |
|---|---|---|
| Cover | None / Partial / Full | Full cover keeps all rain off. Partial cover keeps off 60%. A fully covered park stays dry through a downpour. |
| Wind exposure | Sheltered / Normal / Exposed | Scales the wind used for evaporation: sheltered 0.4x, exposed 1.5x. |
| Elevation | Low-lying / Level / Elevated | Elevated spots drain one tier better (poor becomes average). Low-lying spots hold more standing water. |
| Tree cover | On / Off | Trees keep dripping after rain stops, adding water for the hour after. |
| Nearby water | On / Off | Coastal or riverside spots have higher local humidity. The engine adds 8 percentage points to the humidity it uses. |
All environment attributes are optional. Parks without them use sensible defaults (no cover, normal wind, level, no trees, no water).
Legacy
SDE v1.2 Legacy
SDE v1.2 replaced the points model with weather-driven drying. It found the last hour with at least 0.3 mm of rain, then recovered the score along an exponential curve whose speed depended on VPD, surface porosity and day or night.
k = 0.02 (1 + 2 VPD)(1 - 0.3 porosity) fnight // drying constant D = Dbase (1 - e-kt) // t = minutes since rain while raining: fixed low floors; poor drainage capped at 60%
Remaining limitations
- Its drying speed came from the weather at the moment of scoring, applied all the way back to the rain, so a cold, damp night after rain was forgotten as soon as the morning looked good.
- Each score was worked out from scratch for one moment, so the forecast chart and the headline score could disagree.
- The server, widgets, the watch, the car apps and the Apple TV each ran their own copy or a simpler stand-in, so the same spot could show different scores on different screens.
- Dew only lowered the score; it never added water that had to dry off.
Legacy
Engine v1.1 Legacy
Version 1.1 introduced park attributes and community session data, making the score location-specific for the first time.
How it worked
The base model was the same additive approach as v1.0, but with four new modifier terms for surface type, sun exposure, drainage quality, and temperature. Community session reports also contributed: each recent dry session added +5 (up to +15), while each wet session subtracted 10 (up to -30).
Improvements over v1.0
- A modern smooth concrete park in direct sun with good drainage now scored significantly higher than a shaded, cracked asphalt lot.
- Community session reports provided real ground truth to adjust the score.
- Temperature awareness meant cold mornings correctly showed slower drying.
Remaining limitations
- The modifiers were fixed point values, not physics-derived. A "+8" for modern concrete was a hand-tuned guess, not calculated from the material's actual thermal properties.
- The 6-hour linear drying curve still ignored real evaporation conditions. A hot, dry, windy day dried a park just as slowly as a cold, humid, still night.
- Session adjustment was a simple +/- arithmetic, not statistically weighted. A single unreliable report could shift the score as much as a trustworthy one.
- No condensation or dew point awareness. A metal ramp could show "dry" at midnight even when condensation was forming on the surface.
Legacy
Engine v1.0 Legacy
The original scoring engine shipped with skateable. 1.0 in March 2025. It used a simple weather-only model: fetch current conditions and 48 hours of precipitation history, then apply penalties and bonuses.
How it worked
The score started at 100 and was reduced by precipitation and humidity penalties. A wind bonus partially offset those penalties. The rain decay was a linear ramp: immediately after rain the penalty was 70 points, tapering to zero over 6 hours.
Limitations
- No awareness of surface type, sun exposure, or drainage quality.
- A smooth concrete park and a rough asphalt lot scored identically in the same weather.
- Community session reports were not used.
- The linear 6-hour drying curve was the same for all conditions, whether 35 degrees and sunny or 5 degrees and overcast.
References
Scientific foundations
The SDE is grounded in peer-reviewed research spanning decades of evaporation science and surface hydrology.
Natural evaporation from open water, bare soil and grass
The foundational work proving that evaporation depends on both energy supply (radiation) and the vapour pressure deficit, not temperature alone. This is the basis for the SDE's evaporation step.
Evaporation and environment
Extended Penman's equation into the Penman-Monteith form, which combines the energy supply and the drying power of the air in one estimate of evaporation. The SDE's evaporation step uses this form.
FAO Irrigation and Drainage Paper No. 56: Crop evapotranspiration
The UN FAO's standard method for the Penman-Monteith equation, including the hourly reference evaporation and net longwave radiation equations the SDE's water balance uses, adapted for wet hard surfaces.
Ground surface temperature simulation for different land covers
Modelled surface temperature and evaporation for paved surfaces including concrete and asphalt under varying weather. Background for how surface material and exposure change how fast a surface warms, cools and dries.
The new wind chill equivalent temperature chart
Defines the North American Wind Chill Index used for the SDE's feels-like temperature hint.
Astronomical Algorithms
Provides the solar declination and hour angle equations used by the SDE's latitude-aware solar model. Accurate sunrise and sunset times mean the engine correctly accounts for 17-hour summer days in northern Europe versus 8-hour winter days.
Boundary Layer Climates
The standard reference for urban microclimate physics, including how albedo, thermal mass, and surface geometry affect local temperature and moisture. Background for the SDE's albedo values and night-time surface cooling.