Genius Level

Every input, formula, threshold, and applied calculation in SHA's river/weather/forecast/run intelligence stack. One scroll, no clicks, no caches. Designed to be diagnostic-first, educational-second.

1 · Live snapshot — Cuyahoga River @ Independence

The single most recent river_conditions row for this river. Fed every 15 min by the rivers:update command which combines USGS instantaneous values (flow, gauge height, water temp, parameter 00045 for rain bucket) with OpenWeather current conditions (air temp, weather, wind, humidity, barometric pressure).

Flow rate
3,070 cfs
Gauge height
7.97 ft
Water temp
58.1°F
Clarity
Muddy
Air temp
71.1°F
Sky
Clouds
Wind
21.9 mph SSW
Precip 1h
0"
Humidity
52%
Barometric
1004 hPa
Lat / lon
41.3953, -81.6298
Primary USGS gauge
04208000
Captured May 9 5:15pm EDT

2 · Recommendation breakdown

The fishing rating shown on each river page comes from FishingRecommendationService::getRecommendation(). Four independently scored components plus a barometric-pressure modifier produce a 0–11 raw score, which is clamped and cut into Excellent / Good / Fair / Poor. Below is the live decomposition for this river.

poor score = 2 / 11

"Blown out at 3,070 CFS, water is muddy, 58°F — active feeding range. The river needs time. Check back after the next drop. Too much color right now. Let it drop. Increased activity — falling pressure. The Best One Always Comes Unbuttoned."

Per-component contribution

Component Points Why
flow 0
temp 1
clarity 0
weather 0
pressure 1
flow_value 3070
temp_value 58.1
clarity_value Muddy

Barometric pressure analyzer

Trend
falling
Δ hPa/hr
Score modifier
+1
Sample size
32 pts

Scoring rules

flow
In optimal zone = 4 · within 30% = 3 · within 60% = 2 · outside = 1 · above p95×1.5 = 0 (blown).
temp
38–55°F = 3 (prime: covers winter holdover + spring run) · 33–58°F = 2 · 30–62°F = 1 · outside = 0.
clarity
Stained = 3 (steelhead green) · Clear = 2 · Muddy = 0.
weather
Cloudy/Overcast = 1 · else = 0.
pressure
Rapidly falling = +2 · falling = +1 · stable = 0 · rising = -1 · rapidly rising = -1.
rating_cuts
Excellent ≥ 9 · Good ≥ 6 · Fair ≥ 3 · Poor < 3 (max 11 after clamp).

3 · Statistics engine

Cached in river_flow_stats, regenerated nightly at 03:00 ET by flow:compute-stats. The pipeline pulls a 3-year window of hourly- downsampled USGS flow, removes Tukey outliers at 3× IQR on log-flow, then computes percentiles, a 20-bin log-space histogram, Q-Q quantiles vs. a fitted normal, and (if ≥ 20 historical "Good" reports exist) promotes the optimal zone from a heuristic p15–p30 to the empirical p10–p90 of those reports.

Window
3 yr
Sample size
2,308
Mean / median
1,313 / 1,273 cfs
Min / max
443 / 9,586

Percentile distribution

Pcfs
pp5511
pp10565
pp25798
pp501,273
pp751,903
pp902,993
pp955,062
Optimal zone (manual)
0 – 0 cfs

Flow distribution histogram (log-space, 3 yr)

443 9,586 cfs

Green bars overlap the optimal zone. Bars are equal-width in log-flow space.

Today's flow placement

p0 (low) p50 p99 (high) p95

Current flow 3,070 cfs sits at the p95 of the 3-year record. Green band = optimal zone.

Stats computed May 9 3:03am

4 · Weather integration

Three independent feeds power the per-river weather story. NWS gridpoint forecasts (refreshed every 3 hours) supply 7-day periods + 48 hours of hourly data. AHPS stage forecasts give 5-day predicted flow / gauge height. SPC convective outlooks tier the river's lat/lon by tornado / wind / hail risk for days 1–3. Active alerts are de-duplicated against expired headlines.

