Online vs in-venue — what the diner can order, where
The same menu the diner reads from their sofa on a Sunday evening is the same menu they read sitting at table five on Friday night — except it shouldn’t be. The wine list belongs on the table but not always in the delivery cart (the law has opinions). The chef’s hidden menu belongs in the dining room but not on a public link a search engine can index. The fix is a small switch on every category that decides, separately, whether a diner outside the venue can see it and whether they can order it. One menu, two contexts, three states per category.
This page is for two readers. If you’re the owner, “Why this page exists” is for you. If you’re the chef changing what’s orderable for tonight, jump to “How to use it”.
Why this page exists
Most kitchens face the same problem from two directions. From one direction, the alcohol regulation: many jurisdictions forbid selling beer, wine, or spirits to a remote customer, even when the venue’s licence covers a glass of wine at the table. From the other, the operational reason: there are dishes the kitchen doesn’t want a delivery rider to carry — the parmigiana di melanzane that has to be eaten within ten minutes, the chef’s tasting menu that only works at the pass, the secret pasta the regulars know about. Both problems share a shape: the category should appear on the menu inside the venue, but should behave differently outside it.
The blunt fix most operators reach for is to delete the wine list from the menu entirely, or to set a global flag that hides it from everyone. Both lose information. The diner researching where to go for dinner can’t see what wines you carry. The diner sitting at the table can’t order one. This page is the surgical alternative: each category carries its own visibility, set once on the category, applied automatically based on where the diner is when they scan.
The third reason — quiet but useful — is staff training. Once each category knows its own rule, the diner’s experience is automatic and the staff stops fielding the same question. “Why can’t I order this online?” — because the category is browse-only. The diner reads the explanation under the dish. Nobody has to phone the kitchen.
The rule
Every category carries one of three visibilities, set on the category itself: orderable (the diner can add it to the cart from anywhere), browse-only (the diner sees it but can’t add it to the cart when they’re outside the venue), or hidden online (the diner doesn’t see it at all unless they scanned the venue’s printed QR). Inside the venue everything is orderable. One switch on the category, two behaviours in the world.
The three visibilities
Three states, one choice per category, set on the category’s edit page in Admin → Menu → Categories under the Online ordering policy card.
Auto — orderable, except alcohol (browse-only). This is the default and the right pick for nearly every category. The system reads the category’s kind (wine, cocktail, spirit, beer, sake) and the words in its name (Reds & Whites, Birre alla spina, Aperitivi, Digestivi) and infers alcohol vs not. Alcohol categories come out browse-only online; everything else comes out fully orderable. Pizza, pasta, antipasti, desserts, coffees, non-alcoholic drinks — all orderable from anywhere by default. Wines, cocktails, spirits — browse-only from anywhere unless the diner is in the venue.
Always orderable online. The override that says yes, every diner everywhere can add this to the cart. Use it on a non-alcoholic category that the auto rule already covers correctly (no behaviour change, but the choice is now explicit and won’t drift if you rename the category). Use it on an alcohol category when you do have a delivery licence and you do want bottles in the cart — common for wine clubs and bottle shops that operate alongside the kitchen.
These same three visibilities apply to your Shop categories — the retail items you sell to take home. Online, the Shop appears as its own section alongside Food and Drinks, and each shop category follows the same rule: a take-home loaf or jar of sauce is orderable by default, while a shop category of bottles auto-defaults to browse-only (the alcohol rule), ready to become orderable the day you have a licence and flip it to Always orderable.
View only online (orderable in-venue). The category is visible to a diner browsing from anywhere, but the Add to cart button is replaced by a small “View only — order this in person at {venue}” note. The diner reads the wine list, the cocktail list, whatever it is, and understands it’s a thing to order when they walk in. Use this when the Auto default isn’t quite right — a category that isn’t alcohol but you still don’t want sold online for some other reason (the tasting menu, the chef’s specials that change nightly).
In-venue only (hide online). The category vanishes from the public menu entirely. A diner scanning from home never sees it; a search engine never indexes it. Only diners inside the venue see it on the menu. Use this for the chef’s hidden specials, an off-menu staff-meal line, the secret pasta you mention to regulars by word of mouth.
Inside the venue everything is orderable regardless of these settings. The category’s online visibility is exactly that — an online-side rule that gets bypassed the moment a diner is in the room.
How the venue distinguishes inside from outside
The venue’s printed menu QR carries a small marker on the URL — a query parameter that says “this scan happened at the venue”. The first time a diner scans the printed QR at the table, the marker lands on their phone as a cookie that stays valid for four hours (the typical meal length). For those four hours, the menu drops the online-side restrictions: alcohol categories show the Add to cart button, hidden categories appear, browse-only categories become orderable. After four hours the cookie expires and the menu rebuilds in its remote-view shape.
The marker is venue-specific. Scanning the printed QR at venue A doesn’t unlock alcohol at venue B; a diner travelling between two of your locations is treated as a fresh remote visitor at each one until they scan the local QR there.
If a diner shares the public menu link with a friend who’s at home, the friend sees the remote-view version — the cookie travels with the device, not with the URL. The same goes for screenshots, social shares, and search-engine snapshots — only the live scan of the printed QR sets the marker.
How to use it
For each category that needs a non-default behaviour:
- Open Admin → Menu → Categories and tap the category to edit.
- Scroll to the Online ordering policy card under Visibility.
- Pick the visibility you want — Auto, Always orderable online, View only online (orderable in-venue), or In-venue only (hide online).
- Save. The menu cache refreshes within seconds and the new behaviour is live for diners’ next page load.
Leave every other category on Auto. The auto rule already does the right thing for nearly every kitchen — food orderable everywhere, alcohol browse-only online — without anyone touching a switch.
To make the in-venue mark live for diners at the table, print your menu’s QR code with the in-venue marker baked into the URL. Any QR generator works — the URL is whatever your menu’s public address is, with ?qr=1 appended on the end. Stick the printed QR on the table, on the menu, on the wall — wherever the diner naturally points their phone when they sit down. From that moment on the in-venue marker takes care of itself; no staff intervention needed, no extra clicks for the diner.
What happens behind the scenes
Every time the menu renders, the system asks two questions in order. Is this diner inside the venue? (the cookie from the printed QR is the only signal). What’s this category’s online visibility? (read from the category row). If the diner is inside, all four policies behave the same way — everything visible, everything orderable. If the diner is outside, the policy decides what they see and what they can do with it.
The remote-view version of the menu is cached for performance — many diners browsing from home all get the same render, served fast from cloud storage. The in-venue version is rendered fresh on every request, because it changes per-diner depending on whether they’ve scanned the QR yet. The two never mix; a diner at home never accidentally inherits the in-venue render, and a diner at the table never gets stuck on a cached remote-view from an hour ago.
When you change a category’s visibility, the cache for the remote-view version invalidates and rebuilds on the next page load — usually within seconds. The diner doesn’t have to refresh; the next time they open the menu the new behaviour is there.
Alcohol auto-detection runs on two signals: the kind field on the category (which the system asks you to set when you create the category — wine, cocktail, spirit, beer, sake, or something else), plus a keyword scan over the category name. Either signal triggers the alcohol-default. If you rename the wine category from Vini to The cellar list, the kind signal still classifies it correctly and the auto rule still browse-onlies it. If you create a new category called Spritz hour with no kind set, the keyword scan picks up spritz and treats it as alcohol. Explicit choices always win over the auto rule — picking Always orderable online on the wine category keeps it orderable even though the auto rule would have hidden it.
Worked example
Your venue has eight categories on the menu: Antipasti, Primi, Secondi, Pizze, Dolci, Vini, Cocktail, Caffè & digestivi. Marco the owner sets up online ordering for the first time. He opens the categories one by one:
- Antipasti, Primi, Secondi, Pizze, Dolci, Caffè & digestivi — left on Auto. The auto rule reads them as food and they come out fully orderable from anywhere. Marco doesn’t open them.
- Vini — kind is Wine, auto rule defaults to browse-only online. Marco leaves it on Auto. Diners browsing from home see the bottle list with prices, no Add to cart button. The note under each bottle reads “View only — order this in person at your venue”. Inside the venue the buttons appear.
- Cocktail — same as Vini, on Auto, browse-only online.
- A new category Menu del giorno — daily, off the printed menu, only mentioned at the table. Marco sets the visibility to In-venue only (hide online). The category vanishes from the public link. Diners at the table see it the moment they scan.
Six months later Marco gets a delivery licence for wine. He opens the Vini category and flips it to Always orderable online. The next time a diner browses from home, the Add to cart button on every bottle is back, even though the auto rule would still have hidden it. He didn’t touch any of the wine items individually — one switch on the category, every bottle inherits.
Anna, a regular, scans your venue’s printed QR at her usual table on a Friday night. The QR carries the in-venue marker; her phone holds it for four hours. She sees the full menu: antipasti, pizze, vini, cocktail, the chef’s Menu del giorno. She orders a glass of Aglianico and a Margherita. She leaves at 11pm. Sunday afternoon at home she scrolls the menu again deciding what to order for delivery — the marker expired Friday night, so she’s back in remote-view: the wines and cocktails appear but read view-only, the Menu del giorno category is gone, the pizzas and pastas have Add to cart buttons. She orders a Margherita for delivery, no bottle. One menu, two contexts, no staff intervention.
Related features
- How the AI thinks about your menu — the AI applies these visibility rules when recommending — a wine that’s browse-only doesn’t show up as “what should I drink with delivery tonight?” but does show up as “what’s good in the cellar to drink in”
- Modifiers — the per-item customisations the diner picks — modifiers on a browse-only category still render in the picker for diners at the table, but the picker never opens for the remote-view diner because the Add to cart button is hidden
- Delivery address — the cart’s delivery-address field, reached only when a category is orderable and the diner has tapped Add to cart
- Photos and videos on a menu item — the gallery on a browse-only item is fully visible from anywhere; visibility only governs orderability, not the photo
- Where your information lives — the category’s visibility is one of the few settings on the category row itself, not on the menu items underneath