Home / Help Center / pos-app-bakery / bakery / Nutrition Labels
🏷️ bakery

Nutrition Labels

Nutrition Labels generates a printable, FSSAI-style Nutrition Facts label for any recipe — energy, protein, carbs, fat, fibre and sodium per 100g (and per serving if you set one), plus allergen information and a computed best-before date.

📍 Menu path: Bakery → Nutrition Labels
👤 Who uses it: All roles with access to the Bakery menu (the page itself does not add extra permission checks beyond the sidebar's feature/tier gate)
🏷️ Plan tier: advanced+

Overview

Pick a recipe from the searchable list on the left; its label renders live on the right using the nutrition values, allergen list and shelf-life recorded against that recipe on the Recipes page.

Every value on the label is calculated from the recipe's per-100g nutrition figures — if you enter a serving size, a second "Per Serving" column is scaled automatically (serving size ÷ 100 × the per-100g value).

If the recipe has a shelf life (in days) recorded and you set a batch/production date, the label automatically prints a Best Before date (production date + shelf-life days).

This page is purely a label generator — it never edits the recipe itself. All the data it prints (nutrition figures, allergens, shelf life) is entered and maintained on the Recipes page.

Before You Start

Step-by-Step Guide

1 Print a nutrition label for a recipe

  1. Use the Search recipes… box to find the recipe, then click it in the list to select it.
  2. Optionally enter a Serving size and its Unit (g / ml / piece / slice) to add a "Per Serving" column to the label.
  3. Set the Batch / production date (defaults to today) — this is what the Best Before date is calculated from, if the recipe has a shelf life set.
  4. Set Copies to print if you need more than one label.
  5. Click Print label (or "Print N labels") to open your browser's print dialog with only the label(s) visible on the page.
💡 Only up to 4 label copies are actually rendered on screen and sent to print in one go, no matter how high you set Copies — for anything above 4, the page shows a "+N more labels will print" note but you will need to print in batches of 4 to get the full quantity.

2 Understand what is printed on the label

  1. The label header shows "Nutrition Facts" and the recipe name, followed by the serving size line (if one was entered) and a Per 100g / Per Serving table.
  2. Rows cover Energy, Protein, Total Carbohydrate (with Sugars indented underneath), Total Fat (with Saturated Fat indented underneath), Dietary Fibre and Sodium.
  3. If the recipe has allergens recorded, an "ALLERGEN INFORMATION" box lists them by their FSSAI-friendly name (e.g. "Milk & Dairy" instead of the internal code DAIRY) plus a standard "may contain traces" disclaimer.
  4. The footer always shows a "% Daily Values based on 2000 kcal" note and an FSSAI compliance line, plus the calculated Best Before date when applicable.

Every Field & Button, Explained

Field / ButtonWhat it does
Search recipes…Filters the recipe picker list by name as you type.
Recipe listClick a recipe to select it and generate its label preview; the selected recipe is highlighted.
Serving sizeOptional numeric serving size; when set, adds a scaled "Per Serving" column next to the "Per 100g" column.
UnitUnit for the serving size — g, ml, piece or slice.
Batch / production dateThe date the batch was made; combined with the recipe's Shelf Life Days to compute the Best Before date shown on the label. Defaults to today.
Copies to printHow many labels you intend to print (1–100); only the first 4 are actually rendered/printed per click — see the note above.
Print label / Print N labelsOpens the browser print dialog with only the rendered label(s) visible; nothing else on the page prints.
Nutrition Facts tableEnergy, Protein, Total Carbohydrate (+ Sugars), Total Fat (+ Saturated Fat), Dietary Fibre, Sodium — shown per 100g and, if a serving size is set, per serving.
ALLERGEN INFORMATION boxOnly appears if the recipe has allergens recorded; lists each allergen by its FSSAI-style name plus a "may contain traces" disclaimer.
Best Before lineOnly appears if the recipe has a Shelf Life Days value greater than zero and a batch date is set.

Tips & Best Practices

Troubleshooting & FAQ

All the nutrition rows show "—" for a recipe.
The recipe's Nutrition fields (calories, protein, carbs, etc.) have not been filled in on the Recipes page yet. Add them there and reselect the recipe here.
No allergen box appears on the label.
That recipe has no allergens recorded. Add its allergens on the Recipes page (or use the Allergen & Dietary page) — the box only renders when at least one allergen is present.
Best Before date is missing from the label.
Either the recipe has no Shelf Life Days set on the Recipes page, or no Batch / production date was entered here — both are required to compute Best Before.
I set Copies to 10 but only 4 labels came out.
The preview (and what gets printed) is capped at 4 label copies per print action, regardless of the Copies value. Print again for the remaining copies.
The Per Serving column isn't showing.
It only appears once you enter a Serving size — leaving it blank shows the Per 100g column only.

🧑‍💻 Developer Notes

Source component(s):

  • frontend-app/packages/pos-react-lib/src/pages/fnb/NutritionLabelPage.jsx

Backend endpoints used:

  • GET /recipes

Related tables (db-core repositories):

  • Recipe

Feature flag key: nutrition_labels (requires advanced plan tier or above)

This page is entirely read-only against the backend — it fetches GET /recipes once and does all label math (per-serving scaling, best-before date, allergen name mapping) client-side; nothing is ever written back. Printing works by injecting a temporary @media print stylesheet that hides everything except #nutrition-print-area, then calling window.print() and removing the injected style. The label preview renders at most Math.min(copies, 4) copies via Array.from({ length: Math.min(copies, 4) }), which is also therefore the hard cap on what a single print action produces.