AHPS predicted flow (limited gauge coverage)
+24h 2,320 cfs · 6.8 ft · May 10 8pm
+48h 2,030 cfs · 6.3 ft · May 11 8pm
+72h 1,810 cfs · 5.9 ft · May 12 8pm
gauge INDO1 · issued May 9 1:38pm
SPC convective tier
Day 1: · Day 2: · Day 3:
— = no convective risk over this point today (data fetched ✓)
Active NWS alerts
none active

NWS 7-day forecast

Period Temp Wind Forecast
This Afternoon 70°F 14 mph SW Slight Chance Showers And Thunderstorms
Tonight 50°F 5 to 13 mph W Chance Showers And Thunderstorms then Showers And Thunderstorms
Sunday 63°F 7 mph N Sunny
Sunday Night 45°F 1 to 5 mph NW Partly Cloudy
Monday 57°F 2 to 10 mph N Sunny
Monday Night 41°F 0 to 7 mph NE Mostly Clear
Tuesday 66°F 0 to 7 mph S Mostly Sunny then Slight Chance Rain Showers
Fetched May 9 2:04pm

5 · Run indicator (alley-wide)

Latest 24h average lake-surface temp from NDBC buoys + C-MAN stations, compared against 7-day delta and 55°F threshold crossing detection. State changes drive copy on every river page.

Lake Erie

run_ending
surface temp 56.2°F · 7d Δ +2.2°F · day 1 in state
snapshot 2026-05-09
Latest buoy reads (24h)
NDBC-MRHO1 57.6°F May 9 3:30pm
NDBC-FAIO1 57.7°F May 9 3:30pm
NDBC-CNDO1 55.2°F May 9 3:30pm
NDBC-MRHO1 57.2°F May 9 3:24pm
NDBC-FAIO1 57.9°F May 9 3:24pm
NDBC-CNDO1 55.2°F May 9 3:24pm

Lake Ontario

no run-state snapshot

Lake Ontario stations 45012 + 45139 are seasonal NDBC buoys, currently out of the water (re-deployed in late spring). Until they're back online, the run-state classifier has no surface-temp series to evaluate. Land-based C-MAN proxy options (e.g. OSGN6, FAIO1) are not WTMP-reporting — adding a year-round Ontario WTMP source is a known TODO for next data-pipeline pass.

Seven-state classifier

pre_run_fall
Fish staging in lake; tribs empty.
run_starting_fall
First fish entering tribs (fall pulse).
run_active_fall
Active fall run.
holdover
Fish wintering in tribs between fall + spring.
run_starting_spring
Spring run starting (post-holdover surge).
run_active_spring
Active spring run.
run_ending
Drop-back; spawned fish leaving for the lake.
off_season
Lake-bound; tribs warm; warmwater season.

6 · Storm detection (alley-wide)

ActiveStormDetector fires four parallel triggers against river_precip_observations, NWS active alerts, and 6-hour flow deltas. Any single trigger flips the storm card to active; severity is then classified by the most aggressive signal across all 31 rivers. Precip readings flow from a 4-source priority chain — fresher, more accurate sources override stale ones.

ACTIVE moderate
Active triggers: rising-flow

"1 river rising 3.2×+ in 6h"

Precipitation rate — last 24 hours (NWS publishes in 6h intervals; USGS hourly where available)

Alley average Wettest single river Broad-rain trigger Heavy-MRMS trigger
in/hr 0.00 0.10 0.12 5:30pm 2:00pm

Y axis is in/hr precipitation, auto-scaled but always includes the broad-rain trigger so quiet days still have context. The cyan line is the alley-wide average; gray ticks above each cyan dot show how high the single wettest river was running at that observation. When cyan crosses amber → broad-front rain. When a gray tick crosses red → one river is in a heavy cell. Sparse points are real — NWS gridpoint QPE only updates every 6 hours per river; the hourly USGS rows fill in for the handful of rivers whose gauges publish precipitation.

Triggers

Trigger 1A — Heavy MRMS rate
≥ 1 river over 0.5 in/hr in last 30 min.
Trigger 1B — Broad rain
≥ 3 rivers with precipitation_1h > 0.10".
Trigger 2 — NWS alert
≥ 1 active alert covering any river.
Trigger 3 — Flow rise
≥ 1 river with current flow ≥ 1.5× flow 6 hours ago.

Severity classifier

