Booking calendar will not open
Book Now does nothing, the calendar shows no slots, or the wrong treatments appear.
Booking calendar will not open
Use this runbook when a Book Now button does nothing, when the calendar area stays empty, when every clinic shows no availability, or when the calendar lists the wrong treatments.
The calendar depends on a third-party SDK whose load order the theme cannot control. Start by checking whether the Sesami SDK loaded.
Diagnose
1. Check the SDK loaded
In the browser console on the MediSpa page:
typeof window.SesamiSDK;undefined means Sesami's script never ran, and React never mounted. That is the most common cause of an empty calendar
area. Go to Repair, case A.
2. Check the configuration exists
window.theme?.medispaCalendarConfig;undefined means the Liquid config snippet did not render on this page. Go to Repair, case B.
If it exists, check its contents:
const c = window.theme.medispaCalendarConfig;
console.log(c.products.map((p) => p.name));
console.log(Object.keys(c.clinics));
console.log(c.shopId, c.timezone);Empty products means the page has no treatments configured. Empty clinics means the medispa_locations metaobject
returned nothing.
3. Check the mount point exists
document.querySelector('.medispa-calendar--placeholder');null means snippets/medispa-calendar-placeholder.liquid did not render. The calendar has nowhere to mount.
4. Check the button is bound
document.querySelectorAll('.js-action[data-action="open-calendar"]').length;0 means the buttons on this page do not use the selector the binding code looks for.
If buttons exist but clicking does nothing, confirm the bundle loaded:
grep -rn "vite-tag' with 'medispa-booking-actions.ts'" sections/ snippets/ layout/5. Check whether a script is being blocked
MediSpa layouts hold back a long list of third-party scripts using Yett. Read the blocklist for the layout this template uses:
grep -n "YETT_BLACKLIST" -A 15 layout/theme.medispa-redesign.liquidSesami is not on any blocklist today. If a pattern has been added that matches Sesami's CDN, the SDK will never load
until the customer interacts with the page, because snippets/yett-unblock.liquid only releases blocked scripts on the
first touch, keypress or click.
6. Separate no availability from no connection
Open the network panel and filter for Sesami requests while changing the month.
Requests returning data with no bookable slots means the clinic has no availability in that window. That is a Sesami configuration question, not a theme bug.
No requests at all means the SDK is present but never queried, which points back to step 2.
Failing requests belong to Sesami.
Repair
Case A: the SDK never loaded
Confirm the Sesami app is still installed and its script tag is present in the page source.
If the app is installed and the script is in the source but did not execute, check the Yett blocklist for the layout (step 5). Remove the matching pattern, or accept that the calendar mounts after first interaction.
If the app is not installed or its script tag is absent, escalate to whoever administers Sesami. No change in this repository will fix it.
Case B: the configuration is missing
The page template is missing the config snippet. Confirm the template renders both:
grep -rn "medispa-calendar-config\|medispa-calendar-placeholder" sections/ snippets/ layout/Both must render for the calendar to work. The config supplies the data and the placeholder supplies the mount point.
Case C: the wrong treatments appear
Each Services Overview section carries its own treatment list, and a Book Now button opens the list belonging to the section that contains it.
The binding code walks up from the button looking for a script[data-medispa-products-fragment] element. A button
placed outside its section, for example in a sticky bar, finds the wrong fragment or none at all.
Move the button inside the correct section, or give the page a single Services Overview section.
Case D: clinics are missing
Check the medispa_locations metaobject in Shopify Admin, under Content, Metaobjects. Every entry there becomes a
clinic tab.
Adding a clinic here does not create availability. Sesami needs the same clinic configured, or the new tab shows an empty calendar. Instructions are in MediSpa booking.
Case E: the deposit charges the full price
The calendar resolves a Downpay selling plan at add-to-cart time by fetching the product's selling plan groups and
looking for deposit_selling_plan. When that lookup fails, the calendar adds the line with no selling plan, and
checkout charges the full price.
Check the product has the Downpay selling plan attached in Shopify Admin. Turn on ?ba_debug=* and look for the "Could
not find deposit_selling_plan" error.
Verify
- Open a MediSpa treatment page in a private window.
- Click Book Now. The calendar opens with every clinic as a tab.
- Pick a day and a time slot.
- Reach the confirmation step and check the deposit and Pay In Clinic amounts.
- Confirm the booking. Check the cart line carries
Date,Time,Timezoneand a_reservation_tokenproperty in/cart.js.
A cart line without _reservation_token is a treatment purchase with no appointment held. Treat it as a failure even if
everything on screen looked right.
Escalate
| Problem | Owner |
|---|---|
| No availability, failing SDK requests, reservations not held | Sesami |
| Booking form not appearing or not submitting | Klaviyo |
| Form submitted but nothing downstream received it | Zapier Zap owner |
| Deposit taken but no appointment in the clinic system | Sesami, with the reservation token from the order |
Background is in MediSpa booking.