Modifiers — the per-item customisations the diner picks
A diner about to tap Add to cart on the Margherita doesn’t always want it plain. They want extra mozzarella. They want no garlic. They want a gluten-free base. Modifiers are how every one of those small choices becomes part of the order — priced correctly, sent to the chef clearly, and deducted from stock accurately. The same picker the diner sees online is the picker the cashier uses at the till. Same shape, same data, one source of truth.
This page is for two readers. If you’re the owner, “Why this page exists” is for you — start there. If you’re the chef, jump to “How to use it” and skim down.
Why this page exists
Without modifiers, a customised order becomes a free-text note on the order ticket. The chef squints at “no garlic, extra cheese” scribbled in the notes box and hopes the rider got it right. The till charges the base price because the choice never carried a price. The mozzarella sack on the shelf still reads “untouched” because nobody deducted the extra portion the kitchen actually used.
Modifiers fix all three things at once. The diner ticks a box; the cart adds €2 to the line; the chef sees Extra mozzarella under the dish on the kitchen ticket; the inventory sack of mozzarella drops by 30 grams when the order closes. One tick, three places reconciled.
The other reason this page exists is consistency between the cashier and the diner. The picker the diner sees in the public cart is the same picker that opens on the till when the cashier rings up a walk-in. Same groups, same rules, same price deltas, same required/optional logic. Train the staff once and the diner inherits it.
The rule
A modifier is a small, named choice that lives in a group, attaches to an item or a whole category, carries its own price delta, and can deduct from stock. The diner picks once; the price, the ticket, and the pantry all move together.
What a modifier actually is
Three things stack on top of one another. The modifier option is the leaf — Extra mozzarella, Spicy ‘nduja, No garlic, Gluten-free base. Each option has its own name, its own price delta (positive, negative, or zero), and, if you want, a link to one inventory row with a quantity change. Extra mozzarella might be +€2 on the price and +30 g of mozzarella off the cheese row at close time. No garlic might be +€0 on the price and −1 clove of garlic added back to the garlic row (because the recipe normally consumes one and the kitchen didn’t use it tonight).
The modifier group is the named bundle that holds the options — Pizza extras, Cottura, Pasta type, Sauce on the side. A group decides the rules of the picker: single-select (pick exactly one — the steak’s Cottura group, where the diner picks rare, medium, or well-done and only one), or multi-select (pick zero, one, or many — the pizza’s Pizza extras, where the diner can stack three toppings if they want). A group is also marked required or optional. Required means the diner can’t add the item to the cart without making a pick — the Add to cart button stays disabled, and a small note explains what’s missing.
The attachment is where the group lands. A group can attach to a single item (the Cottura group lives on the Bistecca alla Fiorentina row, nowhere else) or to a whole category (the Pizza extras group attaches to the Pizza category, so it applies to every margherita, marinara, and quattro formaggi underneath). The category attachment is the one that saves real time on a 30-pizza menu — write the group once, every pizza picks it up.
How to use it
Open the admin app and head to Modifiers. You see a list of every group you’ve configured, grouped by what they attach to. Tap + New group to create one. The dialog asks for a Name (the heading the diner sees in the picker — Pizza extras, Cottura, Sauce), a Selection type (Single select — pick one or Multi select — pick many), an optional min and max for multi-select groups, and the Required toggle.
Once the group exists, add its options. For each option you set a name, an optional price delta in euros, and an optional inventory link — pick the inventory row the option deducts from and how much per pick. Extra mozzarella points at the Mozzarella di bufala row in the pantry with a delta of +30 g. No garlic points at the Garlic row with a delta of −1 clove. The system reads “delta” as “what this option changes about the recipe’s default deduction” — a positive delta means more comes off the shelf, a negative delta means less.
Then attach the group. Either open the menu item you want it to apply to and pick the group from the Modifier groups picker on the item, or open the inventory category and attach the group at the category level. A pizza category with Pizza extras attached means every pizza item inherits the group automatically — no per-item work.
The diner side is automatic. On the public menu, any item with at least one active group shows Customize & add instead of Add to cart. Tapping it opens the picker. Each group appears as a section: the heading from the group’s name, a Pick one / Pick up to N / Pick any hint, a Required badge where it applies, and the options listed with their price deltas (+€2, +€0, −€1). The headline price at the bottom updates live as the diner toggles options. Add to cart stays disabled until every required group has a pick.
What happens behind the scenes
The picker on the diner’s phone only collects the IDs of the options they ticked — it never trusts the names or prices the browser reports. When the diner sends the order, the system reloads every option from its canonical row, checks that the option actually belongs to a group attached to that item, enforces the required / single / max rules a second time, and snapshots the name and the price and the inventory link onto the order line. From that point on the order line owns its own copy of every pick — if you later raise the price of Extra mozzarella from +€2 to +€2.50, the order in flight keeps the +€2 the diner agreed to.
When the operator sends the order to the till from the inbox, the same snapshot copies straight onto the till’s order line. The kitchen ticket renders one indented row under the dish name for every pick — the chef reads Margherita / ↳ Extra mozzarella / ↳ No garlic without squinting. When the order closes (the cashier rings up payment), the deduction engine subtracts the base recipe’s ingredients exactly as usual, then walks each modifier on the line and applies its inventory link with the pick’s quantity multiplied by the line quantity. Two margheritas with extra mozzarella deduct 60 g of mozzarella on top of the base recipe, not 30.
If the same item gets added to the cart twice with different picks — one Margherita with extra mozzarella, one Margherita with no garlic — the cart keeps them as two separate lines. The diner can change the quantity on one without affecting the other, and the kitchen sees two distinct tickets.
If a modifier gets deactivated between the moment the menu loaded and the moment the diner submits, the server-side validation refuses the order with a clear message — the diner re-opens the picker, the deactivated option is gone, they pick again. No phantom modifiers reach the kitchen.
Worked example
Marco, the chef at your venue, sits down on a Monday morning to add modifier options to the pizza category. He opens Modifiers, taps + New group, names it Pizza extras, picks Multi select — pick many, leaves it optional, and adds five options:
| Option | Price delta | Inventory link |
|---|---|---|
| Extra mozzarella | +€2 | Mozzarella di bufala, +30 g |
| Spicy ‘nduja | +€3 | ’Nduja paste, +20 g |
| Anchovies | +€1.50 | Anchovy fillets, +15 g |
| No garlic | +€0 | Garlic, −1 clove |
| Gluten-free base | +€3 | Gluten-free flour, +250 g (and a parallel −250 g on the regular flour at close time, set up as a small recipe swap rule) |
He attaches the group to the Pizza category. Every pizza on the menu — Margherita, Marinara, Diavola, Quattro Formaggi, Capricciosa — picks it up the next time the menu cache refreshes. Marco doesn’t open any of the individual pizza items.
Tuesday evening, Anna orders dinner from home. She taps the Margherita (priced at €11), hits Customize & add, the picker opens. She ticks Extra mozzarella (price climbs to €13) and No garlic (still €13, but the kitchen will know). Add to cart. The cart drawer shows:
Margherita ×1 €13 ↳ Extra mozzarella +€2 ↳ No garlic +€0She fills in her address and name, taps the Send order via WhatsApp button. The venue’s phone buzzes; the message lists the pizza with the picks on indented lines underneath. Marco reads it, taps the order link, sends it to the till from the inbox. The kitchen-display screen at the pass shows the pizza with Extra mozzarella and No garlic on indented lines under the dish name. The pizzaiolo plates the pie, double-cheese, no garlic, exactly what Anna asked for.
Twenty minutes later the rider drops it off and the cashier closes the order. The pantry rows reconcile in the same second: the Mozzarella di bufala row drops by 80 g (the base recipe’s 50 g plus the modifier’s 30 g), the Garlic row stays untouched (the recipe’s 1 clove would have come off, but the modifier’s −1 cancelled it), the rest of the recipe deducts as usual. Anna got the right pizza, the chef got a clean ticket, and the next morning the Below par filter on the pantry shows the mozzarella sack a hair lower than the day before — the right hair lower, with the modifier’s contribution included.
One tick on the picker, three places reconciled.
Related features
- Online vs in-venue — the per-category visibility split that decides whether the Customize & add button is reachable online or only at the table
- How the AI thinks about your menu — modifier choices feed the AI’s understanding of a diner’s preferences; an order with No garlic teaches the AI something about that customer
- Photos and videos on a menu item — modifiers don’t change the photo on the card; the photo is always of the base dish
- Recipes — the base recipe each modifier deducts from on top of; the modifier is a delta on the recipe, not a replacement
- Editing an inventory item — the rows the modifier’s inventory link points at; changing the mozzarella supplier on the row cascades through every modifier that deducts from it
- Where your information lives — modifiers live on the menu, the picks ride on the order, the deductions land on the pantry