Beauty Affairs HK

Booking calendar issues

Use this when the Medispa calendar is blank, shows the wrong clinic or price, or a payment option is missing.

Diagnose

1. Work out which failure you have. Open the treatment page and look at the calendar area.

What you seeLikely cause
Empty space, no error in consoleSesami did not load
An error mentioning medispaCalendarConfigThe config snippet did not render
Calendar renders, wrong clinic or nameHandle matching
Calendar renders, wrong amountsMetafields or a units mistake
Calendar renders, a payment option missingPer-product toggles

2. Check the config exists.

window.theme?.medispaCalendarConfig;

undefined means the page never rendered snippets/medispa-calendar-config.liquid. Check which template the page uses and whether that template includes the snippet.

3. Check Sesami loaded.

typeof window.SesamiSDK;

undefined means the mount is still waiting. deferJS polls for the SDK and never times out, so the calendar area stays empty and shows no error. Look for a blocked Sesami script in the network tab, and try again with browser extensions turned off.

4. Check the product is set up as a service. The calendar only renders for products tagged sesami-service. Confirm the tag in Shopify admin.

5. Check the deposit selling plan. The calendar fetches it separately:

/products/<handle>?sections=product-calendar-config

Open that URL directly. It should return JSON containing selling_plan_groups and a deposit_selling_plan from the downpay app. An empty deposit_selling_plan explains a missing deposit option.

6. Read the amounts from the config.

window.theme.medispaCalendarConfig.products.map((p) => [
  p.name,
  p.price,
  p.deposit_amount,
  p.pay_in_store_amount,
  p.checkout_enabled,
]);

Compare these with the product's metafields in admin. A value 100 times too large or too small means code converted dollars to cents twice, or not at all.

Repair

Sesami is blocked. The theme cannot fix this. Confirm the Sesami app is installed and nothing blocks its script. If the problem comes and goes, raise it with Sesami as an availability issue.

The config is missing. Add the config snippet to the template, or switch the page to a template that includes it. The atoms in calendar-atoms.ts read the config when the module is imported, so the snippet has to render before the bundle loads.

The wrong clinic shows against a treatment. The calendar finds a clinic by looking for the clinic's handle inside the product handle. Either rename the product handle to contain the clinic handle, or add a matching medispa_locations entry. A product that matches no clinic shows a default name.

The amounts are wrong. Fix the product's custom.pay_in_store_amount metafield, or the theme setting it falls back to. Staff enter all of these in dollars. If the code is at fault, the conversion to cents belongs in one place, where the value is formatted. The comments in snippets/medispa-calendar-config.liquid describe this rule.

The deposit option is missing. Check custom.enable_checkout on the product. The snippet treats an absent value as enabled, so the likely cause is a value explicitly set to false. If the metafield is correct, the product has no Downpay selling plan.

Pay in clinic is missing, or appears when it should not. Check custom.enable_pay_in_store on the product. Then check the landing page for a custom.pay_in_store metafield, which overrides every product on that page. The snippet detects the override by the metafield's type, so the only way to restore per-product control is to delete it.

Booking form submissions do not reach Zapier. Check Medispa Booking Form Submit URL in theme settings. Zapier receives a copy of the Klaviyo submission, so a working form does not prove the Zapier copy works.

Verify

  1. Load the treatment page in a private window with no extensions.
  2. Confirm the clinic tabs, addresses and hours match the metaobject entries.
  3. Pick a slot and confirm both payment options show the expected amounts.
  4. Take one booking through to the cart. Check the deposit line, the remaining amount label and the cart message.
  5. Check a second treatment at a different clinic, because the calendar matches clinics to each product separately.

Escalate

Sesami owns availability, slot durations and reservation holds. Downpay owns deposit selling plans. This repository cannot configure either, and neither leaves a trace in the theme when it fails.

On this page