On a hot day KC doesn't spread out across its parks — it funnels into the cool, wet, shaded few and abandons the rest. This board is live: it re-reads the field every few minutes, and every park attribute under it is measured, not guessed.
How to read it. The bar is predicted relative crowd concentration, not a turnstile count. When it's hot, shade and water get weighted up hard — that's when the city stops spreading out.
The pattern worth naming. We measured tree canopy inside all 120 of Kansas City's 1939 HOLC polygons (NLCD 2021). The neighborhoods graded A carry 37.6% canopy over 28% pavement. The ones graded C and D — the redlined ones — carry 21.7% canopy over 47% pavement. Ninety years on, the lending map still predicts the shade.
The part that surprised us. That gap does not show up inside the parks themselves — park canopy is roughly flat across grades, because a park is the greenest patch of any neighborhood. Which inverts the easy story: a park in a redlined neighborhood isn't shade-poor, it's shade-rare. It's doing more work, for more people, with less around it to share the load. When one of those runs quiet in a heat wave, there's no shaded backup down the street.
Provenance. Temperature and day-type are live. Park geometry and area come from OpenStreetMap; canopy and impervious surface from NLCD 2021 via MRLC; redlining grades from Mapping Inequality (University of Richmond). Surface heat is a labeled proxy derived from impervious + canopy, not a thermal measurement — there is no free keyless Landsat endpoint. Noise enrichment is still pending, so it sits at a neutral default rather than claiming a park is quiet.
Your location is not stored. This board needs no location at all. The companion /nearby.json endpoint accepts coordinates to sort parks by distance, and uses them only to compute that one response — they are never written to the database, never logged, never tied to an identifier, and never shared. No request on this site records where you are.