Nutrition & Health — putting macros on your menu
The Nutrition & Health plug-in turns your menu into something a diner can ask hard questions of. “Show me high-protein dishes under 400 calories.” “What’s low in sodium tonight?” Today your menu can’t answer either. With the plug-in on, it can — and the numbers come from your own ingredients, not promises.
This is one of the optional plug-ins on your account. Owners with a hotel spa, a healthy-oriented food truck, a venue that serves athletes, an old-people’s home, or anywhere customers care about the calorie count want it on. A pizzeria selling indulgent comfort food can leave it off. Same product, different switch.
What it does
Every ingredient you stock gets a nutritional profile — calories, protein, fat, saturated fat, carbs, sugar, fiber, sodium, all per 100 g. The system fills it in for you: it looks up the ingredient in two public databases (one open and free, one from the US government), and only when both miss does it ask the AI for an estimate. You see exactly where each number came from — a green badge if it’s from a database, an amber badge if the AI made the call.
Every recipe that uses the ingredient gets a per-portion rollup. Multiply the ingredients by quantity, divide by the recipe’s yield, you have nutrition per dish. Edit one ingredient and every dish using it updates automatically — same way costs work today.
Every menu item that links back to a recipe gets the rollup denormalised onto it. When a customer opens your public menu, four chips appear above the dish list — 💪 High protein, 🧂 Low sodium, 🔥 Low calorie, 🍯 Low sugar. Tap any combination, the menu trims to dishes that hit all the thresholds. The diner finds what they’re looking for in two taps; you didn’t write a line.
The rule
The numbers are calculated, not promised. Every value is traceable to an ingredient that has a source you can audit. Nothing on the menu is a guess.
That’s the whole product principle. It’s why diners trust the filters and why you can put numbers on the menu without losing sleep over a complaint.
How to turn it on
The plug-in is off by default. Activating it is a single switch in Super Admin → Entitlements for your venue. Once on, the 🥗 Nutrition tab appears on every ingredient and every recipe in the admin, and the 🥗 Nutrition filter row appears on your public menu for any dish whose nutrition has been calculated.
The plug-in needs two other things to be on too: Inventory (so it knows what you stock) and Recipes & BOM (so it can roll ingredients up to dishes). Most venues already have both. If you don’t, activate them first.
Filling in the numbers
Open any ingredient — say, your bottle of San Marzano tomatoes. Go to the 🥗 Nutrition tab. The first time you visit, it’s empty. Click Calculate from AI.
In a few seconds, you’ll see a small table: 34 kcal · 1.7 g protein · 0.2 g fat · 6 g carbs · 4 g sugar · 1.8 g fiber · 11 mg sodium. Below the title, a badge tells you where it came from: green OpenFoodFacts for a public-database hit, green USDA if the US database had it, amber AI estimate if the AI had to fill in. Click ✓ Confirm values when you’ve reviewed them — the badge flips to green Staff-verified, and next time someone clicks Recalculate, your values are preserved.
If a number looks wrong, click ✎ Edit. The table becomes editable. Type the correct values, optionally adjust the unit-to-grams factor (default assumptions cover kg→1000 and ml→1, but olive oil is ≈0.92 g/ml and syrup is ≈1.3 g/ml — override here for accuracy), and click Save & verify. You’ve overridden the auto-calc; the badge stays staff-verified until you call Recalculate.
You do this once per ingredient. Then you never touch it again unless your supplier changes.
Rolling up to a recipe
Open any recipe and scroll to the bottom. There’s a 🥗 Nutrition · per 1 portion card. The first time, it’s empty. Click Calculate and the system walks every ingredient in the bill of materials, multiplies by quantity, applies yield loss (a chef who portions a fish loses 20% to bone and trim — the system already knows from your inventory yield setting), and divides by the recipe’s yield.
You’ll see the per-portion numbers and a confidence badge:
- 🟢 High — every ingredient in the recipe is staff-verified or from a public database.
- 🟡 Medium — at least one ingredient is on an AI estimate.
- 🔴 Low — at least one ingredient has low-confidence data.
If some ingredients are missing nutrition data, the card lists them with deep-links so you can fix the gaps in one pass and come back.
You don’t need to remember to click Recalculate — every time you edit the recipe BOM, or someone updates an ingredient’s profile, the rollup re-fires automatically. The card always shows fresh numbers when you open it.
What the customer sees
The customer opens your public menu on their phone. Above the category bar, a new row of chips appears: 🥗 Nutrition · 💪 High protein · 🧂 Low sodium · 🔥 Low calorie · 🍯 Low sugar.
These chips are only there if at least one dish on your menu has nutrition data. A pizzeria that hasn’t filled in any ingredients won’t show the chips at all — the bar disappears, the menu reads exactly as it does today. The moment one dish has nutrition rolled up, the chips appear.
The thresholds match the conventions diners expect:
- High protein — at least 20 g of protein per portion.
- Low sodium — at most 600 mg of sodium per portion.
- Low calorie — at most 400 kcal per portion.
- Low sugar — at most 5 g of sugar per portion.
Tick one chip, the menu trims. Tick three, it trims harder — the system finds dishes that pass all the active filters at once. Untick to widen.
If a dish doesn’t have its nutrition calculated yet, it stays off the filtered view (because we can’t say whether it qualifies). The customer doesn’t see the dish “isn’t tagged” — they just see fewer matches until you finish the rollup. The fastest way to get a clean public menu is to calculate nutrition for your popular dishes first; everything else can follow.
Worked example
It’s Tuesday afternoon at Ottocento Wellness Hotel, a spa-resort in Tuscany that switched on the Nutrition plug-in last week. The head chef Beatrice is preparing the autumn menu, and she’s been told by management that 40% of guests are health-tracking — they’re looking for high-protein lunches under 500 kcal.
She opens her dish Filetto di branzino alle erbe (sea bass fillet with herbs). She’s calculated the nutrition for sea bass already last month, and for olive oil and lemon. Three of the four ingredients are green-badge. The fourth — sale rosa dell’Himalaya, her pink Himalayan salt — was on an AI estimate. She opens the salt, reviews the values, sees they look right (almost pure sodium, ~38 g per 100 g — about right), clicks Confirm. The badge flips green.
She goes back to the dish and clicks Recalculate. The card updates: 312 kcal · 38 g protein · 14 g fat · 2.1 g carbs · 0.4 g sugar · 480 mg sodium. Confidence is now 🟢 high.
She opens the public menu on her phone, taps 💪 High protein and 🔥 Low calorie. The branzino is one of seven dishes that pass both filters. She screenshots and sends to the wellness manager: “Eccoti i sette piatti pronti per gli ospiti in dieta. Tutti calcolati dagli ingredienti, non promesse.” The wellness manager texts back two minutes later: “Perfetto. Aggiungiamoli al menu wellness della prossima settimana.”
Time from opening the salt to confirming a menu with seven filterable dishes: under three minutes.
What it doesn’t do
Be honest with what the plug-in is and isn’t.
It doesn’t make medical claims. “Buono per il cuore” / “good for heart” is a Phase 2 feature we’re saving for later — those are health claims in EU law (Regulation 1924/2006) and have to be reviewed against an evidence base. Phase 1 only shows numerical thresholds (the diner asks “low sodium” and gets dishes with low sodium — that’s a fact, not a promise).
It doesn’t capture cooking transformations yet. The numbers are based on the ingredient as it goes into the recipe — raw. Frying adds oil (your recipe BOM already captures that). Boiling drains water-soluble vitamins (we don’t track those yet — Phase 3). For most dishes the difference is small; for a dish where it matters (e.g. boiled vs raw spinach), use the Notes field on the recipe to give the kitchen guidance and treat the per-portion value as a starting point.
It doesn’t second-guess your numbers. Whatever’s verified by your staff stays — even if a future Recalculate would have overwritten it. You and your chef are the authority. The system is the assistant.
It doesn’t show up if you don’t want it. Each menu item has a Hide nutrition toggle — useful for dishes where the numbers smash the upsell story (tiramisu, ricco gelato al pistacchio). The numbers are still calculated in the background, you just don’t expose them publicly.
Who can see and edit it
Two separate permissions control nutrition inside the admin, on top of having the plug-in switched on. View nutrition info lets a person see the nutrition tab on an ingredient and the nutrition breakdown on a recipe — without it, those panels simply don’t appear for them. Edit nutrition info is the one that lights up the Calculate from AI, Edit, and Confirm values buttons; someone with view-only sees the numbers but no buttons. Both come bundled in the Owner and Manager roles by default, so for most teams this just works. If you want a nutrition reviewer who can read but not change the figures, give them View and leave Edit off. Set these per role on the Roles page or per person on the Members page.
Costs
This is part of your subscription’s optional plug-ins. Different account, different price — talk to your contact at us about pricing for your tier. What you pay for in usage terms:
- Ingredient lookup against public databases (OpenFoodFacts, USDA) — free for you, free for us.
- Ingredient lookup via AI fallback — about 2 credits per ingredient that misses both public databases (~70% of common items hit a database; the AI is for the long tail). One-time per ingredient — the result is cached forever, until you Recalculate.
- Recipe rollup — free. Built on the same plumbing as the cost rollup.
- Public-menu filtering — free. The chips run client-side against data already in the menu response.
A typical 300-ingredient venue spends about $0.20 in AI costs to fully populate the catalog the first time. After that, the cost is zero unless you add new ingredients.