Skip to main content
This is the whole guest journey as it works today — useful when you’re writing your website copy, training staff who answer the phone, or checking a guest’s complaint against what actually happens.

1. The starting point

A guest arrives at either:
  • a product page carrying the Experience booking block, where they see your button (default label “Check availability”); or
  • a page carrying the Experiences list block — your property page. A search rail (date + time + guests) sits over a grid of photo cards, one per bookable experience, in the order you set with Reorder on the Experiences page (alphabetical until you do). By default the search starts on today (the block’s Preselected date setting — Today, Tomorrow, or No date), so guests land on live availability instead of an empty rail. The date opens a calendar right in the page — picking a day searches immediately — and the time filter (Morning / Afternoon / Evening, tick any mix) narrows the shown times without another search. Without a date the grid shows everything with a “Pick a date to see each experience’s open times” hint; with a date, each card carries one line summing up that day — “3 times · 11:00 AM – 3:00 PM” (or “1 time · 2:00 PM”) — and experiences with nothing open drop out. The times themselves are picked in the booking window. A search with no matches says so and invites a different date or party size.
The block has settings in the theme editor: Cards (Grid, or a List of rows), Show descriptions, Book button (opens the booking window, or goes to the experience’s product page), Accent color, Corners (governing buttons and input fields together), Calendar days, and Top/Bottom spacing sliders controlling the breathing room around the block, plus Preselected date (above). By default everything matches your theme’s buttons automatically. Under Which experiences, Only this location and Only experiences tagged narrow one block to one location or one tag (set on each experience’s Organization card) — a page per property, or a “Family visits” page; when they match nothing the block reads “No experiences match this block’s location or tag settings yet.” Under Members-only experiences, Join link for this list and Join button label override the store-wide join button in the booking window for this block. (The Experience booking block on a product page has the same two settings.) For advanced tweaks there’s a Custom CSS box — it’s applied inside the widget after Riserva’s own styles. Riserva treats the widget’s class names as a stable surface, so customizations hold across updates; in the rare case a release has to change one, we’ll announce it ahead of time. Each card leads with its photo (an experience without one gets a quiet initial-letter placeholder — add photos, they carry the card), then the name, the guest sentence — your settings translated into one line, “Prepaid reservation for parties of 2 to 4 · 60 min” (“Prepaid” appears only when you charge at booking) — a two-line description, and a bottom row with the price — “85perguest","85 per guest", "1,500 for the venue” for a whole-venue buyout, or “Free” — and a Book button. The same sentence appears in your admin’s Experiences list, so what you see is exactly what guests are promised. Members-only experiences carry a “Members only” chip on the photo. Everyone sees that card the same way — full colour, with its price and Book button — but a non-member gets no times on a date search, and the card stays listed when a time of day is chosen. When a non-member presses Book (on the card or on the experience’s product page), the booking window opens on a “Reserved for members” notice: a lock, your message from Settings → Memberships, and your join button with Sign in — whichever you chose to lead is the big button, the other a quiet link under it. Without a join link it offers Sign in only; a signed-in guest who isn’t a recognised member is told their account doesn’t have member access, and gets no Sign in. A recognised member sees the normal calendar. An experience can be set not to show to non-members at all. Booking from a card opens the same window as the product page, already on the right experience and date.

2. Step one — pick a date and time

Clicking the button opens the booking window (a panel over the page; on a phone it becomes a full screen). Guests. A stepper, starting at 2, limited to the party range you set on the experience. Calendar. One month at a time, with arrows. Only days with something open are clickable; everything else is greyed out. Beneath it: “Shaded dates are open for booking.” Times. After a date is chosen, the day’s open times appear as full-width rows showing the whole window — “4:30 PM – 6:00 PM” — in your store’s 12-hour or 24-hour preference. When two or more venues run the experience that day, the times are grouped under venue names so guests know which room they’re choosing. Scarcity. A time row shows “3 left” only when four or fewer places remain. Times that are full simply aren’t listed. A footer keeps the choice visible (“6:00 PM · party of 4”) with a Continue button that stays disabled until a time is picked. When today is full — the waitlist (optional). If you’ve turned on Settings → Reservations → Let guests join today’s waitlist online, a guest who selects today and finds no open times sees “Join the waitlist” beneath the no-times message. They leave a name and email, and the party lands on the same waitlist your host stand and POS already use — when you tap Notify, they get the table ready email. The offer only appears for today (the waitlist is a right-now list, not a future-date request book), never on a day you’ve closed with a blackout period, joining twice with the same email doesn’t create duplicates, and with the setting off — the default — nothing changes. See Host view for working the list.
Good to know Times are shown in the venue’s local time, and the window does not print a timezone line. If you sell to guests in another timezone, say so in your experience description.

