case studymobileagents

Photo-in, lure-out — Flutter app that identifies fishing lures with Gemini and pairs them to nearby water.

bitewise — preview
figure · bitewise
01 · problem

Problem

You pick a lure out of somebody's tackle box and have no idea what it is, how to fish it, or what it pairs with. The existing "identify this" apps are terrible at small tackle. Gemini is not.

02 · shape

Shape

Flutter client, Firebase AI as the Gemini 2.5 Pro surface, two prompt modes: basic identification (fast, cheap) and detailed multi-question analysis (slower, thorough). An image preprocessing service crops, rotates, and normalizes before the model ever sees the photo.

03 · build

Build

Location discovery pulls from USGS and Recreation.gov's RIDB inside a 20-mile radius of the user, deduplicates by proximity, and caches results for 30 minutes so a drive around the lake does not redo the lookup. State is auto-detected from the device so the search narrows before the user touches anything. The prompt templates are versioned alongside the Dart code so changes show up in diffs.

bitewise — three-tier recommendation fallback RecommendationsService routes a query to Firebase AI Gemini. When the SDK fails to parse the response, an enhanced fallback recovers using rule tables. When the AI is unavailable entirely, a plain rule-table fallback returns a result with low confidence. FLUTTER · USER QUERY conditions input RecommendationsService tier 01 · ai gemini 2.5 flash tier 02 · enhanced recover sdk parse tier 03 · plain local rule tables FishingRecommendation conf 0.9 conf 0.75 conf 0.5
figure · service topology
04 · result

Result

The hard part was never the model; it was making the photo and the location context good enough that the model had a chance. The preprocessing pipeline + location cache do most of the real work; the Gemini call is the last mile.

stack

FlutterFirebase AIGemini 2.5 ProUSGSRecreation.gov