How it works · FAQ

How Riffle decides
if it’s worth the trip.

Riffle reads live conditions on Pacific Northwest salmon and steelhead rivers and turns them into one honest number: is it worth fishing today? Here’s exactly how that number is built and weighted.

How a score is built

4 steps
1

Gather

Source agents fan out in parallel — dam & hatchery fish counts, USGS river flow and water temperature, weather and pressure, and recent angler reports. Any source that is down is simply skipped.

2

Score

A pure function combines the readings into a 0–100 score using the active model’s weights and curves. No clock, no network, no randomness — the same inputs always produce the same number.

3

Explain

An AI layer writes the plain-language briefing about that score. It can describe the number but is never allowed to change it.

4

Record

Every score is snapshotted with the exact readings that drove it and a fingerprint hash, so any recommendation can be reproduced and audited later.

How it’s weighted

Heuristic Baseline

The active model blends five factors. Each gets a weight; the river’s reading for that factor is scored against a curve, and the weighted average becomes the headline number. These are the live weights from config/scoring-models/ — tuning the engine means editing config, never code.

compare every model version ↗

Factor weights

Fish counts
30
River flow
25
Water temperature
25
Weather & pressure
12
Recent angler reports
8

Common questions

6 answers

What does Riffle actually tell me?

Whether it’s worth making the trip. Each river gets a single 0–100 score and a plain rating — Excellent, Good, Fair or Poor — for its target salmon or steelhead run right now, plus a confidence level so you know how much data is behind it.

Which rivers and fish does it cover?

Salmon and steelhead water across the Pacific Northwest — Washington’s Puget Sound, Olympic and Columbia rivers, Oregon’s coast and Willamette system, and the Columbia/Snake mainstem. Each spot is tied to a specific run: Chinook, Coho, Sockeye and Pink salmon, plus summer and winter steelhead.

Does the AI decide the score?

No. The score, confidence and every per-factor contribution come from a deterministic function. The AI only writes the human-readable briefing about that result — it can never move a number. That separation is the core design rule of the whole engine.

What happens when a data source is down?

The score is computed from whatever reported in, and the missing source lowers confidence rather than breaking the result. A river with no live gauge still scores from weather, fish counts and angler reports — you just see a lower confidence figure and a note about what was unavailable.

Why “deterministic and reproducible”?

So the recommendation is trustworthy and auditable. Every score is stored with its raw inputs and a hash; re-running the engine over those stored inputs reproduces the exact same number. The spot page shows that check live.

Can I change how it’s weighted?

The weights live in versioned JSON config, not in code, and several versions can be scored side-by-side against real angler feedback. Browse the live weights and how each version is performing on the Models page.

Ready to check conditions?

See today’s score for every river.

Browse rivers