3. Step two — details

Add to your visit. If the experience has add-ons, they appear here as tappable cards with an Add button that fills in when chosen. Add-ons priced per party or per guest toggle with a tap anywhere on the card; add-ons priced “each” get a quantity stepper up to the maximum you set. A per-guest add-on automatically bills one per guest. If you gave the add-on a description, it shows under the price — two lines, with More to read the rest (and Less to fold it back). Give an add-on’s Shopify product a photo and the card shows it as a thumbnail — automatically, within moments of the photo changing. You can also add the photo from Riserva: the add-on window has a Photo section — drop an image there when you create or edit the add-on. (The cheese board sells better when guests can see it.) Upload the photo at any size: the card shows a small copy that Shopify’s image service resizes for it, so a full-resolution product photo never slows the booking window down. An add-on can be a product Riserva creates for it (kept Unlisted — purchasable with the reservation but hidden from your store’s search and collections), or a product you already sell: the Add add-on button asks which. Choosing an existing product opens Shopify’s product picker first, and the add-on takes the product’s name and price from there. Either way, the add-on and its product stay in step from then on: change the price or photo on the product and the add-on follows; edit the add-on’s name, description or price in Riserva and the product updates. Riserva only ever writes the fields you actually edited, so the rest of a shared product is never touched. If the product comes in several variants, pick just the ones you want to offer in the picker — guests get one card with a dropdown of only the variants you chose, each at the variant’s own price. Adding one variant and switching the dropdown lets them add another; everything they’ve added stays visible on the card. Add-ons follow the experience’s payment timing. On an experience that charges at booking, add-ons are paid at checkout with everything else. On one that saves the card and charges later (“Before the visit”, “At check-in” or “At the visit”), the add-ons are charged on the same date as the reservation — one checkout, one charge. Riserva puts every add-on product on the experience’s pay-later option to make that true, including a product you already sell. The amount the fine print quotes is the whole deferred total, add-ons included, so it matches what the card is eventually charged. One exception the guest is told about. On a “Before the visit” experience, a guest booking inside your charge window pays at checkout instead — the fine print says so (“Your visit is less than 24 hours away, so your card is charged today at checkout.”) and no card is saved, because there is nothing meaningful to wait for. Set Advanced → Bookings made inside the window to Charge on the usual schedule in the Pricing card if you’d rather everything went through the same collection. See Payment policies. If an add-on’s product couldn’t be added to it, the add-on’s card in the editor says Charged at checkout — retry and its three-dot menu offers Charge this with the reservation. Until you retry, that one line really is charged at checkout, and the widget tells the guest so — nothing is hidden, it’s just a mixed checkout. See Payment policies. Your questions. Any intake questions you’ve set for the experience appear here, in the order you arranged them. Required ones are marked with an asterisk — the guest can’t continue until they’re answered. See Intake questions. Special requests. A free-text box under a “Special requests” label, with “Allergies, celebrations, accessibility needs…” as the example inside it, capped at 500 characters with a live counter. Under the requests box, a line of fine print tells the guest that contact details shared at checkout are used only to manage their reservation, with a link to Riserva’s privacy policy. (The same line appears on the waitlist form, which collects a name and email directly.) The footer shows the running total — price × party (or the flat price for a buyout), plus add-ons — or “Free”, next to the Reserve button.

4. Checkout

Pressing Reserve does three things:
  1. Riserva holds the time so the guest isn’t racing someone else while they pay. The hold lasts 12 minutes.
  2. The reservation is added to the cart as a line item, with the experience, location, date, time and party size (and any special requests) attached, plus a separate line for each add-on.
  3. The guest is taken to the cart page, where they check out as normal.