severe
NWS Extreme/Severe alert · MRMS ≥ 1.0 in/hr · ≥ 5 rivers rising · ≥ 8 raining · ≥ 3 heavy MRMS rivers
moderate
Any active alert · MRMS ≥ 0.5 in/hr · ≥ 1 rising · ≥ 5 raining
light
Default when active but none of the above

Precipitation source priority

  1. mrms — Open-Meteo Lite (15-min observations) — 10 min staleness window
  2. usgs — USGS parameter 00045 from gauges with rain buckets — 30 min
  3. nws_obs — NWS gridpoint quantitativePrecipitation past intervals — 90 min
  4. nws_fcst — NWS gridpoint forecast (final fallback) — 240 min

7 · Alley Index (alley-wide)

Percentile rank of today's underlying conditions composite (mean of per-river fishing scores 0–100) against the historical record on this calendar window (±15 days, all years). Below 10 comparable days in the window the Index falls back to the raw underlying score so the page always shows a meaningful number.

Today
93
Underlying
53
Rivers active / total
31 / 31
Date
2026-05-09 00:00:00

Band cuts

BandCutMeaning
Excellent ≥ 90 Top 10% of comparable days ever recorded.
Good ≥ 70 Top 30%.
Average ≥ 30 Middle 40%.
Poor ≥ 10 Bottom 30%.
Blown ≥ 0 Bottom 10%.

Last 30 days

Older → newer left to right. Color follows band cuts.

8 · Forecast verification (alley-wide)

Most-recent NWS prediction for each (river, date) in the last 14 days, sorted past→future. The verifier joins each prediction to MAX/MIN(air_temp_f) + MAX(precipitation_1h) from river_conditions on that date. Δ column compares observed vs predicted. Known upstream gap: predicted precipitation inches are unreliable (NWS forecast text rarely includes a clean inches value, so the snapshotter falls back to 0). Use precip probability as the better forecast signal.

