August 2026

Observation Synthesis

An observation platform for Avalanche.org that reads a winter's worth of scattered field reports and tells a forecaster where the ground disagrees with the published forecast. Hono on Workers, Postgres, and a streaming synthesis from Claude.

ai · experiments

We’re building an observation platform for Avalanche.org, where field observations from across the country come to land. Snowpit profiles, cracking and collapsing, avalanches spotted from the road, notes typed on a phone in a parking lot at dusk.

Collecting them was never the hard part. Reading them is. By midwinter a single zone holds hundreds of observations across any window a forecaster actually cares about, and the signal is in there somewhere, spread thin across a lot of people’s afternoons.

So: pick a zone, pick a date range, or draw a polygon on the map around the terrain you’re actually thinking about. The platform pulls every observation inside it and writes a synthesis. Avalanche activity, cracking and collapsing, snowpack, trend. It streams in as it’s written, so you watch it think rather than watching a spinner.

The section we care about

The last section is the one that justifies the build. Alongside the observations, the synthesis reads the official published forecast for that same zone and window, and then reports only where the two diverge. What the field is saying that the forecast doesn’t cover. Where the observations don’t support the message.

It never writes a forecast of its own. That’s not the job, and building it that way would be the wrong thing to hand a forecaster. It reads what a human already wrote and points at the places the ground disagrees.

Underneath

Hono on Cloudflare Workers, a React SPA, Postgres on Neon through Drizzle. MapLibre for the map, because in this domain nearly every question is really a spatial one. The syntheses come from Claude, streamed over SSE.

Ingestion mirrors the upstream schema and keys on upstream IDs, so re-running it costs nothing and changes nothing. The same observation lands in the same row every time, which matters when you’re backfilling a season at a time.