ML

Project

Riverbeta

Live whitewater trip planning for Montana rivers — five federal data sources fused into a single go / no-go verdict per run, with trip windows up to 18 months out.

liveNext.js 16 · Supabase · Mapbox · Anthropic API · Claude Code

What it is

Riverbeta is a live trip-planning site for Montana whitewater — eight rivers, fifteen runs, focused on the Flathead basin. The core unit is a run (put-in to take-out), and every run page is a decision dashboard: live flow and water temperature, point forecast, sunrise and sunset, air quality, and active weather alerts, all resolved against calibrated runnability ranges into a single GO / OK / NO verdict.

It plans ahead, too. Alongside official NOAA forecasts and day-of-year flow climatology, the headline feature is a probabilistic trip-window outlook: pick dates up to 18 months out and see the probability envelope for runnable flows, conditioned on this year’s snowpack.

I tried hard to make it editorially honest. There’s a sources page; popovers surface where reputable sources disagree instead of silently picking a side; Class III+ content sits behind a “you need a guide” check; and a contribution system lets the people who actually paddle these rivers correct the record. The whole site — including its vintage USFS-poster design system, hand-built SVG maps and sprite library — was built end to end with Claude Code.

How it’s built

  • Five federal data sources, one verdict

    USGS Water Services (flow and water temp, 15-minute cache, 7-day series, staleness detection), NWS point forecasts and active alerts, NOAA NWPS streamflow forecasts, NRCS SNOTEL snowpack, and AirNow AQI — fused by a status engine that turns live CFS against calibrated runnability ranges into GO / OK / NO.

  • Ensemble forecasting (data engineering, not AI)

    The 18-month outlook takes the NWRFC's 45-trace ensemble streamflow prediction and sorts it per-timestep into a p10–p90 probability envelope, layered with USGS day-of-year flow climatology — parsed by hand from RDB format, because the service doesn't speak JSON — and SNOTEL snowpack as a bias signal.

  • An AI contribution pipeline with forced tool use

    Readers flag corrections, add beta, or file trip reports inline on any rapid, access point, or run. Admin-side, Claude reviews each contribution with the node's canonical data as context — and because tool_choice forces a propose_merge call, the output is always a validated structured proposal, never free text. The model decides artifact type, placement, and shelf-life (evergreen, conditional, or perishable — hazards expire, geography doesn't), rewriting in a calm ranger voice with instructions not to invent facts.

  • Two-tier trust

    Community input lands as a clearly attributed community layer. If the AI judges the site's own authored data wrong, it proposes a Tier-2 authored edit for owner approval, flagged so a data re-ingest can't clobber it. Prompt caching on the system prompt, a deterministic heuristic fallback if the API is unavailable, honeypot anti-spam, token-gated admin.

  • Logistics and provenance

    Mapbox-routed shuttle distance and time on each run map, permits and land context, multi-day trip composition. Seed content was AI-drafted from real sources with the architecture built to ground-truth it: source-linked data, dispute records, and the contribution system as a standing correction loop.

All projects