Date River Predicted (hi/lo · precip) Observed (hi/lo · max 1h) Δ vs predicted
2026-05-15 Ashtabula River 70°/— · 14% POP · 7 mph W (future — not yet verifiable)
2026-05-15 Black River 71°/— · 14% POP · 7 mph SW (future — not yet verifiable)
2026-05-15 Black River (Watertown) 65°/— · 21% POP · 7 mph SW (future — not yet verifiable)
2026-05-15 Brandy Run near Girard 70°/— · 15% POP · 7 mph SW (future — not yet verifiable)
2026-05-15 Buffalo Creek 67°/— · 17% POP · 5 mph SW (future — not yet verifiable)
2026-05-15 Canadaway Creek 67°/— · 16% POP · 7 mph SW (future — not yet verifiable)
2026-05-15 Cattaraugus Creek 68°/— · 19% POP · 5 mph SW (future — not yet verifiable)
2026-05-15 Cazenovia Creek 67°/— · 17% POP · 5 mph SW (future — not yet verifiable)
2026-05-15 Chagrin River @ Willoughby 73°/— · 14% POP · 6 mph SW (future — not yet verifiable)
2026-05-15 Chautauqua Creek 65°/— · 16% POP · 6 mph SW (future — not yet verifiable)
2026-05-15 Conneaut Creek 70°/— · 14% POP · 7 mph W (future — not yet verifiable)
2026-05-15 Crooked Creek 70°/— · 14% POP · 7 mph SW (future — not yet verifiable)
2026-05-15 Cuyahoga River @ Independence 72°/— · 14% POP · 7 mph W (future — not yet verifiable)
2026-05-15 Eighteen Mile Creek 68°/— · 17% POP · 5 mph SW (future — not yet verifiable)
2026-05-15 Eighteenmile Creek (Niagara) 66°/— · 15% POP · 7 mph SW (future — not yet verifiable)
2026-05-15 Elk Creek 69°/— · 14% POP · 7 mph SW (future — not yet verifiable)
2026-05-15 Euclid Creek 71°/— · 14% POP · 7 mph W (future — not yet verifiable)
2026-05-15 Genesee River 65°/— · 20% POP · 7 mph E (future — not yet verifiable)
2026-05-15 Grand River near Painesville 74°/— · 13% POP · 7 mph SW (future — not yet verifiable)
2026-05-15 Huron River 72°/— · 13% POP · 6 mph SW (future — not yet verifiable)
2026-05-15 Irondequoit Creek 66°/— · 20% POP · 7 mph E (future — not yet verifiable)
2026-05-15 Johnson Creek 62°/— · 15% POP · 7 mph E (future — not yet verifiable)
2026-05-15 Oak Orchard Creek 63°/— · 16% POP · 6 mph E (future — not yet verifiable)
2026-05-15 Rocky River near Berea 71°/— · 15% POP · 8 mph SW (future — not yet verifiable)
2026-05-15 Salmon River 65°/— · 19% POP · 6 mph S (future — not yet verifiable)
2026-05-15 Sandy Creek (Adams) 64°/— · 18% POP · 7 mph SW (future — not yet verifiable)
2026-05-15 Sandy Creek (Hamlin) 64°/— · 17% POP · 7 mph E (future — not yet verifiable)
2026-05-15 Silver Creek 64°/— · 16% POP · 6 mph SW (future — not yet verifiable)
2026-05-15 Twenty Mile Creek 63°/— · 15% POP · 7 mph SW (future — not yet verifiable)
2026-05-15 Vermilion River @ Vermilion 71°/— · 14% POP · 7 mph SW (future — not yet verifiable)
2026-05-15 Walnut Creek 66°/— · 14% POP · 8 mph SW (future — not yet verifiable)
2026-05-14 Ashtabula River 63°/51° · 29% POP · 15 mph E (future — not yet verifiable)
2026-05-14 Black River 64°/49° · 30% POP · 12 mph E (future — not yet verifiable)
2026-05-14 Black River (Watertown) 61°/45° · 50% POP · 7 mph S (future — not yet verifiable)
2026-05-14 Brandy Run near Girard 64°/50° · 33% POP · 9 mph SW (future — not yet verifiable)
2026-05-14 Buffalo Creek 61°/46° · 43% POP · 7 mph SW (future — not yet verifiable)
2026-05-14 Canadaway Creek 61°/48° · 49% POP · 9 mph SW (future — not yet verifiable)
2026-05-14 Cattaraugus Creek 62°/46° · 46% POP · 6 mph SW (future — not yet verifiable)
2026-05-14 Cazenovia Creek 61°/46° · 43% POP · 7 mph SW (future — not yet verifiable)
2026-05-14 Chagrin River @ Willoughby 66°/51° · 32% POP · 10 mph E (future — not yet verifiable)
2026-05-14 Chautauqua Creek 60°/50° · 47% POP · 8 mph SW (future — not yet verifiable)
2026-05-14 Conneaut Creek 64°/51° · 30% POP · 12 mph SE (future — not yet verifiable)
2026-05-14 Crooked Creek 64°/51° · 31% POP · 10 mph E (future — not yet verifiable)
2026-05-14 Cuyahoga River @ Independence 65°/51° · 31% POP · 12 mph NE (future — not yet verifiable)
2026-05-14 Eighteen Mile Creek 62°/48° · 44% POP · 6 mph SW (future — not yet verifiable)
2026-05-14 Eighteenmile Creek (Niagara) 61°/45° · 41% POP · 9 mph W (future — not yet verifiable)
2026-05-14 Elk Creek 63°/50° · 32% POP · 12 mph SW (future — not yet verifiable)
2026-05-14 Euclid Creek 64°/52° · 34% POP · 12 mph E (future — not yet verifiable)
2026-05-14 Genesee River 60°/45° · 46% POP · 8 mph W (future — not yet verifiable)
2026-05-14 Grand River near Painesville 67°/52° · 31% POP · 10 mph NE (future — not yet verifiable)
2026-05-14 Huron River 65°/50° · 25% POP · 10 mph E (future — not yet verifiable)
2026-05-14 Irondequoit Creek 61°/45° · 48% POP · 8 mph W (future — not yet verifiable)
2026-05-14 Johnson Creek 58°/45° · 42% POP · 9 mph W (future — not yet verifiable)
2026-05-14 Oak Orchard Creek 59°/45° · 42% POP · 9 mph W (future — not yet verifiable)
2026-05-14 Rocky River near Berea 64°/50° · 33% POP · 13 mph NE (future — not yet verifiable)
2026-05-14 Salmon River 60°/44° · 59% POP · 8 mph SE (future — not yet verifiable)
2026-05-14 Sandy Creek (Adams) 61°/46° · 51% POP · 8 mph S (future — not yet verifiable)
2026-05-14 Sandy Creek (Hamlin) 59°/44° · 43% POP · 9 mph W (future — not yet verifiable)
2026-05-14 Silver Creek 59°/46° · 48% POP · 7 mph SW (future — not yet verifiable)
2026-05-14 Twenty Mile Creek 58°/48° · 47% POP · 9 mph SW (future — not yet verifiable)
2026-05-14 Vermilion River @ Vermilion 64°/51° · 29% POP · 13 mph E (future — not yet verifiable)
2026-05-14 Walnut Creek 60°/47° · 35% POP · 12 mph W (future — not yet verifiable)
2026-05-13 Ashtabula River 67°/50° · 85% POP · 17 mph NW (future — not yet verifiable)
2026-05-13 Black River 67°/49° · 86% POP · 17 mph NW (future — not yet verifiable)
2026-05-13 Black River (Watertown) 60°/44° · 54% POP · 8 mph SE (future — not yet verifiable)
2026-05-13 Brandy Run near Girard 66°/49° · 83% POP · 15 mph W (future — not yet verifiable)
2026-05-13 Buffalo Creek 60°/45° · 65% POP · 9 mph SW (future — not yet verifiable)
2026-05-13 Canadaway Creek 63°/47° · 70% POP · 14 mph W (future — not yet verifiable)
2026-05-13 Cattaraugus Creek 62°/46° · 71% POP · 8 mph SW (future — not yet verifiable)
2026-05-13 Cazenovia Creek 61°/46° · 65% POP · 9 mph SW (future — not yet verifiable)
2026-05-13 Chagrin River @ Willoughby 68°/51° · 85% POP · 16 mph NW (future — not yet verifiable)
2026-05-13 Chautauqua Creek 64°/48° · 74% POP · 15 mph W (future — not yet verifiable)
2026-05-13 Conneaut Creek 67°/50° · 84% POP · 17 mph NW (future — not yet verifiable)
2026-05-13 Crooked Creek 67°/50° · 83% POP · 15 mph NW (future — not yet verifiable)
2026-05-13 Cuyahoga River @ Independence 68°/50° · 85% POP · 15 mph NW (future — not yet verifiable)
2026-05-13 Eighteen Mile Creek 62°/47° · 66% POP · 8 mph SW (future — not yet verifiable)
2026-05-13 Eighteenmile Creek (Niagara) 60°/44° · 65% POP · 13 mph SW (future — not yet verifiable)
2026-05-13 Elk Creek 67°/49° · 83% POP · 17 mph NW (future — not yet verifiable)
2026-05-13 Euclid Creek 67°/51° · 85% POP · 17 mph NW (future — not yet verifiable)
2026-05-13 Genesee River 60°/45° · 71% POP · 10 mph S (future — not yet verifiable)
Total snapshots in archive: 2826 · 80 shown (last 14 days, most-recent prediction per (river, date))

