How do I build my menu and share it with customers?

Build your menu with photos, allergen and dietary badges, choice steps, reusable choices, VAT rates, serving times, set menus and deals — then share it as a live, searchable page.

You build your menu on the Menu page in the dashboard sidebar, and customers see it as a tidy read-only page on their phones — no ordering, just a beautiful live menu.

Menu management needs the Pro plan or above, or the Order & Pay product — without either, the page shows "Menu management is available on Pro and Complete" alongside the product route. Staff need menu permissions to make changes: by default Hosts can only view, while Managers and above can add and edit.

Already have a menu somewhere — photographed, a PDF, on your website, or in a spreadsheet? The Import menu button at the top of the page reads it in for you, and shows you every dish to check before anything is added. See importing your menu.

Build your menu

To change a dish later, open it, edit and click Save changes. You can't delete a category while it still contains dishes — move or delete the dishes first. If deleting a dish would leave its category empty, the delete confirmation offers a tick-box — "This leaves the section empty — remove the section too?" — so you can clear both in one go; leave it unticked (the default) and the empty section stays. Empty sections never show on your public menu either way. If a live set menu or deal points at the section, the confirmation says so — with no dishes in it the deal simply isn't offered until dishes return. Deleting a dish or section that a promotion's scope or a loyalty reward's menu link points at also warns you first, naming what's affected — "Delete anyway" proceeds, and the promotion then stops matching until its dishes are re-picked. Replacing your whole menu via the menu import shows the same warning, listing every affected promotion and reward before anything is wiped.

Give a dish choices (sizes, sauces and more)

Some dishes come in versions — a choice of size, wings or ribs, a pick of sauces. Open the dish and use its Choices section to set them up:

If a single option runs out mid-service (say, the ribs), mark just that option sold out — the dish and its other choices stay available.

Your public menu shows each dish's steps as a quiet "Choices:" line under the description — for example, "Choices: Choose your size · Wings or ribs · Pick your sauce" — so customers know what they'll be asked at the venue. The menu itself stays a browse-only page: no ordering, no option prices listed there. Your own dashboard's dish rows show the same "Choices:" prompts at a glance, so you can see which dishes already carry a step without opening them.

Let guests pick the same item more than once

Sometimes the right answer is three of the same thing — ten wings across six sauces, four hash browns on one builder breakfast. Open the choice step and switch on Allow the same item more than once: guests then get − and + buttons against each option instead of one-tap picks, with the running count stated plainly as they go and a line telling them they can have the same item more than once. Each extra one adds the option's +£ again — three hash browns at +£1 each add £3.

With repeats on, How many can they pick? counts the total number of items rather than different options, so it can be bigger than the list itself — "up to 10 items from these 6 options" is exactly the point (totals can go up to 50). If one option shouldn't hog the lot, set Most of any single item — a per-option cap ("no more than 3 of each"). The editor's Guests will see line previews the rule in plain English before you save, and switching repeats back off simply clamps the numbers to the list size again.

Wherever the order travels next — the kitchen and bar screens, the printed day sheet, receipts and confirmation emails — repeated picks show once with a count, like "Hash brown ×3", never three identical lines.

Reusable choices — build a step once, share it across dishes

A bar menu makes the problem obvious: 40 spirits, one "Choose your mixer" question. Rather than copying it 40 times, build it once as a reusable choice — the Menu page's Reusable choices tab. (If you knew these as "choice sets", it's the same thing renamed.)

The point of a reusable choice is that editing it updates every dish using it — add a new mixer once and all 40 spirits offer it. Because that's powerful, saving an edit first tells you its reach ("This will change 41 dishes") before anything happens, and each one shows Used by N dishes with the list one click away. A reusable choice that's still on dishes can't be deleted — remove it from those dishes first. If one gains a priced option, every dish using it switches to a From price automatically, exactly as if you'd priced the option on the dish itself.

Allergens, alcohol and VAT on a dish

Each dish's edit form also carries three compliance fields (added for at-table ordering, but you can fill them in any time):

VAT defaults — set the rate once, not dish by dish

Most venues charge the same one or two VAT rates across the whole menu, so there are two optional defaults that fill the rate in for you:

Defaults apply to new dishes only — the rate is stamped onto each dish as its own VAT rate at the moment you add it, and setting or changing a default never changes dishes you've already added. To set a rate on existing dishes, edit the category and click Apply {rate}% to all N existing dishes — after a confirmation, it sets that rate on every dish currently in the category, including dishes that already had a different rate. Dishes keep their rate even if you later change or clear the default.

Serving times on a category

A category can carry serving times — a lunch section served weekdays 12–3, a breakfast page that ends at 11. Set them in the category's own edit form: its Serving times block takes day pills plus a start and end time per window, with several windows allowed (up to 21; an end at or before the start runs overnight, so 21:00 to 02:00 covers a late bar). The category list marks timed sections with their hours, and the same windows are also editable on Settings → Order & Pay → Serving times, where the per-category ordering switches live (see Order & Pay).

