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, specials, 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 or Your website product — without one of those, the page shows "Menu management comes with Pro and above, or the Your website product", with the cheapest way in and its price (Your website, £15 per month). 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? Import menu — in the … beside Add a dish 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

Two more switches in the dish form put a small tag beside the dish on your menu: Mark as popular shows a "Popular" badge (you choose — it's never automatic), and Mark as new shows a "New" tag for four weeks. The switch tells you the tag's last day, and the tag drops off by itself after it — tick it when your autumn dishes go on, and the tags go on their own at the end of October. Both start off.

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.

Customers browsing your menu see what each choice offers before they decide where to eat. On the dish's card every step gets one short line — its prompt, then its options with any extra cost, like "Pick your sauce: Peppercorn · Béarnaise +£1.50 · Red wine jus" — cut after four options with "and 3 more". Tapping the dish opens its box with every step in full: how many to pick ("Pick one", "Pick up to 3", "Pick one if you like"), each option with its extra cost, its description and its own allergens and dietary marks, sold-out options marked, and an option that needs an earlier pick marked "Only with Large". That's the same on your menu page, the menu widget on your own website, shareable menus and event menus. Nothing about ordering changes: a customer ordering (at a table, for collection or delivery) still picks step by step when they add the dish. Your own dashboard's dish rows show the "Choices:" prompts at a glance.

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. 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 everyday words 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.

Can be made gluten-free (or vegan, and so on) on request

Some dishes come one way but your kitchen will make them another — the Christmas turkey without the gluten, a curry made vegan. Open the dish and, on the Allergens step, tick the mark on the second row, Can be made … on request (Dairy-free, Gluten-free, Vegan or Vegetarian). A mark sits on one row or the other — ticking it here takes it off Dietary ("the whole dish is…").

An "on request" version isn't a promise of no cross-contact — your menu's line about allergens in your kitchen and the checkout's allergy question still apply. It's menu information, so it's on every plan's menu; unticking a mark is never blocked.

Check these dishes. A dish ticked Gluten-free on the dish that also asks guests to pick "Standard / Gluten Free" is now shown as "Gluten-free option" (it can't be gluten-free both ways), and so are dishes like it ("Vegan", "V", "Dairy Free", "DF"). Menu → Allergens lists them under Check these dishes, each with Make it "gluten-free on request" — which opens the dish on its Allergens step with the mark moved to the second row and your hand-built "Standard / Gluten Free" step folded into the automatic question, as a preview: nothing changes until you press Save dish — or It's gluten-free either way, which keeps the plain "Gluten-free". Dishes that had the old "through its choices" switch on are listed too, with Move it to "Can be made … on request". The Menu page says how many are waiting.

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, an edit's Review names every dish it will change before anything happens, and the save button itself says how many ("Save and update 41 dishes"). Each reusable choice's row says where it's used — "Used on Steak frites", or "Used on 3 dishes" with the list one tap 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 — on venues with Order & Pay — the same windows are also editable on Settings → Menu and stock → 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:00pm–3:00pm" — so customers can still read tonight's dinner menu at breakfast. Customers see those times on the same clock as the rest of your public pages: 12-hour unless you've picked 24 hour under Time format for public pages (see branding), when it reads "Served Mon–Fri 12:00–15:00". Your wall screens show them on the same clock as the time in their own header. 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 (Pro and above, or Order & Pay)

The Menu page's Set menus & deals tab (beside Dishes at the top) is the ONE place to make a set menu — never build one as a dish with choice steps (the dish form's choices step says so: "Making a set menu?" with a Use Set menus & deals button that takes you here). Set menus & deals come with the Pro plan and above (the plans with pre-orders) or an Order & Pay product; a plan without them sees the tab locked with how to get it, and a venue with only Your website doesn't see the tab. Here you bundle existing dishes into one price: a course-based set menu ("Christmas Day — Adults", "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: Build-your-own deal pre-shapes a pick-any-3, whole-category deal for you — choose the section and the price and it's ready to save. When a customer picks several from one slot they can choose the same dish more than once by default; switch on Each pick must be a different dish to require variety.

The editor's last step, Where and when, answers three things separately:

A shown set menu that can't be ordered in Order & Pay still appears on your menu page, view-only: tapping it shows what's in it — each course's dishes with their allergens and dietary marks — and where it can be had. A hidden set menu that isn't ticked for Order & Pay never reaches your public menu at all, and neither do the dishes of a hidden category it's built from — an unreleased Christmas menu stays unreleased.

In Order & Pay (only for venues with Order & Pay): every shown set menu or deal ticked for Order & Pay (except one priced by how many they pick) has an Apply automatically switch, on by default — a customer whose basket contains dishes that fill it 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 it only applies when a customer taps the card and picks their dishes. A hidden one ticked for Order & Pay always applies by itself there. 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.

Build a set menu or deal, step by step (Pro and above, or Order & Pay)

Give any hand-picked dish an optional Supplement £ — "+£4.00 for the steak" — charged on top when it's picked. A chosen dish's own priced choices also add on top.

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 set menu stops being offered until you fix it. Automatic promotions never apply to set menus & deals. A promo code the customer types CAN come off deal prices in Order & Pay while the Promo codes can be used on deal prices toggle (Settings → Order & Pay, on by default) is on; a code limited to certain items never touches a deal (see How do promotions, deals, rewards and gift cards work together?). If you've set dish VAT rates, Order & Pay receipts, the daily sales email and the per-item sales CSV split the bundle price across the chosen dishes' rates (in the CSV, one row per rate — "Steak Night (20% VAT portion)"; if any chosen dish has no rate, the VAT cells stay blank rather than guessing).

One deal, several prices — priced by how many they pick (Pro and above, or Order & Pay)

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?.

Today's specials

Got something on today that isn't on the printed menu — or a dish you want to push? Open the dish, and switch on Today's special. That's the whole job: no dates to fill in, nothing to remember to undo. The special ends at the end of today by itself, so yesterday's special can never sit on a wall screen advertising food nobody is cooking.

The dish does not move. It stays exactly where it lives — Starters, Mains, wherever — and also appears in a Today's specials section pinned at the top of your menu. So stock counts, station routing, VAT and Order & Pay all carry on working untouched, and there's nothing to tidy up when the special finishes.

Two optional extras sit under the switch:

Want it to run longer than today, or only at certain hours? Open Schedule underneath. Set Starts and Ends after dates to run it over a period, and add time windows for something like a lunch-only special or "every Tuesday". The summary line above the fold always tells you what's currently set — "today only · all day" until you change it.

A special shows in four places, and they always agree with each other because they all read the same thing: the Today's specials section at the top of your customer menu, your menu board screen (marked in place, with the old price struck through), the dedicated Today's specials display screen, and Order & Pay, where it's ordered at the special price. On your own Menu page a dish on special carries a small amber Special badge, so you can see at a glance what's on without opening dishes one at a time.

The specials display screen clears itself. When the last special of the day ends, the screen simply shows "No specials on today" — nobody has to go and switch anything off.

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 marks it "Sold out today" (the price stays visible) — handy mid-service when something runs out. Flip it back on when it returns.

Rather customers didn't see it at all? Switch on Hide sold-out dishes (Settings → Menu and stock → How your menu looks — see "How your menu looks" below): a sold-out dish then drops off your menu — its section, the section buttons, today's specials, the menu search and the dietary filters all agree — and comes back by itself when it's available again. It's off to start with.

You can also type it into the search: "86 the salmon" or "only 5 sea bass left" opens your menu with one check for that dish — see What can I type into the search?.

Hide a single dish from your menu

Sold out and hidden are two different things, and the difference matters. Available switched off still shows the dish, greyed out with a "Sold out" badge — you're telling customers "not tonight". Hide from menu takes the dish off your customer menus completely — you're telling them nothing at all.

Open the dish's … menu on the Menu page and choose Hide from menu. It then disappears from your public menu page, your menu board and TV screens, and at-table ordering, while staying set up in your dashboard with everything about it intact — its price, photo, allergens and choices are all still there for whenever you want it back. Your own Menu page shows it with a grey Hidden badge so you always know why it isn't appearing.

Use it for a dish you're resting for the season, one you only do for private bookings, or a staff dish that was never meant to be on the menu. A hidden dish still appears where something deliberately offers it — an event menu or a shareable menu whose categories include it, or a set menu or deal that picks it — the same rule a hidden category follows. One difference: hiding a dish doesn't take it off the pre-order list — switch off its Available to pre-order too if it shouldn't be pre-ordered (the dish's last step tells you when it still can be).