9 · Conditions archive (alley-wide)

Tiered retention so the database doesn't grow unbounded but the long-history aggregates that power the Alley Index, forecast verifier, and storm-pulse detector remain intact. Raw river_conditions prune weekly via rivers:clean; hourly + daily rollups are forever.

Retention policy

raw river_conditions
90 days (pruned weekly via rivers:clean)
gauge_readings
90 days
lake_temp_snapshots
forever (small volume)
precip_observations
raw 90 days; hourly + daily rollups forever
ahps_forecasts
forever
alley_index_snapshots
forever
spc_outlooks
forever
nws_alerts
forever (with ended_at marker)

Row counts (live)

river_conditions 422,491
gauge_readings 141,538
lake_temp_snapshots 2,762
precip_observations 5,226
ahps_forecasts 362
alley_index_snapshots 104
spc_outlooks 45
nws_alerts 5

10 · Data sources & cadence (operational)

Every external feed feeding SHA's intelligence stack, with the artisan command that drives it, last-fetch timestamp, and total row count. If a "last_at" is hours behind cadence, that source is stalled.

Source Cadence Driver Last at Rows
USGS instantaneous values 15 min rivers:update May 9 5:15pm 141,538
OpenWeather current 15 min rivers:update May 9 5:15pm 422,491
NWS 7-day + hourly forecast 3 hours forecasts:fetch May 9 5:07pm 31
NWS AHPS predicted flow 6 hours ahps:fetch May 9 1:38pm 362
NWS active alerts 15 min alerts:fetch-nws May 7 6:31am 5
SPC convective outlooks 3 hours spc:fetch-outlook May 9 5:17pm 45
NDBC + C-MAN lake temps 1 hour noaa:fetch-buoys May 9 3:30pm 2,762
River precip (USGS / NWS / MRMS-Lite) 5–60 min rivers:update + precip:fetch-nws + local Open-Meteo worker May 9 2:00pm 5,226
Alley Index snapshot hourly + daily 04:50 ET index:compute May 9 5:07pm 104
Run state classifier daily 06:30 ET run-state:compute May 8 12

