Get in touch
All work

Case study · Food

Vegan Lens

A meal, a label, a menu, a barcode. Four ways to ask one question, answered in seconds. And when the answer is not clear, the app says so.

Solo build. iOS and Android, one codebase, one backend. Researched, designed, built and shipped by me.

Client
Personal project
Role
Research, design, engineering, content and the business model. Everything.
  • React Native
  • Expo
  • Open Food Facts
  • OpenStreetMap
  • USDA data

The back of the packet

Sarah has been vegan for years, and I have spent a lot of that time standing next to her in supermarket aisles.

She picks something up, turns it over, reads the ingredients. Then reads them again, not because the list is long, but because half of it is written in a language designed not to be read. Casein is milk. Carmine is beetles. Isinglass is fish, it is in the beer, and it is not on the label at all.

Two minutes a packet. A dozen packets a shop. And at the end of it, still a maybe.

I watched that happen enough times to stop seeing it as her problem and start seeing it as a solvable one.

Then I met everyone else it happens to

Once I started asking other vegans, the same three complaints came back almost word for word.

  1. The label. Animal ingredients hiding behind names nobody should have to memorise, and no way to check in the ten seconds you actually have.

  2. The menu. Eating out is either an interrogation or a gamble. Most menus mark nothing, and plenty of dishes are one small ask away from being fine. You just cannot tell which from the page.

  3. The quiet one. A plant-based diet reliably runs short on a specific handful of nutrients: B12, iron, zinc, calcium, iodine, omega-3 and vitamin D. Every vegan I spoke to knew that. Not one of them knew where they actually sat on any of it.

Then I looked at what existed, and the market had the same shape as her phone. Barcode checkers that only work when there is a barcode, which there never is on a plate or a menu. Calorie trackers that measure forty things and surface none of them. A restaurant finder here, a recipe site there. Six apps for one diet, none of them speaking to each other, and every one of them sounding completely certain.

Screen to come

Six separate apps on one side, one scan on the other

The fragmented before, against the single after

The answer, and how sure it is

Point the camera at anything. A plate. The small print on the back. A whole restaurant menu. A barcode. Seconds later you get one of three answers: vegan, not vegan, or uncertain.

That third answer is the entire product.

Every scanner I tested would rather be confidently wrong than visibly unsure, which is why their reviews are full of people who trusted one and should not have. Vegan Lens shows what it saw, how sure it is, and where the doubt sits. If it cannot tell, it says so, and tells you what would settle it.

From there it closes the loop. One tap logs the meal. The week shows which of the seven nutrients you are short on, and recipes come back ranked to fix that specific gap, matched against what is already in your kitchen. Or, if it is a Friday, somewhere nearby that will feed you.

Screen to come

An uncertain verdict, with its reasoning shown rather than hidden

Screen to come

The next step offered when the answer is not clear

The uncertain verdict, and the next step it offers

What it turned into

Five sections, and four of them start in the fifth.

  1. Today is the daily picture: what you ate, and the seven nutrients, with a warning before a gap becomes a deficiency.

  2. Pantry tracks what you have, nudges you before it expires, and builds shopping lists in aisle order.

  3. Discover holds the recipes and the map of vegan-friendly places nearby.

  4. You is streaks, badges and a Sunday recap, with a weekly grace day, because punishing someone for a missed Tuesday is not motivation.

  5. And in the middle, Scan.

The scan is the start of a loop, not the end of a question.

Scan

Point the camera at a plate, a label, a whole menu or a barcode.

Scan → verdict → log → gap → recipe → pantry

  1. Scan. Point the camera at a plate, a label, a whole menu or a barcode.
  2. Verdict. Vegan, not vegan, or uncertain, with what it saw and where the doubt sits.
  3. Log. One tap puts the meal in the day, so the answer does not stop in the aisle.
  4. Gap. The week shows which of the seven nutrients you are running short on.
  5. Recipe. Recipes come back ranked to close that specific gap.
  6. Pantry. Ranked against what is already in your kitchen, with the shopping list in aisle order.

Building it

I built it solo, with AI assistants doing the typing while I did the deciding.

It started as a 49-screen interactive prototype with real state, real gestures and real sound, before a single line of app code, then got ported screen for screen.

The interesting problem was never the interface. It was making an answer worth trusting.

Three rules did most of that work.

  1. The model was chosen for how it behaves when it is unsure. A cheaper configuration answered “vegan” where “uncertain” was correct, and a confident wrong answer is worse than no product.

  2. Nothing is falsely precise. Every nutrition figure is a range, never a number pretending to be measured.

  3. The facts come from open data, not the model’s memory. Barcodes from Open Food Facts, restaurants from OpenStreetMap, nutrition from a bundled USDA-derived table. The AI reads the photo. It does not invent the world.

Trust ended up being an architecture decision too. Photos are resized, stripped of location and never stored. A consent screen names the AI provider before the first scan. Deleting your account actually deletes it, everywhere.

The business runs the same way round. Barcode scanning is free and unlimited forever, because the free half is the half people share. The subscription buys unlimited AI scanning and the full nutrition picture. No ads, nothing sold, and no invented social proof: the ratings row on the paywall stays switched off until the ratings are real.

Where every fact comes from

Four sources, and each one only answers the question it is actually qualified for.

The factWhere it comes fromWhat it is allowed to do
A barcodeOpen Food FactsName the product and list its ingredients
A place to eatOpenStreetMapPut vegan-friendly places on the map
A nutrition figureA bundled USDA-derived tableGive a range, never a number pretending to be measured
What is in the photographThe AI vision modelRead the image, and say how sure it is

The app’s own data sources. Open Food Facts and OpenStreetMap are open databases; the nutrition table is derived from USDA FoodData Central and ships inside the app. The model reads the photograph and nothing else.

What I took from it

I built this for someone I go home to, which sets a bar that a market opportunity never would. I could not ship something that would tell her a thing was fine when it might not be.

That constraint turned out to be the product. Anything can answer instantly. The whole job, the model choice, the ranges, the sourcing, the wording of a verdict, was making the answer honest enough to act on.

Every competitor optimised for sounding sure. The gap in the market was doubt, admitted out loud.