Back to work

Product design · Concept · 2026

Zest

Logging food fails on effort and on judgement. Zest takes the effort and drops the judgement.

Role
Product and UI design
Platform
iOS app, 390×844
Scope
10 core screens, 11 edge-case screens, design system
Status
Concept, designed in Figma with an interactive prototype
Zest welcome screen on an iPhone held in two hands: “Point your camera at a plate.”

The problem

Counting calories by hand means search, weigh, type. It is slow enough that people stop. And the moment a day goes over plan, red numbers and “you failed” make them stop faster.

The brief came with two user stories. Both break on that same effort.

“How many calories are in this dish or product?”
Today the answer takes a search, a guess at the portion and some arithmetic, for every item on the plate.
“Find me a recipe that suits me.”
Most recipe lists ignore what the person has already eaten, so “suits me” turns into guessing.

Hypothesis

If logging a meal is one photo and one confirmation, and the app states facts without verdicts, people will log more of their meals and keep logging through days that go over plan.

If recipes are ranked by what is left today and say why they fit, people will choose one instead of guessing.

This is a concept. Nothing here has been built or tested with users yet, so every decision below is a bet on this hypothesis, not a proven result.

Photo to logged meal

The key flow

The whole flow is one photo and one tap. The person points the camera at the plate and fits the dish inside the ring. Zest names what it can see, then estimates each portion. The result shows the calories, the macros and what this meal means for the day.

  • Estimates are marked “≈”. Zest says “≈ 60 g”, not “60 g”, so nobody mistakes a guess for a measurement.
  • Everything is editable. Every detected line opens with a tap, and the portion can be changed before or after saving.
  • Nothing is logged without a tap. “Nothing is added to your day until you confirm it” sits right under the detection list.
  • Context, not a score. The result says “Breakfast is 41 % of today’s fat, 33 g of 80 g” and shows where the day stands, with no good or bad label.
Capture screen: camera with a ring around the plate and Photo, Barcode and Type it modes
Capture · fit the dish in the ring
Analysing screen: detected items with estimated weights, one item still estimating
Analysing · names, then portions
Result screen: avocado toast and soft-boiled eggs, 516 kcal, macros and an Add to my day button
Result · one tap to add
Today screen: week strip, 1,056 kcal left, macros, last meal and dinners that fit
Today · what is left

Role of AI

It does the tedious part

The AI names what is on the plate, estimates each portion, does the arithmetic against today’s targets and suggests what fits next. The person stays in control.

When it is unsure, it says so. If two dishes look alike from above, Zest asks “Is it one of these?” and shows how sure it is: pesto pasta at 82 %, pasta with courgette at 58 %. The person picks one, or types it in.

Ask Zest

The Zest tab is a chat about food that already knows the day. To “Can I still have pasta tonight?” it answers with the fact first, “Yes, it fits your calories”, shows the budget with the pasta added, and is honest about the trade-off: carbs would go 21 g past 260. Then it offers next steps: plan it for dinner, a half portion, or something lighter.

Ambiguous recognition: Is it one of these? Pesto pasta 82 % sure, pasta with courgette 58 % sure
Unsure · 82 % and 58 %
Ask Zest chat: Can I still have pasta tonight? Yes, it fits your calories, with a budget card and suggestions
Ask Zest · facts, then options

Recipes that fit what is left

Recipes and recipe detail

Recipes open on “Dinners that fit what is left”: 540 kcal and 24 g of protein to spend, and every recipe fits both targets. Each card says how much it leaves spare, for example “Leaves 60 kcal spare”, so the list is ranked by the day and not by popularity.

The recipe page explains why this fits you in plain lines: it lands at 480 kcal, 60 under what is left; 38 g of protein covers the 24 g still to go. It names the trade-off too: fat goes 5 g past 80 g, and 100 g of salmon instead of 140 g keeps it inside.

Recipes: dinners that fit what is left, with filters and recipe cards showing calories, protein and kcal spare
Recipes · ranked by the day
Recipe detail: miso salmon with greens, 480 kcal, why this fits you, macros and ingredients
Recipe detail · why it fits

No verdicts

When a day goes over

Going over plan is where most people quit, so this is where the tone matters most. When the day goes past the target, Today says “Here’s where today landed”: 120 kcal past 2,400, 5 % over plan. The note reads “Dinner went 120 kcal past plan, 5 %. Tomorrow starts fresh at 2,400.” No red alert, no “failed”.

History works the same way. The calendar shows a bar for each day, its length the share of the 2,400 kcal, and a small “+” marks a day that went over. It records what happened and leaves the judgement out.

Daily target exceeded: Here's where today landed, 120 kcal past 2,400, tomorrow starts fresh
Over plan · a fact, not a failure
History: September calendar with bars per day and a plus for days that went over, and the day summary
History · bars and a quiet “+”

Beyond the happy path

When the app is used in unexpected conditions, Zest keeps the same rules: fact first, no verdicts, one clear way forward.

No food detected: I can't find a plate here, with Retake the photo and Type it instead
No food detected · retake or type it
Ambiguous recognition: two options with confidence
Ambiguous dish · pick one of two
Image too dark: turn on the flash or move towards the light
Too dark · how to fix the light
Flash on, plate in view
Flash on · plate readable again
No connection: the photo is saved and queued, read when back online
No internet · photo saved and queued
Barcode not found: not in our list yet, photograph the nutrition label
Barcode not found · read the label
Nutrition label camera: fit the whole nutrition table inside the frame
Label camera · per 100 g values
Daily target exceeded: 120 kcal past 2,400
Over target · tomorrow starts fresh
First day empty state: your first day starts now, 2,400 kcal to spend
First day · empty, not blank
Correcting an estimate: sourdough toast, change 60 g if the slice was bigger or smaller
Correcting · change one line
Camera access is off: turn on the camera or type it instead
Camera off · another way in

Design system

Tokens, components, states

Every screen is built from components, and every colour, size, gap, radius, stroke, blur and type setting comes from a variable. Tokens live in three collections: Primitives hold the raw values and stay hidden; Zest · Natural gives them meaning (ground, bloom, ink, action, macro, surface, space, radius and so on); Typography holds family, weights, sizes, line heights and tracking.

Interactive components carry their states as variants: default, pressed and disabled, plus selected or loading where they exist. They are wired as interactive components, so the prototype presses and selects like the real thing.

Some states carry the product rules. The budget card has four states, from an empty day to a day over plan, and “over” is shown as “+120 kcal over” in the same calm style. The camera lens has four states too: framing, reading, unsure and dim.

Budget card component in four states: empty, before, after and over
Budget card · empty, before, after, over
Lens component in four states: framing, reading, unsure and dim
Lens · framing, reading, unsure, dim

How it would be measured

Targets, not results

Zest has not launched, so there are no numbers to report. These are the measures the product would be judged on.

North star
Share of a person’s meals logged per active day, at week 4.
Supporting
Median time from opening the camera to a confirmed log. Corrections per logged meal, which should fall as Zest learns portions. Days still logged after an over-budget day. Recipe plans per week.

What I would check next

The design has not been tested with users yet. The first checks I would run go straight at the hypothesis:

  • Is one photo really faster? Time people logging the same meals by photo and by manual search, and count how often they need to correct an estimate.
  • Does dropping the verdict keep people logging? Show the over-plan day with and without the red “failed” framing, and ask whether they would log the next meal.
  • Do “why it fits” lines change the choice? Ask people to pick a dinner from the ranked list with and without the reasons, and see whether they choose faster and stick with the choice.

Like this project?

Let’s design a product people keep using.

Next projectGlobal Print NordPrint shop e-commerce