11 · Constants reference (every threshold in one place)

Every magic number that drives a SHA decision, with the file it lives in. Edit the source to change a threshold — this page reflects the live code path. Grouped by subsystem.

Group Constant Value Where
Flow scoring In optimal zone 4 points IndexCalculatorService::scoreCondition
Flow scoring Within 30% of optimal 3 points IndexCalculatorService::scoreCondition
Flow scoring Within 60% of optimal 2 points IndexCalculatorService::scoreCondition
Flow scoring Above p95 × 1.5 Blown (0) IndexCalculatorService::scoreCondition
Temp scoring Prime band (winter + spring) 38–55°F = 3 FishingRecommendationService::analyzeTemperature
Temp scoring Good band 33–58°F = 2 FishingRecommendationService::analyzeTemperature
Temp scoring Marginal band 30–62°F = 1 FishingRecommendationService::analyzeTemperature
Clarity Clear / Stained ratio < 1.4× p50 RiverMonitorService::determineClarity
Clarity Stained / Muddy ratio < 2.8× p50 RiverMonitorService::determineClarity
Pressure Rapidly falling ≤ -1.0 hPa/hr PressureService
Pressure Falling ≤ -0.3 hPa/hr PressureService
Pressure Score modifier (rapidly falling) +2 points PressureService
Storm card Heavy-MRMS threshold 0.5 in/hr ActiveStormDetector::HEAVY_RATE_INCHES_PER_HOUR
Storm card Heavy-MRMS lookback 30 min ActiveStormDetector::HEAVY_RATE_LOOKBACK_MINUTES
Storm card Broad-rain threshold 0.10"/hr ActiveStormDetector::RAIN_THRESHOLD_INCHES
Storm card Broad-rain river count ≥ 3 ActiveStormDetector::MIN_RAIN_RIVERS
Storm card Flow-rise factor 1.5× vs 6h ago ActiveStormDetector::FLOW_RISE_FACTOR
Run indicator Lake threshold 55°F RunStateClassifier
Alley Index Calendar window ±15 days, all years IndexPercentileService::WINDOW_DAYS
Alley Index Min pool for percentile 10 days IndexPercentileService::MIN_POOL
Alley Index Excellent band ≥ 90 IndexPercentileService::descriptorFor
Alley Index Good band 70–89 IndexPercentileService::descriptorFor
Alley Index Average band 30–69 IndexPercentileService::descriptorFor
Alley Index Poor band 10–29 IndexPercentileService::descriptorFor
Alley Index Blown band 0–9 IndexPercentileService::descriptorFor
Forecast verify Snapshot time Daily 05:15 ET routes/console.php
Optimal zone Empirical promotion threshold ≥ 20 Good reports RiverFlowStatistics
Stats engine Window 3 years RiverFlowStatistics
Stats engine Outlier removal 3× IQR on log-flow RiverFlowStatistics
Stats engine Histogram bins 20 (log-space) RiverFlowStatistics
Genius Level — every figure on this page comes from a live query. Page reload = data refresh.

Scan to visit

SteelHead Addiction QR Code

SteelHead Addiction

steelheadaddiction.com