Know which corridors have actually recovered.
SurfaceState reads pavement condition straight from 1,200+ DOT cameras — dry, wet, slush, snow, ice — and publishes it every five minutes through a storm. Observed from imagery, never modeled from a forecast.
Pre-launch. No card, no spam.Open the live map
The read comes from a photograph, and stays traceable to it
A DOT camera already points at the pavement. SurfaceState pulls the frame, scores the road surface inside a fixed region, and publishes the result with the confidence attached — roughly 100,000 observations a day, every five minutes per camera through a storm.

- route
- US-54
- kind
- traffic
- camera_id
- ks_us54_i135w
- observed_at
- 2026-02-11 07:42:15
- condition
- snow
- confidence
- 0.93
- status
- ok
Every field traces to one frame from one camera at one timestamp. Nothing here is interpolated from a neighbouring station or a forecast model.
The frame and its source are real. The marked fields are illustrative — SurfaceState is pre-launch and publishes no classifier output for this camera yet.
When we can’t tell, we say so
Cameras ice over, go dark, and return frames too old to trust. A product that quietly renders those as clear road is worse than no product. Every ungated camera keeps its place on the map and says what went wrong.
- dryBare pavement, no film
- moistDamp, no standing water
- wetStanding water, spray
- slushSnow-water mix, tracked
- snowSnow cover over pavement
- iceIce or compacted snow
- cameraRoadside traffic video, wide framing
- rwisSensor mast, framed on the pavement
Six classes and nothing between them. A camera reports one of these or it reports no read — there is no averaged, in-between surface.
- 95%
- 75%
- 55%
- 40%
One hue, four confidence levels. Brightness never falls below a floor, so a marginal read stays visible on the map without ever looking like a confident one.
- Low confidencelow_confidenceRead exists but fell below the gate
- StalestaleLast frame is too old to trust
- No datano_dataCamera offline or returning nothing
These three deliberately share one mark. The map answers “is there a read here” — not which way it failed. Open the camera for that.
Condition drives hue and confidence drives brightness — never blended, so a dim correct read never looks like a bright wrong one.
Recovery is the part nobody reports
The storm leaving is public information. What it left behind is not. Plow priority, traffic volume, pavement temperature and sun angle mean two corridors forty miles apart clear hours apart — and that gap is where a held load costs money it didn’t need to.
One storm, three corridors, three different mornings
24 h · hourlyIllustrative, reconstructed from the storm-front test dataset in this repository. SurfaceState is pre-launch and has no customer deployments to show.
A feed first, an interface second
One GeoJSON artifact, refreshed on the same cadence as the map, with the confidence and the status on every feature. Use it as a layer in the routing stack you already run, or use our map — the record is the same either way.
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [-93.5711, 42.4093]
},
"properties": {
"camera_id": "rwis_84-01",
"kind": "rwis",
"route": "I-35",
"condition": "snow",
"confidence": 0.91,
"observed_at": "2026-02-11T02:41:07Z",
"age_seconds": 143,
"model_version": "sv-2026.01",
"status": "ok"
}
}Tell us which corridors you run
We’re expanding corridor by corridor, and the lanes our early users actually dispatch on are the ones that get wired up first. Say which ones matter to you and you’ll get access when they go live.
Or write to hello@surfacestate.com — and the live map is open now, no account needed.