Fishing Intelligence Agent
A Pennsylvania trout stream intelligence system that combines live gauges, weather, classifications, and geology into explainable fishing reports.
Problem
Useful stream conditions are fragmented across USGS gauges, weather forecasts, PFBC classifications, and local geology. Anglers need a grounded answer, not a pile of raw data.
Approach
I built a deterministic scoring pipeline with shared CLI, API, and web surfaces, then used maps and optional narrative output to make the underlying facts readable.
Outcome
The private project now supports multiple Pennsylvania streams, multi-area handling for the Lackawanna River, ArcGIS-backed trout classifications, limestone overlays, and a test-covered service layer.
Highlights
- USGS and Open-Meteo data feed deterministic flow classification and fishability scoring.
- PFBC ArcGIS layers replaced brittle PDF ingestion for trout classification data.
- The LLM path is constrained to rewrite known facts, not invent stream conditions.
Deterministic First
The core report is computed before any prose is generated. Gauge readings, weather, thresholds, trout classifications, and geology overlays produce structured facts that can be rendered as CLI text, JSON, web UI, or narrative.
That boundary keeps the system debuggable. If data confidence is low, classification is omitted instead of guessed.
Geospatial Enrichment
The project uses PFBC ArcGIS endpoints for trout classifications and a precomputed limestone overlay from Pennsylvania geology data. A Leaflet map makes the overlap between trout water and limestone geology visible.
Longer streams created real identity problems. The Lackawanna River is split into multiple gauge-backed areas with explicit reach handling instead of pretending one gauge can represent the whole river.
Product Boundary
The project is intentionally Pennsylvania-only. That constraint keeps threshold tuning, source selection, and classification semantics coherent enough to productize.