Menu & inventory
Categories, items, photos, extras, stock counts and the Excel bulk import.
Read the walkthrough script for this guide
- This is the Menu page. Categories on the left, items inside each. Add a category — say Burgers — then add an item: name, price, photo.
- Photos: upload anything; the system squares it, resizes it and compresses it automatically. You never need to edit a photo first.
- Extras and variations — spice level, sizes, add-ons — go in the options line of the item form. Mark a group required, cap how many can be picked, and give each option its own price.
- Watch the customer side: tapping the item opens a popup, required choices must be picked before Add works, and every choice re-prices live.
- Inventory: open the Inventory page, give an item a stock count. Every order counts down; at zero the item marks itself sold out and you get a WhatsApp alert before it happens.
- Big menu? Download the Excel template, fill one row per item, upload it back. Two modes: add to what's there, or replace the whole menu in one go.
- One rule to remember: your customer's cart is checked against the LIVE menu at the moment they order — sold-out items and old prices can never slip through.
Step by step
Add an item with extras and choices
One item, one required choice group and one capped extras group, in a single form.
- Open Menu. If the item needs a new section, click 'Manage categories', fill Name and Sort, press 'Add category' — only visible categories appear in the item form.
- Scroll to the 'Add item' card, fill Item name, Price and the category dropdown. Description optional.
- In the Options box, type the groups on one line:
Spice Level(required): Regular|Spicy; Extras(max=3): Extra Cheese+3|Olives+2— semicolons separate groups, bars separate choices,requiredforces a pick,max=Ncaps picks,+3adds 3.00. - Press 'Add item'. A mistake in the options line is refused with the exact problem named — nothing half-saves.
- Check your customer page: required groups must be answered before Add works, prices update per pick, and the same rules are enforced again server-side at checkout.
- Edit later via 'Edit' under the item — but rename options carefully: a rename counts as delete-plus-add, so a renamed option loses its stock tracking.
Track stock and get a low-stock warning
Turn a dish into a running count and have WhatsApp warn you before it runs out.
- Go to Menu → '📦 Inventory'.
- Find the item (untracked reads 'Stock: —'), type your count into 'Initial count', press 'Track stock'.
- The row shows 'N in stock' with three controls: 'Set' writes an exact count, '+ Restock' adds, 'Set alert' holds your warning level.
- Type a number into the alert box and press 'Set alert' — one WhatsApp lands in your managers' group the moment an order crosses below it (once, on the crossing). Needs a Managers group under Settings → WhatsApp.
- For sizes or flavours that run out separately, use the per-option Track/Set/+ controls under the item.
- Verify at the bottom under 'Stock movements' — your adjustment appears with reason
adjust; rows tint amber below the alert level and red at zero.
Replace your whole menu from an Excel file
The safe way to load a big menu, with a preview before anything is saved.
- Menu → '⇪ Bulk import (Excel)' → download the template. The sheet must be named
Menu; the 'How To' tab has the full guide. - One row per item: Category, Item Name and Price required; Description, Options, Available and Image Filename optional. Periods for decimals (
24.50), and the whole options line in one cell using the item-form grammar. - Save as .xlsx (≤4 MB), choose the file, press 'Check file' — nothing saves yet.
- Read the preview: valid-row count plus every problem as
Row 12 · Price: …. Problem rows are SKIPPED, not fatal — fix and re-upload if you want them. - Choose the mode: 'Add to current menu' (an item you already have is added AGAIN as a copy) or 'Replace menu' (hides the current menu, rebuilds from the file). Nothing is deleted either way.
- Press the confirm button; the result line reports categories, items, option groups and options landed.
Turn a dish into a mystery box
A flat-price item where the kitchen chooses what goes in — set up safely.
- Go to Marketing → Mystery item and read the 'Before you use model 3' panel — it says what the software can and cannot promise about allergens.
- Work down the Allergen declarations first: tick what an item contains and press 'Declare' — pressing Declare with nothing ticked means 'checked, contains none of the fourteen'. 'Clear declaration' means nobody has stated anything, and an undeclared item is never put in a model-3 box.
- Under 'Turn an item into a mystery box', pick the menu item that becomes the box — it keeps its own name, price and stock.
- Choose the model: 1 fixed pool with combined allergens, 2 blanket warning, 3 customer exclusions at checkout.
- Tick the dishes that may end up inside (model 1 needs at least one; 2 and 3 may be left empty = any menu item). Only available, in-stock items are ever offered.
- Optionally add a storefront line, press 'Make it a mystery box'. Undo any time with 'Stop being a mystery box'.
Common questions
How do I add categories and items?
Menu page → Add category, then Add item inside it: name, price and optional description. Items appear on your customer page instantly; deactivate an item to hide it without deleting it. Both categories and items have a Sort box (lower numbers first), so you control the running order of the whole menu.
How do I change the order my items appear in?
Every item has a Sort box — on the Add item form, and inside Edit on any existing item. Lower numbers come first within the category, and two items sharing a number fall back to alphabetical. Leave the box blank when adding and the item goes last in its category, so you can add first and arrange later. Categories have the same box on Menu → Manage categories, and the two work together: category sort decides the order of the sections, item sort decides the order inside each one. Your customer page updates the moment you save.
How do item photos work?
Every item form has a Photo control: press 'Upload a photo', pick any image, and it is squared to 800×800 and compressed on your own device before upload (WebP where your browser can make one, JPEG otherwise — always well under 300 KB), then attached when you save the item. You can also paste a hosted image URL instead, and the Excel bulk import's Image Filename column still takes full web addresses. Clearing the field and saving removes the photo.
How do extras like 'extra cheese' or 'spicy' work?
Each item can carry option groups — for example a required 'Spice Level' with Regular/Spicy, and an 'Extras' group capped at 3 picks where Extra Cheese adds 3.00. Customers see them in the item popup: required groups must be answered before Add works, and prices update live. The same rules are enforced again on our server at checkout, so nobody can bypass them.
How do I enter option groups?
In the item form's options line, using a compact one-line format — for example: Spice Level(required): Regular|Spicy; Extras(max=3): Extra Cheese+3|Olives+2. Groups are separated by semicolons, options by vertical bars, and +3 adds 3.00 to the price. The form refuses bad input with a specific message rather than guessing.
Can I rename an option without losing anything?
Renaming an option is treated as removing the old one and adding a new one, so a renamed option starts fresh — including its stock tracking if it had any. Rename thoughtfully if you track stock per option.
How does inventory tracking work?
Optional, per item and even per option. Give an item a stock count on the Inventory page; every order decrements it, and at zero the item flips to sold out by itself. Every movement (sale, cancel-restore, manual adjustment) is recorded in a ledger you can inspect.
Will I be warned before something sells out?
Yes — a low-stock WhatsApp alert is sent when the count crosses your threshold. It fires on the crossing only, so you get one timely warning, not a nagging repeat every order.
What do customers see when something is nearly gone?
An 'only N left' note on the item across all page designs. If a stale cart still holds an item that just sold out, checkout refuses politely — '"Item" just sold out — please adjust your cart' — and nothing is charged.
Does cancelling an order return its stock?
Yes. Cancelling restores the tracked stock of every line (items and options), and an item that had auto-flipped to sold out at zero comes back on sale automatically.
How does the Excel (XLSX) import work?
Download the template, fill one row per item (category, name, price, description, options in the same one-line format), and upload. Choose 'append' to add to your current menu, or 'replace' to swap the whole menu in one move — replace deactivates the old menu and inserts the new one.
Anything to know about 'replace' mode?
Replace treats the upload as a brand-new menu — old items are retired rather than edited. That also means a cheaper price in a re-uploaded menu is a new item's price, not a 'price drop' on the old item, so price-drop notifications deliberately do not fire from an import.
Can I have items that only some customers can see?
Yes — secret menu items are hidden from the normal page and unlock through a special link you share (for example with your regulars or a promotion). There is also a wallet-exclusive item that only customers carrying your loyalty card in their phone wallet can order — it shows locked to everyone else, which does the teasing for you.
What is the mystery item?
A menu line with a hidden identity — the customer orders 'the mystery box' at a set price and the kitchen decides what goes in it. Great for clearing stock playfully; you control its price and availability like any other item.
What is the chef's rotation?
A rotating featured dish — the system highlights a different pick from your chosen list so the page always has something 'today only'. You choose how picks rotate; the highlight updates automatically.
What is bring-it-back voting?
Retired dishes can be put to a customer vote. Past customers get a voting link, votes are weighted by how often someone has actually ordered from you, and you see the tally — a low-risk way to decide what returns to the menu.
Can customers be told when a price drops?
Yes — when you lower a price in the menu editor, customers who ordered that dish can be notified (you control the window and frequency). Note it fires from a real price edit on an existing item, not from re-uploading a menu file.
Why did my customer's cart show an item that I had just removed?
Their page was loaded before your change. The moment they try to order, the server re-checks everything against the live menu — removed items, changed prices and sold-out stock are all caught, the customer gets a clear message, and nothing wrong is ever charged.
What happens if I import the same Excel file twice?
In 'Add to current menu' mode you get a SECOND COPY of every item — Add never updates or removes what is already there, and the screen warns you in amber before you confirm. Re-uploading a corrected sheet should use 'Replace menu' instead: it hides your entire current menu and rebuilds it from the file. Nothing is deleted either way, so past orders keep their history.
Why did my import create a second category with the same name?
In Add mode a category is reused only when the name in your sheet matches a VISIBLE category exactly — capitalisation and spacing included. 'Burgers' and 'burgers ' are two different categories to the importer, and a hidden category is never reused. Copy the name straight from Manage categories if you want rows to land in an existing section.
Some rows in my import had errors — did the whole thing stop?
No. 'Check file' gives a preview: the count of valid rows and every problem listed as Row 12 · Price: …. If you confirm, the valid rows import and the problem rows are left out — the screen says so. Fix those rows in the sheet and upload again.
Why won't the system let me delete a category?
Delete only unlocks once a category is empty — until then the page says 'Delete unlocks when the category is empty'. Move or delete its items first, or simply untick 'visible', which takes the category and its items off your customer page while keeping everything.
Where can I see why a stock number changed?
At the bottom of the Inventory page under 'Stock movements' — when, item, change, reason and note, newest first, 50 per page. Reasons are order, cancel, restock and adjust, so a count that looks wrong can always be traced to the order or the person that moved it.
How does the system pick the Chef's pick when I let it choose?
It picks the dish that has gone longest without being featured — and among dishes that never had a turn, the one that sold least in the last 90 days. Every dish gets a turn before any gets a second one, and it deliberately does not feature your bestseller. The other modes are 'I choose it myself' and 'Work through a list I set'.
Why hasn't my price drop been announced yet?
Nothing goes out until the new price has stood untouched for the waiting period you set (default 24 hours) — so a corrected typo never reaches a customer. The drop must also clear your minimum percentage (default 10%) and be worth at least AED 1.00. The 'Recent price changes' list shows each change as 'still waiting', 'told N customers' or 'no message sent'.
Which mystery-box model should I choose?
Model 1 nominates a fixed pool of dishes and prints the pool's combined allergens; model 2 allows any dish with a blanket 'we cannot guarantee allergens' warning; model 3 lets the customer state what they cannot eat and picks around it. Model 3 is a food-safety promise: only dishes explicitly DECLARED free of the excluded allergen are offered — an undeclared dish never — and if nothing qualifies, the order is refused rather than falling back to 'pick anything'.
What's the difference between Declare and Clear declaration on the allergens list?
Two different statements. 'Declare' with nothing ticked means 'I checked this item and it contains none of the fourteen'; 'Clear declaration' means nobody has said anything at all. A model-3 mystery box will never offer an undeclared item — not-stated is not the same as contains-nothing.
