Tagline

Photograph a piece of fruit, get a small celebration. A fruit habit game app with no calories, no grams, and no way to lose.

Inspiration

In 2022 I had bariatric surgery. A series of complications afterwards turned the recovery into something far harder than the operation, and I nearly died.

What came next wasn't "deciding to eat better." It was learning to eat again from zero. Tiny portions, one food at a time, with a body that refused most of what I gave it. Fruit is where I landed, and it's where I stayed. Pineapple in particular, which is why the pineapple leads the crew in this app. I came out of it owing fruit something. Frutalia is me paying that back.

What it does

Frutalia makes eating fruit feel like joining a party. You photograph what you're eating. The app recognises it, celebrates it, and adds it to your day. You build streaks, complete small missions, and a crew of characters grows around you as you go. No calories, no grams, no macros, no nutrition scores.

Every nutrition app I'd tried was built on subtraction (count this, cut that, stay under a limit). Frutalia only ever notices what you added. There's no target to fall short of, because there's no target.

How it works

  1. A small daily mission arrives ("something red today", "any citrus").
  2. You accept it when you're ready, and you choose your own window. The app never starts a clock you didn't start.
  3. Snap the fruit. Live camera only, no gallery uploads.
  4. The character reacts, diamonds land, the streak ticks over.
  5. Any fruit keeps your streak.
  6. You can play mini-games to learn more about a fruit and collect a crew member card.

How we built it

iOS 26.6+, SwiftUI throughout, Swift 5 language mode on the Swift 6 toolchain. Progress lives on the device.

Fruit recognition runs on-device with Vision (no upload, no server in the loop) which is what let the privacy policy promise that photos stay on your iPhone. For future, I will implement the Foundation Model + Apple PCC.

The only backends are two small Cloudflare Workers: one serves the seasonal-fruit table so content ships without an app release, the other handles the waitlist, one trial-reminder email, and Sign in with Apple token revocation for account deletion. Every one fails closed.

Subscriptions run on the RevenueCat SDK, weekly and yearly against a single entitlement. Crash reports and usage statistics go through Firebase. It ships through Xcode Cloud: a post-clone script generates the Tuist project.

The character art and the marketing site were built almost entirely with AI.

Accomplishments I'm proud of

The onboarding is really fun. I try to make it very easy and make users enjoy this moment. Also, create with AI all crew (mascots) members arts was a new skill that I learned.

Challenges we ran into

Designing a game that can't punish you. Gamification runs on loss aversion, and loss aversion is exactly the diet-culture mechanic this product exists to avoid. I had to solve every retention problem twice — once the obvious way, then again without the guilt.

Making AI-generated art consistent enough to be a design system. This was the real engineering problem in the art. Same prompt, six poses, six subtly different characters You cannot build a character family on vibes.

What we learned

Constraints beat prompts. Every hour I spent writing the canon saved more than any amount of prompt tweaking. AI is extremely good at execution and extremely bad at remembering what it did five minutes ago so the memory has to live outside it.

What's next for Frutalia

  • Character levels and cosmetics;
  • Recipes as a second axis of variety: the same fruit as juice, sliced, baked;
  • Regional and rare fruits with location on, Frutalia suggests what actually grows near you;
  • Beyond fruit: vegetables

Built With

  • eat
  • festival
  • food
  • fruits
  • frutalia
  • habit
  • mascots
  • missions
  • photo
  • pineapple
  • recognise
  • swiftui
  • vision
Share this project:

Updates

Submission history