Good to know The countdown on the hold isn’t shown to the guest, so nobody is put under visible time pressure. If they take longer than 12 minutes, the hold lapses and the time goes back on the calendar — but their checkout carries on, and the reservation is still created when they pay. If someone else took that time in the meantime, the reservation arrives badged Overbooked for you to sort out; it’s never dropped. Because reservations are ordinary Shopify products, checkout is your normal checkout — your payment providers, your discount codes, your order confirmation. Riserva marks reservation products as services, so Shopify does not ask a guest for a shipping address or shipping rates.
One billed-later reservation per checkout. A saved card belongs to the whole Shopify order, and the later charge takes the order’s whole balance — so two reservations that are both billed later, checked out together, would be charged together, on the first one’s date. The booking window stops that before it happens: if the cart already holds a billed-later reservation and the guest reserves another, nothing is added, and the window says “You have a reservation waiting in your cart that’s billed later (Sat, Aug 15, 2 guests). Finish that checkout first, or remove it, then book this one.” with two buttons — Finish checkout (straight to checkout for the one already in the cart) and Remove it and continue (takes that reservation and its add-ons out of the cart, frees its time, and adds the new one). Reservations paid at checkout — including a charge-later experience booked inside its charge window — and bottles share a cart freely. If a cart gets through anyway (a theme with its own add-to-cart button, two tabs, a restored cart), every reservation is still created. Each one’s page says “Shares its saved card with RES-… — the two are charged together”: the card is charged once, when the first of them comes due, for all of them, and the others are marked paid by that same charge. Cancel one before then and the order stays open for the others; its share of the later charge is recorded on its timeline as money to refund. If someone else takes the time while the guest is deciding, the window returns them to step one with a fresh calendar and one of these messages:
  • “Sorry, that time was just taken — here’s what’s still open.”
  • “That time can no longer be booked online. Please pick a later time or contact us.” (they hit the booking cutoff)
  • “That party size can’t be booked online for this time. Try a different party size or contact us.”
A guest who presses Reserve more than 20 times within 10 minutes (or someone on the same connection) is asked to wait: “That’s a lot of reservations in a short time — give it a few minutes and try again.” It clears by itself.

A reservation left in the cart too long

Shopify keeps a cart for days. When a guest comes back to any page with your booking window and their cart still holds a reservation whose time has already passed, Riserva removes it (with its add-ons) and shows a short note at the bottom of the page: “Your reservation for <date> had already passed, so we removed it from your cart.” If a guest goes straight to checkout instead, Shopify’s checkout stops them with “Your reservation for <date> has passed — remove it from your cart to continue.” — Riserva’s checkout rule, which Riserva switches on by itself once you approve its permission (Settings › Checkout › Checkout rules lists it as “Check reservations at checkout”; leave it active). It looks at the visit’s DATE, so a visit earlier today is not stopped there; if one of those is paid after the visit has ended, the reservation is still created but marked Booked after its time, with no confirmation sent to the guest. Payment links for a balance after a visit are never stopped. A reservation’s quantity is set by its party — the number of guests for a per- guest price, 1 for a whole-venue price or free entry. If a guest changes it in the cart, the booking window puts it back and says “Quantity is set by the reservation (4 guests). Change the party size by booking again.” If they go straight to checkout instead, the same checkout rule stops them with “This reservation is for 4 guests — set its quantity back to 4, or book again for a different party.” An order that still gets through is created, and its timeline says “Payment mismatch — checked out with a quantity of 1 for a party of 4 (should be 4)“.

5. Confirmation

When the order is placed, Riserva creates the reservation and — if the guest gave an email at checkout — sends the Reservation confirmed email with the date, time, party size, confirmation code and location, plus an add-to-calendar attachment (reservation.ics). If the reservation is later moved, the reschedule email carries an updated file that replaces the calendar event rather than duplicating it. It also carries a Cancellation policy line generated from your policy settings — the same sentence the Policies page previews, so the guest’s email and your rules can never drift apart. The confirmation code is what the guest types to manage their own reservation if they don’t use the email’s link. It looks like RES-7K4M — and the prefix is yours to brand: Settings → Reservation IDs lets you change RES to anything short (VIP-7K4M, NAPA-7K4M). The change applies to new reservations only; codes guests already hold never change. The reservation appears in Reservations in your admin, usually within seconds of the order. On a charge-later experience (the card is saved and charged later) allow about a minute: Shopify takes that long to confirm those orders before telling Riserva.

6. Before the visit

  • A pre-visit reminder goes out in the 24 hours before the slot.
  • The Manage your reservation link in their emails opens their reservation on your storefront, where they can cancel or move it within the limits your policy sets. See Guests managing their own reservations.

What guests can’t do

Honest limits, so you don’t promise them:
  • No future-date waitlist. The storefront waitlist (if you’ve turned it on) covers today only — a guest can’t ask to be notified about a full day next month. Full future days simply show nothing open.
  • No account area. A guest opens one reservation at a time, from the link in their email or with their code and email; there is no list of past visits for them.
  • No deposits. Depending on the experience’s payment policy, a guest pays in full at checkout, saves a card that’s charged the full amount later, or doesn’t pay online at all.
  • No timezone label on times, as noted above.

What things mean on this screen: What things mean: What your guests see