Out of hours the category is never hidden: it stays on your customer menus with its serving times shown against its name — "Served Mon–Fri 12:00–15:00" — so customers can still read tonight's dinner menu at breakfast. It just can't be ordered: at-table ordering won't take its dishes outside the window, and a pre-ordering party can't pick its dishes for a booking that falls outside the window either — both say why in plain words rather than failing silently. A category with no serving times is simply available whenever ordering is, exactly as before.

Set menus & deals (Complete)

The Menu page has a second view — switch from Menu to Set menus & deals at the top. Here you bundle existing dishes into one price: a course-based set menu ("3 courses for £25"), a simple bundle ("burger + any drink £15") or a pick-several deal ("any 3 for £15" — set a slot's Customer picks count above 1) — one engine covers all three. For the pick-several kind there's a shortcut: the tab's Build-your-own deal button pre-shapes a pick-any-3, whole-category deal for you — choose the section and the price and it's ready to save. (The dish editor points the same way: if you find yourself building a "pick any 3 from these sections" dish out of choice steps, what you're really building is a set menu & deal — use the template instead.) When a customer picks several from one slot they can choose the same dish more than once by default (three of the same small plate is a legitimate "any 3"); switch on Each pick must be a different dish in the deal's editor to require variety — the customer's picker then greys out a dish already chosen in that slot, and a deal that applies automatically only ever counts each dish once per slot. Each deal also chooses where it shows on the ordering menu: At the top of the menu (the default), Inside a category, At the top AND in its category (the same deal's card in both places — customers pay the same wherever they tap it), or Hidden — applies by itself. A deal placed in a category announces itself as a compact chip just under that category's heading — the deal's name and price, one chip per deal — with its card inside the section and a small "Part of …" marker on each dish in the deal; the category's name itself is never changed.

Every visible deal also has an Apply automatically switch, on by default: while it's on, a customer whose basket contains dishes that fill the deal gets the deal price even if they never tapped the card — always in the customer's favour, folding the dearest qualifying dishes into the bundle. Switch it off and the deal only applies when a customer taps the card and picks their dishes. A hidden deal never appears on the menu at all and always applies by itself — that's its whole point (it has no switch). For example, with "3 cocktails for £15" and four cocktails at £8, £7, £6 and £5 in the basket, the £8 + £7 + £6 become the £15 bundle and the £5 one stays full price — the customer pays £20 and the basket names the deal with the saving shown. An automatic apply only ever happens when it makes the order cheaper, and it applies again each time the basket qualifies again. Set menus & deals are part of Order & Pay, so they need the Complete plan or the Order & Pay product; customers choose their dishes step by step when ordering at the table.

A few rules worth knowing: a sold-out dish drops out of its pick-lists automatically, and if a slot ends up with no available dishes the whole deal stops being offered until you fix it (deleting a dish a deal references does the same). Automatic promotions never apply to set menus & deals — an offer that applies by itself only ever discounts individually priced dishes. A promo code the customer types CAN come off deal prices while the Promo codes can be used on deal prices toggle (Settings → Order & Pay, on by default) is on — switch it off and typed codes leave deal prices alone too; a code limited to certain items never touches a deal either way (see How do promotions, deals, rewards and gift cards work together?). And if you've set dish VAT rates, customer receipts, the daily sales email and the per-item sales CSV all split the bundle price across the chosen dishes' rates automatically (in the CSV, a deal whose dishes span more than one rate appears as one row per rate — for example "Steak Night (20% VAT portion)" and "Steak Night (0% VAT portion)" — each showing how many deals were sold and that portion's exact sales, VAT and net figures; if any chosen dish has no rate set, the deal's VAT cells stay blank rather than guessing).

One deal, several prices — priced by how many they pick (Complete)

Some menus print the same offer at more than one size — "3 small plates £14.99 · 5 for £19.99 · 7 for £25", or a set menu at 1/2/3-course prices. That's one deal with a price ladder, not several deals. In the deal's editor, switch on Priced by how many they pick: the single bundle price steps aside ("Set by the tiers below") and you list tiers instead — each tier is a number and its price, Add another tier takes you up to six. What the numbers count depends on the deal's shape:

On the customer's menu a tiered deal prints its whole ladder ("3 for £14.99 · 5 for £19.99 · 7 for £25") on its card and on its category chip — never just the smallest price. The order line, the customer's receipt and your sales figures all use the matched tier's price, with any supplements and priced choice steps added on top exactly as on a single-price deal.

Three rules worth knowing:

Availability windows work exactly as on any other deal — a lunchtime-only "3/5/7 plates" deal is fine, and outside its times the card shows its times and can't be started. And when the menu importer reads a printed offer with several pick-count prices, it proposes it as one tiered deal with the full ladder shown for you to accept — see How do I import my menu?.

Mark a dish sold out

Flip the Available switch on the dish's row (or inside its edit form). When it's off, the public menu greys the dish out and shows a Sold out badge next to the price (the price stays visible) — handy mid-service when something runs out. Flip it back on when it returns.

Dish stock counts — sold out by itself when the portions run out

If you'd rather not watch the fridge yourself, ResoFlow can count portions down for you. The master switch lives in Settings — the Dish stock counts card on Settings → Menu & stock. It starts switched off — turn on Track dish stock there and each dish row on the Menu page gains a small stock line where you set its Usual per day number ("we do twelve of these a night"). As the dish sells, the number counts down, and at zero it shows as sold out on your customer menus — the public menu, TV screens, event and shareable menus, and at-table ordering — and can't be added to new pre-orders, until the next service day. Dishes without a number are simply not tracked and behave exactly as before.

The count is one honest number however the dish sells: an Order & Pay table order, a pre-order from a booked party and a dish inside a set menu all draw from the same day's count — and a pre-ordering party's portions are held for them, so a busy walk-in night can never sell food already promised to a booking. If a booking with a pre-order cancels or moves to another date, its portions go back on sale (or move with it) automatically.

On each row you can also correct Left today to whatever is actually in the kitchen, or tap None left today to mark the dish sold out for the rest of the day in one go. Changing counts is a floor job: anyone who can edit the menu can do it, and there's a separate Set and change dish stock counts permission so you can hand it to front-of-house staff without giving them price editing (Hosts have it by default).

Counts reset to each dish's usual number automatically at the start of each service day. Prefer to set them by hand? Switch off Reset automatically each day on the same settings card — then a day only has counts once you set them. Either way, the card's Reset today's counts button starts the day again on demand (portions already promised to pre-ordering parties are kept). While stock is on, the Menu page itself shows a one-line summary of where things stand — whether counts reset overnight or are set by hand, and how many dishes have none left today — with a Change in Settings link straight to the card. Stock tracking comes with menu management (Pro plan and above, or the Order & Pay product), and while the switch is off nothing stock-related appears anywhere.

Shareable menus — a link for any slice of your menu

The Menu page's Shareable menus tab lets you build named menus from your existing categories, each with its own link you can share anywhere — an Instagram bio, a printed QR (the QR codes page prints one per shareable menu — see How do I create and print QR codes for my venue?), a festive flyer. Click New shareable menu, give it a Menu name (that name is the page title customers see), pick the categories it should include, and save. Each menu's row then has Copy link and Open buttons, plus a live/pause switch — a paused menu keeps its link but shows a friendly "This menu isn't available right now" message instead.

Hidden categories are pickable here on purpose: they aren't on your everyday menu, but they ARE shown on a shareable menu that includes them — so a Sunday-lunch or festive menu can live at its own link without ever appearing on your main menu page. The shared page is browse-only (no ordering), shows sold-out dishes greyed out with their badge exactly like your main menu, and carries the same allergen notice at the bottom. Deleting a shareable menu never touches your categories or dishes — only the link stops working. Shareable menus come with menu management (Pro plan and above, or the Order & Pay product) — there's no separate switch or extra cost.

Switching your public menu off

Settings → Restaurant profile → Show my menu on my public pages turns your whole public menu off and on. It starts switched on, and it works on every plan — nothing about switching a feature off is ever tied to what you're paying for.

While it's off, customers don't see a Menu tab or a menu card on your venue page, the menu widget on your own website goes quiet, and anyone opening your menu link is told the menu isn't available online right now and to ask a member of staff.

Switching it off also stops Order & Pay at the table, because your menu page and the at-table ordering screen are the same page. Nothing is cancelled: your printed table QR codes stay exactly as they are and simply do nothing while the menu is off — switch it back on and every code you've already printed works as before, with no reprinting.

Your dashboard Menu page is unaffected, so you can keep building and editing while it's off.

Share the menu with customers

The menu page opens with your venue header — cover photo, logo and name, the same treatment as your venue hub page — which scrolls away so the menu itself takes over; the sticky bar then carries your name, a category bar that jumps to a section when tapped and highlights the section customers are reading as they scroll, and the search icon.

Customers can also search your menu: a search icon in the menu header opens a live filter over dish names, descriptions and category names — handy on long menus. If nothing matches, customers see "No dishes match" with a one-tap way to clear the search. Dietary and allergen words work too: typing vegan, vegetarian, gluten free or dairy free shows the dishes you've ticked with that dietary badge (plus any dish whose name or description mentions the word), while typing an allergen name — nuts, milk, gluten, sesame and so on — shows the dishes that DON'T list that allergen, under a "Showing dishes without …" header. Dishes with no allergen boxes ticked still appear in those results, so keeping your allergen ticks accurate is what makes the filter useful — the search is a convenience, never a safety guarantee, and your own allergen advice to customers still applies.

Every public menu page with dishes on it also carries a small allergen notice at the bottom: it tells customers that allergen and dish information comes from your venue, asks them to tell you about any allergy or intolerance before ordering, and warns that cross-contamination can occur. The notice always shows and can't be switched off — allergen accuracy stays your venue's responsibility, and the notice points customers to raise allergies with you directly.

Related: How do I import my menu instead of typing it in? · How do I create and print QR codes for my venue? · How do I edit the emails customers receive? · How do I add my logo, colours and images?