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

Year

2025

Role

Product lead

FotoKalorie meal log, scanned food detail and progress screens

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.

FotoKalorie main log, scanned food detail and progress tab

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.

Photo scan modal, calorie progress tracker and nutrition goal settings

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.

FotoKalorie onboarding steps

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.

WARSAW, POLAND
AVAILABLE WORLDWIDE

“Doing what we already know how to do
takes the world from 1 to n…
But every time we create something new,
we go from 0 to 1.”

2026 ® NORBS / Norbert Szymkiewicz

WARSAW, POLAND
AVAILABLE WORLDWIDE

“Doing what we already know how to do
takes the world from 1 to n…
But every time we create something new,
we go from 0 to 1.”

2026 ® NORBS / Norbert Szymkiewicz