This is a display setting, not a security lock: dish records are readable by anything that asks, so don't use it to keep something genuinely secret.

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 and stock (the gear at the top right of the Menu page opens it). It starts switched off — turn on Track dish stock there and each dish row on the Menu page gains a small stock line: press Count it daily and set its Usual number per day ("we do twelve of these a night") — the line then reads "Usually 12 a day". 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. The same goes for a table order your team rejects — the food was never made, so its portions go straight back on tonight's count. Refunding a customer for food that was already delivered doesn't put anything back, because that food is gone.

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). Each dish's count chip on the Menu page also turns amber as it runs low — at 3 or fewer left unless you tune the point with the card's Warn when control (1–50). The Stock counts figure at the top of the Menu page says where things stand — how many dishes are counted and whether counts reset nightly or are set by hand (Off while stock is off), with None left today beside it once something runs out — and, for anyone who can change the setting, clicking it opens the card in Settings. Stock tracking comes with menu management (Pro plan and above, or the Order & Pay or Your website product), and while the switch is off nothing else stock-related appears anywhere. On a plan without it the card's controls sit under More options, with a padlock — unless stock counting is still switched on from before, when they stay in view so you can switch it off.

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 Add a shareable menu, give it a Menu name (that name is the page title customers see), pick the sections it should include, and press Add menu. Each menu's row says when it's served (read from its sections' serving times) and which sections it shows, and has a live/pause switch and Edit; its … menu has Copy link and Open the menu. 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), follows your "How your menu looks" choices exactly like your main menu (sold-out dishes greyed out with their badge, or left off if you hide them; prices hidden if you hide them), 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 → Menu and stock → Show my menu on my public pages turns your whole public menu off and on — switch it off to hide your menu from customers, and back on to show it again. 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. The same notice shows when your plan and products no longer include menus (after a downgrade, or when an Order & Pay or website product ends): your menu link and your table QR codes show it until menus are back — nothing to reprint.

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.

How your menu looks

Settings → Menu and stock → How your menu looks holds four choices about how customers see your menu. Each starts off, so your menu looks exactly as it always has until you change one, and none is tied to your plan.

An event can hide the prices on its own menu too, with the venue-wide switch left off: Hide dish prices on this event's menu, under Link a menu in the event's details once a menu is linked — for a dinner whose food is in the ticket (see events).

See it, print it

The Menu page's header has two quick ways to check your menu, both in its … (beside Add a dish). See your menu as customers do opens your public menu page in a new tab — so after changing a choice above, you can see the result straight away. Print the menu prints your menu on paper, in ResoFlow's standard document layout: your sections in menu order with each dish's description, price (as your menu shows it — "£12" if you show whole pounds, "Market price" or "Ask the team" in the price's place), dietary marks, every choice with its extra cost and its own dietary marks and allergens ("Spiced squash soup (vegan; contains celery)"), and "Contains: …" allergens on every dish that lists them — if some don't, the paper says so once at the top, as your menu does. Prices always print, even if you hide them online; a dish that's sold out today stays on (the paper outlives tonight), and hidden dishes and sections are left 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 page — then a search box (and Vegetarian and Vegan filters, when your dishes carry those badges) above the dishes. These scroll away with the page so the menu itself takes over, while the category bar stays at the top of the screen: it jumps to a section when tapped and highlights the section customers are reading as they scroll.

Customers can also search your menu: the search box above the dishes is 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), then the "… option" dishes that can be made that way, while typing an allergen name — nuts, milk, gluten, sesame and so on — shows the dishes that list their allergens and don't list that one, under "Not marked as containing … — always check with the team". Dishes with no allergen boxes ticked are never among them: they're shown separately under "These dishes don't list their allergens", with a line asking customers to check with your team — so keeping your allergen ticks accurate is what makes the filter useful. A choice's own allergens count too: a dish where every option of a step customers must pick is marked with that allergen is left out, because it can't be had without it. If every dish lists that allergen, the search says so ("Every dish is marked as containing …"). 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?