FotoKalorie: Calorie Tracking with AI Vision
Scan your meal, know your macros. An effortless, AI-powered nutrition tracker that removes the friction of manual logging.
Client
FotoKalorie
Deliverables
Mobile app development
UX/UI design
Distribution consulting

Scan the plate, not the database
A photo goes up, structured macros come back, and the day’s totals move. Everything else in the app exists to make that one loop worth repeating.
01 The challenge
Calorie counting fails because logging is work.
Manual entry is tedious and inconsistent, and it is the single biggest reason people abandon a nutrition goal. The brief was to make logging feel like nothing at all.
FotoKalorie answers it with a scan-and-go loop: capture an image, send it for analysis, receive structured nutritional data, and show it back in a form someone can act on. That meant an AI vision pipeline, a serverless backend, and a design that never makes the user wait without knowing why.
Industry
Health, fitness, AI
A consumer nutrition tracker competing with manual-entry incumbents.
Scope
Product to store
Full-stack mobile development, AI vision integration, UI/UX and the monetisation strategy.
Platform
iOS and Android
One Expo React Native codebase shipping to both stores.
Core tech
GPT-4o and Supabase
OpenAI GPT-4o vision, Supabase for data and storage, RevenueCat and Superwall for subscriptions.

Log, detail, progress
The day’s meals, a scanned plate broken into macros, and the progress tab: the three surfaces a user moves between all week.
02 The scan pipeline
From photo to macros in seconds, or an honest failure.
The image is normalised to JPEG on device, uploaded to Supabase Storage and sent to GPT-4o vision. A parsing and validation layer turns the model’s answer into structured JSON before anything reaches the screen, so a malformed response never renders as a confident number.
Latency is the part users feel, so the wait is explicit and the result arrives as a card that can be corrected rather than a total that simply appears.
03 Targets worth hitting
The data only matters once it is someone’s day.
Personal daily macro targets are calculated from the Mifflin-St Jeor BMR rather than a generic default, so the numbers belong to the person reading them.
A nutrition carousel gives the at-a-glance state, daily and weekly charts carry the detail, and streaks exist to make the habit visible, not to punish a missed day.

Scan, progress, goals
The scan modal, the calorie tracker and one of the goal-setting steps that produce a person’s targets.
04 Monetisation
Paywalls placed at moments that have earned them.
Superwall handles placement and campaign management, so a paywall can be shown at a moment that makes sense rather than on launch. RevenueCat handles purchases and entitlements across both stores.
A custom purchase controller and a debounced sync between the two services keep entitlement state consistent, which is what stops a paying user being shown a paywall they already cleared.
05 System and architecture
A themeable component system on a serverless stack.
The interface is built with NativeWind on a shadcn-inspired component system, with class-variance-authority for variants. It keeps the UI consistent and themeable without a bespoke styling layer to maintain.
Behind it: Expo and Expo Router with route groups for public, protected and premium areas; Supabase for Postgres, auth and storage with row-level security enforced; EAS for builds and over-the-air updates.

Onboarding, kept short
Only the questions that change someone’s targets. Everything else is asked later, or inferred.
06 Results
A first year on both stores.
FotoKalorie launched on iOS and Android in 2025. The figures below are the first-year numbers from RevenueCat, Superwall and App Store Connect.
12,400
Installs across iOS and Android
71%
Completed a first scan within sixty seconds of onboarding
6.2s
Median photo-to-macros latency
91%
Scans accepted without a manual correction
13%
Paywall views to trial start, 1,180 from ~9,100
34%
Trial to paid, giving 401 subscribers
$10.4K
Gross subscription revenue, first year
22%
Day-30 retention, from 41% at day seven
People forgive an app that admits it is unsure about a lasagne, and abandon one that confidently reports the wrong figure.
07 What the numbers changed
The fix was not a better model.
The 9% of scans needing correction were not spread evenly. They clustered on mixed plates and packaged food, cases where one photo genuinely underdetermines the answer, and no amount of prompt engineering resolves that.
So rather than chase accuracy, we changed what the interface claims. The result card became editable in place, and a low-confidence scan now says it is uncertain instead of presenting a guess as a fact. Acceptance rate turned out to be a design number as much as a model number.
Next project