Online Orders and Messages
The admin sidebar has two destinations that used to be one. Online Orders is where cart submissions from your public site arrive — these are real orders, with items, totals, and a phone number you can call back. Messages is the inbox for the contact form on your venue page — questions, bookings, the occasional fan mail. They look superficially similar but they live different lives: an order on the Online Orders page is something you start cooking; a note in Messages is something you reply to. The split is there so each one gets the attention it deserves and so each carries its own unread count in the sidebar.
This page covers both surfaces and the new pickup-vs-delivery question that now appears in the customer’s cart before they place an order.
Why this page exists
The two inboxes used to share one screen with a tab switcher at the top. That layout was fine when both streams were small, but the moment a venue starts taking real online orders the orders push the messages out of view, and someone — usually the front-of-house person — has to remember to flip the tab to check. Two sidebar entries means each one has its own page, its own status filter, and its own badge: when the Online Orders badge shows 3, you know there are three orders to deal with, not three “things that might be orders or might be messages.”
Pickup vs delivery is the second piece. The cart used to ask only for an address, which meant the venue had to guess whether an order with no address was someone who’d pick it up at the counter or someone who simply forgot to fill in the field. The new cart asks the customer explicitly, the choice rides through to the order row in Online Orders, and you see a clear 🛍️ Pickup or 🛵 Delivery pill on every line.
The rule
Online Orders is for orders. Messages is for messages. Pickup vs delivery is now an explicit question the customer answers on the cart — the order row tells you which it is before you scroll.
Online Orders
This page lists every cart submission from your public site, newest first. Each row carries:
- A pill telling you the type: 🛍️ Pickup (emerald) or 🛵 Delivery (orange).
- The status: pending, acknowledged, fulfilled, or cancelled. You can change it from the row’s dropdown.
- Customer name + phone in the expanded view, with one-tap Call, WhatsApp, and Copy buttons.
- The full item list with modifiers and modifier price impacts.
- The delivery address when it’s a delivery order, with an Open in Maps button.
- A Send to POS button that materialises the order in your kitchen flow.
A filter dropdown at the top lets you narrow by status (just pending, just fulfilled, etc.). The sidebar badge counts only pending orders — the moment you mark one acknowledged or fulfilled, the badge drops.
Messages
Same shape, different content: every contact-form submission from your public site, with name, email, optional phone, optional subject, and the message body. Click a row to expand it; reply via email with a one-tap button (the subject is pre-filled “Re: …”); call directly when the customer left a phone. Status options are new, replied, archived, and spam — flipping to replied drops it off the sidebar’s unread count.
The page is intentionally calmer than Online Orders because the work is different: a message is an inbox item to triage, not a kitchen ticket on the clock.
Pickup vs delivery on the cart
When a customer opens the cart on your public site, they see (in this order):
- A line item list.
- 🛍️ Pickup / 🛵 Delivery — two large buttons. The customer picks one before they can submit. If your venue only accepts one of the two, the cart auto-picks it and shows a small “Pickup only” / “Delivery only” label so the customer knows what’s happening.
- A Delivery address picker — appears only when the customer chose Delivery, with autocomplete biased to your venue’s country.
- Their name and phone (required).
- Optional notes (allergies, pickup time, etc.).
- A 💬 Send order on WhatsApp button at the bottom.
The pre-filled WhatsApp message now carries a line above the address showing the type:
🛵 Delivery📍 Delivery to: <place name><formatted address><Google Maps link>or, for pickup:
🛍️ PickupYou see the same pill in the Online Orders row, so triage at a glance is real: pickup orders need someone at the counter at the right time, delivery orders need a rider with an address and a Maps link.
How to use it
Open Back of House → Online Orders in the sidebar to see incoming orders, or Back of House → Messages for contact-form notes. Both pages have a status filter at the top, both refresh live as new submissions arrive, and both ring a soft chime when a new pending item lands (the same chime as before — single sound, no spam).
To configure which order types your cart accepts, open Settings → Venue profile and scroll to the Pickup and delivery card. Three toggles:
- Accept pickup orders — when on, the cart shows a Pickup choice.
- Accept delivery orders — when on, the cart shows a Delivery choice.
- Default at checkout — when both are on, this radio decides which one is pre-selected. Ask the customer leaves both unselected, which forces the customer to pick before the cart can submit.
Save is automatic — each toggle commits as you flip it.
How to use it — worked example
Friday lunch. The cart opens for a regular customer on her phone. Both pickup and delivery are on, with Pickup as the default. She glances at the cart: pickup is pre-selected, no address field clutters the form, she types her name and phone (the page remembered them from last week, just confirms), adds a note “no rush, I’ll be there at 1:15”, and taps Send order on WhatsApp. The order lands on the venue’s WhatsApp 8 seconds later. The pre-filled message reads:
Hello, I'd like to order:
• Mezze maniche cacio e pepe ×1 — €18.00• Tagliatelle al ragù ×1 — €19.00
Total: €37.00Name: SaraPhone: +66 89 444 1122
🛍️ Pickup
Notes: no rush, I'll be there at 1:15On the admin side, the row in Online Orders shows an emerald 🛍️ Pickup pill, a status of pending, a count of 2 items, the total, and the time. The host taps it, sees Sara’s name, the items, the note, and a Call button. She marks it acknowledged, the sidebar badge drops, and the kitchen gets a Slack-style ticket via Send to POS.
Same lunch, different customer. A neighbour who’s never been before opens the cart at 1pm. He picks Delivery, the address field appears, he types “via Roma 12” and picks the autocomplete suggestion. Name, phone, notes, send. The WhatsApp message carries the 🛵 Delivery line above a formatted address and a Maps link. The row in Online Orders wears the orange 🛵 Delivery pill so the host knows to call a rider, not the counter.
What happens behind the scenes
When the customer hits Send, the cart submits to the system, which:
- Reads the venue’s pickup / delivery settings.
- Rejects the order if the customer picked a type the venue doesn’t offer (defensive — the cart’s UI already prevents this, but a tampered request gets a clear error).
- Forces the delivery address to be present and valid when the type is Delivery; clears the address when the type is Pickup so a stale value can’t ride along.
- Writes the order row with the explicit type field stamped on it.
- Pre-builds the WhatsApp message with the type line above the address (or alone, for pickup).
- Returns a
wa.meURL the cart navigates to in the same tab.
The Online Orders row reads the type field directly — it doesn’t infer from the presence of an address anymore. That removes a small but real source of confusion: a delivery order with a half-saved address used to render as pickup until you opened the detail view.
Related features
- Online ordering channels — how the WhatsApp handoff works once the order leaves the cart.
- Knowledge base — this very wiki, with the sidebar guide and the contextual
?button on every admin page.