Retail products

One-off juices, socks, and merch with desk checkout links on Stripe.

Retail (sidebar → Retail) is the catalog for physical one-offs. It is not the membership catalog and it is not a print-shop invoice item list.

Admin: after a sale

Customers land on /s/{slug}/shop/success with your pickup note (default: “Your smoothie will be ready at the front desk”). Edit that copy under App & Site → Store setup → Retail pickup message. A successful sale appears in Retail → Sales history and, if we can match the buyer, on the client → Retail tab. Mark Pending or Picked up and add notes there (admins, studio managers, front desk). The studio contact email (App & Site policies / company email) gets one notification with the buyer, item, qty, and charged total including the card fee.

Signed-in clients on the public Shop page (/s/{slug}/shop) get Purchase history. That list is only their own sales at this studio (date, item × qty, amount paid including any card fee, Pending or Picked up). Signed-out visitors do not see it, including when Sign in is hidden on the storefront. Walk-in desk sales without a linked client can still show up if Stripe stored the same email as their account — only for this company.

Admin: card processing fees

There is one studio-wide toggle, not a separate retail switch.

  1. Open Settings → Integrations.
  2. Turn on Pass processing fees to client (same box used for memberships, packs, drop-ins, and class fees).
  3. Save. Retail desk sales and the public shop then add the labeled Card processing fee so the studio still nets the listed (or This sale $) price.

What staff and customers see:

  • Desk (/shop/items): under This sale $, the fee and Due today update when quantity or the override price changes.
  • Online shop (/s/{slug} Shop merchandise): the fee line appears on the product card and again on /s/{slug}/buy/{productId} before Continue to payment.
  • Stripe Checkout: the fee is its own line item (Card processing fee), same label as class checkouts.
  • Sales history (/shop/items/sales): unit, fee, and charged (unit × qty + fee). A refund marks the whole sale refunded, including the fee, same as other Stripe purchases.

The catalog price does not change. Only the charged Checkout total grows when the toggle is on. $0 items have no fee. Use Stripe test mode only; stop before a live charge.

Admin: who can buy

Public shop (/s/{slug}/shop and Buy) requires a studio client account. Signed-out buyers go to Sign in / Create account, then back to that product. On the embedded storefront, sign-in opens in a new tab on /s/{slug}/account so it is not trapped in the iframe.

Desk Checkout and Custom sale links are signed (unit, exp, sig) and do not require customer login — staff sell to walk-ins in person.

Front desk (phone or iPad)

  1. Open Retail and add a product (name, set price, optional description). Upload a photo (JPG/PNG/WEBP/GIF) — it is stored in the same Cloudflare R2 bucket as staff/client photos (retail/{companyId}/{productId}). Pasting an https image URL remains an optional fallback if R2 is not configured. Leave Show on public store on if it should appear on /s/{slug} Shop merchandise.
  2. Tap Checkout for list price × 1. For another quantity or This sale $, use the ⋯ menu → Custom sale…, then Open checkout or Copy link.
  3. Open the link on the desk device. Confirm the fee line on the studio summary, then continue to Stripe Checkout on this company’s Integrations secret key.
  4. The client pays on Stripe. Stop before completing a live charge in shared preview environments.

Desk links look like /s/{slug}/buy/{productId}?unit=&exp=&sig=. Unsigned storefront Buy requires sign-in and uses the catalog list price. Signed desk links skip customer login.

A completed Stripe Checkout for a retail item records the sale (including any card fee). A refund marks that whole sale refunded. Retail payments never add class credits. Sales history lists those payments by month and product. Empty is expected until a desk or shop Checkout completes.

Checkout stays closed until Stripe can take charges and class payments are connected (same gate as memberships).

Product images

Product photos use the same file storage as staff and client photos. Studio admins who can edit retail products can upload. The public shop and Stripe Checkout show that image (or a pasted https URL).