Dish
A composed food item combining ingredients and reusable sub-recipes.
A Dish is a composed food item that combines individual ingredients with other reusable recipes as sub-components. Unlike a simple recipe, a dish can include entire recipes as ingredients — enabling complex menu items like a Buddha Bowl that references a Hummus recipe.
What is a Dish in BetterMenu?
Like a recipe, a dish has a title, description, ingredients, and instructions. The key distinction is that a dish's ingredient list can reference entire sub-recipes — not just individual food items. This hierarchical composition model reflects how professional kitchens actually operate: a line cook assembles a finished plate from pre-prepared components, each component produced from its own recipe. BetterMenu mirrors this structure in the data model. A dish acts as the top-level menu item that a guest orders, while sub-recipes represent the discrete preparations — sauces, bases, garnishes, protein preparations — that are combined to produce it. Because dishes reference sub-recipes by identity rather than by copying their ingredient lists, any change to an underlying sub-recipe propagates automatically to every dish that uses it. This single-source-of-truth approach reduces the risk of ingredient discrepancies across a large menu and keeps nutrition calculations current when formulations change.
How does a Dish differ from a Recipe?
A recipe is a standalone preparation with its own ingredients, instructions, yield, and servings. A dish extends this model by allowing its ingredient list to contain not only individual food items — each with a quantity and measurement unit — but also complete recipe objects treated as sub-components. Consider a Vegan Buddha Bowl offered on a restaurant menu. Its composition might be:
Quinoa— 150 g (individual food ingredient)Avocado— 50 g (individual food ingredient)Roasted Chickpeasrecipe — 1 serving (sub-recipe)Hummusrecipe — 2 tablespoons (sub-recipe)Tahini Dressingrecipe — 1 tablespoon (sub-recipe)
The bowl contains discrete food items alongside fully specified sub-recipes. Each sub-recipe carries its own ingredient list, preparation instructions, and yield. The dish aggregates all of them into a single sellable menu item. In BetterMenu's data model, a dish response object includes a subRecipes array alongside a standard ingredients array, distinguishing the two types of components explicitly.
Why use Dishes instead of a single flat Recipe?
Flattening every component into a single recipe removes the ability to reuse preparations across multiple menu items. Sub-recipe architecture solves this by maintaining each preparation as an independent record. Reuse across the menu is one benefit; accuracy in nutritional calculations is another, equally important benefit. When Tahini Dressing is updated — for example, when a supplier changes the sesame paste formulation — updating the single Tahini Dressing recipe record propagates the corrected ingredient data to every dish that references it: the Vegan Buddha Bowl, the Falafel Wrap, the Grain Salad, and any other dish on the menu. Without sub-recipe architecture, each of those dishes would require a separate manual update, and the risk of one being missed is substantial. For operators running menus across multiple locations, maintaining a library of reusable sub-recipes is a foundational operational practice.
How does dish composition work?
The diagram below illustrates the relationship between a dish, its sub-recipes, and the individual ingredients within each sub-recipe.
%%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#ffffff','primaryTextColor':'#000000','primaryBorderColor':'#000000','lineColor':'#000000','secondaryColor':'#f5f5f5','tertiaryColor':'#ffffff'}}}%%
graph TD
A[Dish: Vegan Buddha Bowl] --> B[Individual Ingredient: Quinoa 150g]
A --> C[Individual Ingredient: Avocado 50g]
A --> D[Sub-Recipe: Roasted Chickpeas]
A --> E[Sub-Recipe: Hummus]
A --> F[Sub-Recipe: Tahini Dressing]
D --> D1[Ingredient: Chickpeas]
D --> D2[Ingredient: Olive Oil]
D --> D3[Ingredient: Spices]
E --> E1[Ingredient: Chickpeas]
E --> E2[Ingredient: Tahini]
E --> E3[Ingredient: Lemon Juice]
F --> F1[Ingredient: Tahini]
F --> F2[Ingredient: Garlic]
F --> F3[Ingredient: Lemon Juice]Each node at the leaf level is an individual food record resolved against BetterMenu's food database, which carries the nutrient and allergen data used in downstream calculations.
How does nutrition aggregate across a dish?
Nutrient totals for a dish are computed by summing the nutrient contributions from every component — both individual ingredients and sub-recipes — scaled to the quantity specified in the dish's ingredient list. For each sub-recipe used in the dish, BetterMenu scales the sub-recipe's per-serving nutrient values by the portion of that sub-recipe included in the dish. The scaled nutrient amounts from all components are then summed to produce the dish's total nutrient profile. This aggregate is divided by the dish's serving count to yield per-serving Nutrition Facts. The calculation follows the same scaling principles that govern packaged food labels under 21 CFR 101.9, where all reported nutrient amounts correspond to a single declared serving size. Because dishes may combine sub-recipes with different yield units — one sub-recipe yielding in grams, another in milliliters — BetterMenu resolves all quantities to a common mass-equivalent before aggregation, using the density factors stored on each food record.
How are allergens and dietary classifications determined for dishes?
Allergen and dietary data for a dish is the union of allergen and dietary data across all components. If any individual ingredient or any ingredient within any sub-recipe contains a major food allergen, that allergen is surfaced on the dish. This union logic ensures that the allergen declaration for a menu item is always complete, even when an allergen enters through a deeply nested sub-recipe component. For example, Tahini Dressing contains sesame — a major food allergen under the Food Allergy Safety, Treatment, Education, and Research (FASTER) Act of 2021, effective January 1, 2023. The Vegan Buddha Bowl dish that references Tahini Dressing will therefore carry a sesame allergen declaration, even though sesame does not appear directly in the dish's top-level ingredient list. Similarly, dietary classifications such as vegan, gluten-free, or low-sodium apply to a dish only if all components satisfy the criteria. A single non-conforming ingredient in any sub-recipe removes the claim from the dish.
What are the FDA menu labeling requirements for standard menu items in the United States?
In the United States, the composition and calorie content of a dish carries direct regulatory significance for chain food service operators. Under 21 CFR 101.11 — the FDA's rule implementing Section 4205 of the Patient Protection and Affordable Care Act — covered establishments must disclose calorie information for standard menu items. A "covered establishment" is a restaurant or similar retail food establishment that is part of a chain with 20 or more locations doing business under the same name and offering for sale substantially the same menu items. A "standard menu item" is a food item that is routinely included on a menu or menu board and is offered for sale on a continuous basis. The calorie disclosure requirement applies to the menu item as sold — that is, to the complete assembled dish, not to individual components in isolation.
The regulation requires that calorie declarations appear on menus and menu boards in a type size no smaller than the type used for the name or price of the standard menu item, whichever is smaller, and in a manner consistent with other information on the menu. For self-service food and food on display — such as items at a buffet or salad bar — calorie information must appear on a sign adjacent to the food. Covered establishments must also make additional written nutrition information available on request; this information must include total calories, total fat, saturated fat, trans fat, cholesterol, sodium, total carbohydrates, fiber, total sugars, and protein. The full regulatory text is at 21 CFR 101.11.
FDA guidance on the menu labeling rule — including compliance guidance for covered establishments, vending machine operators, and similar retail food establishments — is published on the FDA's menu labeling resources page at FDA Menu Labeling Requirements. The guidance addresses edge cases such as variable menu items (dishes with customer-selected add-ons or substitutions), seasonal offerings, and temporary menu items that fall outside the "standard menu item" definition.
BetterMenu's dish model maps directly onto the regulatory concept of a "standard menu item." The calorie value surfaced on a dish record represents the total calorie count for the assembled dish as it would be served, supporting compliant calorie disclosure under 21 CFR 101.11 without requiring manual calculation by the operator.
What platform capabilities does BetterMenu provide for dishes?
Menu analysis features enable compliance verification for dishes that must carry FDA calorie disclosures under 21 CFR 101.11. When a covered establishment's menu is loaded into BetterMenu, the platform identifies standard menu items, calculates aggregate calorie totals from sub-recipe composition, and validates that calorie values are present and non-zero before menu publication. For R&D teams and food manufacturers, the dish API endpoint returns a structured response that includes the full sub-recipe tree, per-component nutrient contributions, aggregated per-serving Nutrition Facts, the union allergen set, and dietary classification flags. Dietitians and clinical professionals can use dish-level nutrition data to assess complete meal compositions rather than evaluating individual components in isolation, supporting accurate dietary analysis for menu-based patient counseling. Changes to any sub-recipe that alter allergen status, calorie totals, or dietary classifications propagate to all affected dishes and are surfaced in the platform's change-impact view before the updated dish is published to a menu.