Appearance
Testing & launch
Test widgets on the same domains customers will use. Domain settings affect sign-in, checkout returns, and account redirects.

Test on a staging page first
Publish each widget on an unlisted page of your own website before you link to it publicly, and make sure that page's domain is in Allowed domains. Sign-in, checkout returns, and account links all depend on the domain matching, so a test anywhere else does not prove the live setup works.
Each domain is matched on its own, so list every subdomain you publish on. staging.yourstudio.com is not covered by an entry for yourstudio.com.
To test real passwordless email composition without external delivery, run the API's loopback-only capture entrypoint against disposable local data. See packages/api/README.md for the required capability and mailbox endpoints. The mailbox lists only token-free metadata and follows an opaque message id. Do not print its redirect, current browser URL, or email contents, and do not retain browser evidence until the widget has stripped the credential fragment.
Pre-launch checks
- Open each widget page on desktop and mobile.
- Confirm a new customer can create an account and book.
- Confirm an existing customer can sign in and book.
- Confirm paid checkout returns to the website.
- Confirm account links return to the customer account page.
- Confirm the CRM shows created reservations, payments, and customer records.
When a widget does not load
- Check that the script URL is reachable.
- Check that
brand-idmatches the brand ID shown in Website Integration. - Check the browser console and network tab for failed requests to Sauna CRM.
When a widget shows your branding but will not load its content
A widget that shows your studio name and color, then reports "We couldn't load the schedule. Check your connection and try again." or "Payment setup is unavailable. Please try again or contact the studio.", is almost always a domain problem rather than the connection or payment problem the message suggests. Branding is fetched separately and is not domain-checked, which is why it appears while everything else fails.
Confirm the page's domain is listed in Allowed domains in Website Integration: requests from a domain that is not listed come back as 403 Origin or Referer host is not allowed, which the network tab shows against the Sauna CRM API calls.