Track 1 · Operate

Membership Checkout

Self-serve signup for the six membership plans. Stripe subscription + OfficeRnD member + branded welcome email.

Self-serve signup for the six membership plans (Passport, Startup, All Access, Founder, Creator Pass, Innovator Pass). Stripe subscription + OfficeRnD member + welcome email.

At a glance

Worker labour-temple-checkout.labourtemple.workers.dev
Deploy cd cloudflare-worker && npx wrangler deploy
Logs wrangler tail --format pretty
Email template MailerSend z3m5jgr0y5xgdpyo
Plan config PLAN_CONFIG in worker.js (edit → deploy)
Team recipients TEAM_EMAILS in worker.js (edit → deploy)
CMS collection Webflow → Memberships (Site ID 639b202ca505e87cee446ad0)
Terms /legal/membership-terms · Creator Pass → /legal/sonic-terms

The five surfaces to check

  1. Stripe → Customers / Subscriptions / Events / Logs
  2. OfficeRnD → Members / Memberships
  3. Worker logswrangler tail or Cloudflare Dashboard
  4. MailerSend → Activity log (filter by recipient)
  5. Browser → Console + Network tab on the membership page

When to escalate to Chris

Ping with Stripe Customer ID / PaymentIntent ID + customer email + one-line symptom when:


Incident playbooks

1. "I signed up but can't log in / access amenities" — paid but no access

Check. Stripe → confirm subscription active, first invoice paid. OfficeRnD → confirm member exists + active membership on the right plan.

Fix.

  • Stripe good, no OfficeRnD member → create member manually, assign matching plan.
  • Member exists, no membership → assign plan manually with start date = Stripe subscription start.
  • Nothing anywhere → they abandoned checkout. Ask them to retry.

Escalate if member creation consistently fails silently — OAuth creds may have rotated.

2. Card declined at Stripe

Client-side Stripe interaction. Customer was not charged. Ask them to try another card or ACH. Never escalates.

3. Charged but no branded welcome email

Check. MailerSend Activity by recipient. Check spam.

Fix.

  • "Sent" but missing → resend from MailerSend, or forward a manual welcome.
  • "Failed" → likely bad email address. Correct in OfficeRnD and resend.
  • No attempt → MAILERSEND_API_KEY may be revoked, or outage.

Email is non-blocking — the subscription and member assignment still succeed.

4. Auto-promo didn't apply — customer charged the initiation fee

Naming convention: AUTO-{PLAN-SLUG} (all caps). Check Stripe → Products → Coupons.

Fix. Confirm promo exists, is active, name matches plan slug exactly. If missing or inactive, the checkout works but skips the discount silently. Refund the initiation fee and fix the promo for future signups.

Prevention. When creating a new plan, always create its AUTO-{SLUG} promotion code at the same time. No deploy required.

5. Existing OfficeRnD member signs up for a new plan

Expected: Worker's Step 6 locates the existing member by email and adds a new membership assignment.

If it errors — confirm the customer used the exact email on their OfficeRnD record. Typos create duplicates. If a duplicate was created, merge in OfficeRnD with the new membership following the surviving record.

6. Renewal charge failed

Stripe → Invoices → Failed. Stripe auto-retries per Smart Retries settings (default: multiple attempts over 1–3 weeks).

If all retries fail, Stripe cancels the subscription. Member re-enters payment via customer portal (if configured) or re-signs up.

Escalate if multiple customers fail on the same day — check status.stripe.com.

7. Customer wants to cancel

No self-service cancellation exists.

Fix. Confirm in writing → cancel Stripe subscription (end-of-period vs immediate per policy) → end-date membership in OfficeRnD → confirmation email.

Decide now: cancellations at end of current billing period (recommended) or immediate with proration. Apply consistently.

8. Plan change (upgrade / downgrade)

Cleanest: cancel existing subscription end-of-period, have them re-sign up on the new plan via the site (preserves auto-promo logic).

Mid-cycle: update the Stripe subscription Price directly (Stripe handles proration). Mirror in OfficeRnD: end-date old assignment, create new.

9. "Invalid plan" error in the browser

Check. CMS plan-slug on that plan matches a key in PLAN_CONFIG exactly (case-sensitive, kebab-case). Browser console: window._S defined, checkout.js loaded.

Fix. Correct the CMS field (not the Worker) and republish. If checkout.js still fails to load, 5-min cache may be stale.

10. Checkout loads but the form is blank

Check. Browser console for errors. Confirm stripe_checkout_v21 site script is still applied (Webflow → Site Settings → Custom Code). The Scripts API overwrites site scripts on update, so another integration may have displaced ours.

Fix. Re-apply via the Worker's admin command or restore from Webflow version history.

Escalate with browser, OS, and a console screenshot if the script is present and still broken.