Inspiration

Kids outgrow toys in months. The toy goes into a closet, the box goes into the attic, and a year later nobody knows whether all the pieces are still there. Passing it on or reselling it is where the value is — but listing a single item can take ten minutes of hunting for parts and writing a description, so most people give up and the toy ends up in the trash.

We wanted a squirrel who hoards properly.

What it does

Watch the 1:53 demo: https://youtu.be/-qLnOQGR640

  • 📸 Scan a box. Photograph a product box and Oakie lists the parts that should be inside — cables, manuals, accessories, the original packaging — as a checklist. Tick what you kept and snap where you put it.
  • 🗣️ Ask out loud, Oakie answers out loud. "Where's the Switch charger?" Oakie answers where the item is and where its box and spare parts went (a natural cloud voice on paid plans, the device voice on Free), and the matching crate lights up in the 3D room. Search also works on the device, offline.
  • 🧒 Growth clock. Add your children's birthdays (they never leave your phone). Oakie flags toys that every child in the house has outgrown — and never suggests selling something a younger sibling will still use.
  • 🏷️ Ready to resell. A completeness ring, the exact list of missing pieces, an estimated value, and an AI-written listing that is deliberately honest about what's missing — plus a card you can share.
  • 👥 Passing-on circle. Offer outgrown things to friends and family first. They see a listing, never where things are stored or what you paid.
  • 🐿️ A companion, not a spreadsheet. A 3D toy room, an acorn chest that evolves as your stash gets tidier, and a coach that teaches one real step at a time. English, Thai and Japanese.

How we built it

  • App: Capacitor 6 for iOS, a Three.js 3D scene (Oakie, crates and item orbs in several layouts plus a plain list), GSAP for Oakie's reactions, MiniSearch for on-device search.
  • Backend: Firebase Authentication, Cloud Firestore (offline cache) and Cloud Functions for Firebase.
  • AI: Google Gemini, called from Cloud Functions — the app ships no AI keys.
    • Box and receipt scans use a strict response schema where unknown values must be null, not guessed.
    • Receipts are checked with arithmetic (line totals → subtotal → total) and escalate from a fast model to a stronger one only when the math fails or confidence is low.
    • Product lookups use Google Search grounding; an item is marked "web verified" only when grounding returns sources.
    • When the preferred model is overloaded, requests fall back down a model ladder, and a second model starts in parallel if the first is slow — the first good answer wins.
  • AI energy: every AI action reserves its maximum cost first and settles the real cost afterwards inside a Firestore transaction, so failures and retries never create free usage.

Challenges we ran into

  • Getting AI to admit what it cannot see, without making it useless (schema + nulls + arithmetic checks + an eval harness).
  • Money-safety bugs that normal tests miss. A connection blip must never make a paying user look like a free user. In sandbox testing, restoring a purchase on a second account left the plan on Free: RevenueCat's TRANSFER event carries no app user ID, and our webhook rejected it. We fixed that, and the entitlement lookup now resolves RevenueCat's internal IDs to our entitlement names.
  • Speed. Overloaded AI models made scans take up to 30 seconds. Hedged requests and a fail-fast model ladder cut that, and the "Sold" button now celebrates instantly instead of waiting on the server.
  • Keeping shared listings private: friends read a separate, whitelisted listing, never the real inventory document.

Accomplishments we're proud of

  • A scan-to-checklist flow that turns "is anything missing?" into a two-tap answer.
  • A growth clock that respects younger siblings.
  • A monetization model where every paid tier maps directly to what it costs us to serve.

What we learned

  • Honest AI beats confident AI for household data: people forgive "I couldn't read that", not a wrong charger.
  • The hard part of resale isn't demand — it's the effort of finding every piece.

What's next

  • A growth album: the toys each child loved, by age, with cost per day of play.
  • Bundle listings for lots of outgrown kids' items; more marketplace formats.
  • Android release.

Music in the demo video: "Carefree" by Kevin MacLeod (incompetech.com), licensed under Creative Commons: By Attribution 4.0 — http://creativecommons.org/licenses/by/4.0/

Built With

Share this project:

Updates

Submission history