Inspiration

Every angler has a phone full of fish photos and no idea what half of them are. Field guides are dry, ID apps feel like homework, and the magic moment — landing something rare — evaporates into a camera roll. We wanted catching a fish to feel like pulling a rare card from a booster pack.

What it does

Reelio turns every real catch into a collectible trading card:

  • Snap → ID. Photograph your catch and a two-stage AI vision pipeline identifies the species, using your GPS location to judge what's plausible there.
  • The reveal. Your card drops face-down into dark water. Tap it: it shakes (harder for rarer fish), 3D-flips, and bursts with a rarity-colored glow — Epic and Legendary cards get particles, rotating gold light rays, a pulsing screen-edge aura, holographic foil that shifts as you tilt the phone, and an original chiptune jingle tiered by rarity.
  • Server-computed rarity. Common → Legendary, scored deterministically from species rarity, how unusual the catch is at that location, and trophy size vs. species average. The server is the authority — you can't fake a Legendary.
  • Catchdex. Every species you haven't caught is a silhouette waiting to be filled in. Completion bar, rarity filters, NEW ribbons on fresh catches.
  • Trading-card details. Habitat, depth, diet, edibility, size ranges, fun facts, and flavor text on every card. Share cards straight from the app.

How we built it

  • App: Expo / React Native + TypeScript, Reanimated for the pack-opening reveal (3D flip, particles, foil parallax via DeviceMotion), expo-audio for the jingles.
  • Backend: Supabase — Postgres with row-level security, private photo storage, and Deno Edge Functions. identify-fish does auth → atomic daily-limit reservation → photo download → Claude vision ID → species-cache enrichment → deterministic rarity → card mint.
  • AI: Anthropic Claude with forced tool-use, so every identification returns strict, schema-validated JSON. A species cache means each species is enriched by the LLM exactly once.
  • Monetization: RevenueCat powers Reelio Pro — free anglers get 3 IDs per day (enforced server-side, race-proof), Pro unlocks unlimited identifications and full catch history. A RevenueCat webhook keeps entitlements in sync server-side, including subscription transfers.
  • Audio: five original chiptune jingles synthesized from scratch — no borrowed game audio.

Challenges we ran into

  • Anti-cheat for a collectible game: rarity and size estimates live in a JSON card blob that users must be able to edit (species-correction flow) — but only some fields. Postgres column grants can't scope JSON keys, so a trigger rejects client changes to server-authoritative fields.
  • Race-proof free tier: parallel identify requests could blow past the daily limit. Fixed with an atomic count+insert under a per-user advisory lock, reserved before any LLM spend.
  • Honest measurements: the model is instructed to estimate size/weight only when a visible scale reference (hand, lure, ruler) is in frame — otherwise null. No fabricated trophies.

Accomplishments we're proud of

The reveal moment. Shake anticipation scaled by rarity, tiered haptics, original audio, and a Legendary sequence that feels earned. Also: the entire security model survived an adversarial test suite (impersonation, forged rarity, self-granted Pro — all blocked).

What we learned

Ship the dopamine first. The identification tech is the utility, but the card flip is why people come back. And server authority isn't optional in a collecting game — the first thing anyone tries is minting a fake Legendary.

What's next for Reelio

Trading between anglers, leaderboards per lake, seasonal card frames, and a tournament mode where local anglers race to complete a regional dex.

Built With

Share this project:

Updates

Submission history