Skip to content
David Cao
--:----/--
04 June 2026Fishing Forecast • Data Logic • Side Project

The Fishing Forecast Started With One Question: Is This Spot Worth the Drive?

Why I built Coastal Fishing Forecast, how the engine handles searched locations, and why unsupported places should be rejected instead of scored.

Coastal Fishing Forecast started because I kept doing the same small ritual before fishing: check the weather, check the tide, look at the map, remember a few past sessions, then still leave home half-guessing.

The first product question was simple: is this spot worth the drive today?

The repo is deliberately separate from my Derwent-specific local engine. That local one can be tuned around known spots. This project is the generic product track, the version that could support searched places, GPS previews, jetties, beaches, rocks, bay edges, channel edges, and estuaries.

The biggest design decision was not the scoring. It was refusing to score places the engine does not understand.

In the code, the preview path samples nearby coordinates around a searched point and looks for broad water signals. It checks water fraction, coastline transitions, nearby supported water, and water type hints. The output is intentionally low confidence for searched locations because a random coordinate should not be treated like a curated fishing spot.

The engine works around four outputs:

  • resident opportunity
  • roaming opportunity
  • trip quality
  • overall recommendation

That structure helps because it stops the forecast from becoming one mysterious number. A beach can have poor resident conditions but still have a roaming window. A sheltered estuary should not be judged the same way as open surf. A searched inland lake should be rejected rather than dressed up as a coastal forecast.

The current development flow is very CLI-heavy: preview commands, date-range forecasts, search-to-forecast responses, and regression replay. That is not glamorous, but it lets me test the engine before building a nice interface around it.

Next I want better regional rules, sheltered-water behaviour, and catch feedback from real trips. The score should become something I can argue with after fishing, not something that pretends the ocean agreed to the JSON.