Offline-first angler log — structured environmental snapshots, on-device pattern engine, lazy sync.

Problem
Serious anglers want their log to answer one question: given today's conditions, what has worked here before? Existing apps capture the catch and drop the context — no stream gage, no moon phase, no wind. That is the wrong trade.
Shape
Flutter on top of Drift (SQLite) so the whole app works on the dock with no signal. Every catch links to an environmental snapshot — weather, water, moon phase, gear, spot, trip. Open-Meteo and USGS are the external sources; WorkManager queues fetches and retries them when the connection returns.
Build
The pattern engine is on-device: a similarity score between the current environmental snapshot and every historical catch, ranked by lure success. No network round-trip, no cloud model, no PII leaving the device. The schema is normalized enough to run real queries — catches by species, by gage height band, by barometric trend — without scanning every row.
Result
The log answers the pattern question without a server. An angler at a boat ramp with no signal can log a catch, pull a similarity-ranked list of historical lures for the current gage and barometric trend, and walk back to the water without waiting on anything.
stack
FlutterRiverpodDriftWorkManagerOpen-MeteoUSGS