merch.
Official Merchandise
🕐
shop.merchdot.com
merch.
Official Merchandise
Maybe Happy Ending · Chicago · CIBC Theatre
shop.merchdot.com
merch.
Guest
National Tour · Chicago, IL · CIBC Theatre
Maybe Happy
Ending
Oct 14 – Nov 2, 2026  ·  8 PM Tonight
Order Ahead · Pickup before or after the show from the main level merch booth.
Shopify Storefront API
In production, products load from f3082f-2.myshopify.com/api/2024-01/graphql.json using your public Storefront token. Replace SHOPIFY_STOREFRONT_TOKEN in the config block at the bottom of this file. The fetchProducts() and createCart() functions are fully wired — set USE_MOCK = false to go live.
Maybe Happy Ending
Loading…
Fetching inventory…
Quantity
1
Your Bag
Checkout
shop.merchdot.com
Contact
Required
Required
Valid email required
Valid phone required
⬡  Join Theatre Club (Free)
Get early access to drops, member pricing, and your digital member card. No spam, cancel any time.
Ship To
Order Summary
* Applicable taxes will be added at payment.
Fulfillment Method
🔒
Secure Shopify Checkout: Clicking "Place Order" calls cartCreate on the Storefront API, attaches your venue/seat metadata, and redirects to f3082f-2.myshopify.com/checkout for payment. Your card details are handled entirely by Shopify — never by this PWA. On completion, a Cloudflare Worker webhook fires to tag the order and trigger the TC membership flow.
Order Confirmed
You're all set.
Your order is being prepared. Show your pickup code at the merch table before the show.
Pickup Code
MHE·417
CIBC Theatre · Pre-show Pickup
⬡  Welcome to Theatre Club
Your TC Member card has been emailed to you. You now have early access to future drops and 5% off every order. The ghost light is always on.
From the crew to the ingenue.
Staff Access
merch.
merch.
Venue Staff · Order Queue
Live
0
New
0
Ready
0
Picked Up
⚡ Cloudflare Worker — Admin API Webhook Stub
// workers/order-webhook.js // Deploy: wrangler deploy // Route: api.orderahead.merchdot.com/webhooks/order-created export default { async fetch(request, env) { const order = await request.json(); // 1. Write venue metafields to order (Admin API) await shopifyAdmin(env, `/orders/${order.id}/metafields`, { metafield: { namespace: "merchdot", key: "venue_id", value: order.note_attributes?.find( a => a.name === "venue_id")?.value, type: "single_line_text_field" } }); // 2. Tag customer TC-MEMBER via Admin API // (Shopify Flow also handles this — belt + braces) await tagCustomer(env, order.customer.id, "TC-MEMBER"); // 3. Fire Klaviyo event → triggers Welcome Series await klaviyoEvent(env, order.customer.email, "tc_member_joined", { source: "PWA", venue: order.note_attributes?.find(a => a.name === "venue_id")?.value, show: "maybe-happy-ending" }); // 4. Notify staff dashboard (real-time queue update) await env.STAFF_QUEUE.put( `order:${order.id}`, JSON.stringify({ order, status: "new" }) ); return new Response("OK", { status: 200 }); } };
merch.
Manager Login
Email
Password
merch.
Schedule Editor
Set shop hours per day of week.
Times in venue local time. Toggle off to close for the day.
Day
Open → Close
Sign out