Skip to content

Add spa membership checkout flow - #61

Draft
awitherow wants to merge 2 commits into
mainfrom
feature/spa-membership-checkout
Draft

Add spa membership checkout flow#61
awitherow wants to merge 2 commits into
mainfrom
feature/spa-membership-checkout

Conversation

@awitherow

Copy link
Copy Markdown
Collaborator

Summary

  • add /membership page with custom monthly/yearly stored-value treatment credit amount picker
  • add dynamic Stripe Checkout subscription route for spa membership credit plus processing-fee line item
  • add /membership/success and header nav link

Terms

  • selected membership amount becomes treatment credit toward eligible procedures
  • credit applies against current listed prices, subject to change
  • processing fees are added separately so selected amount remains credit

Verification

  • pnpm lint
  • pnpm build
  • local /membership HTTP 200 and copy/schema marker check

Not run

  • Stripe Checkout Session smoke, intentionally skipped per Austin; existing Stripe product flow is already working and this PR reuses the same Stripe client/env pattern.

@vercel

vercel Bot commented Jun 20, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
williamsburgmedspa Ready Ready Preview, Comment Jun 20, 2026 5:47pm

Request Review

@awitherow

Copy link
Copy Markdown
Collaborator Author

Moved back to draft and held outside the SEO release train. This changes subscription, stored-value credit, and Stripe behavior and is not eligible to merge without a fresh current-main rebase, confirmed membership/product terms, and an end-to-end Stripe Checkout plus webhook/entitlement smoke.

@awitherow

Copy link
Copy Markdown
Collaborator Author

Membership readiness review at exact SHA 8ed74d021f0668333ab70fc5e758e7e4c188718a:

  • pnpm lint: passed with two pre-existing <img> warnings.
  • pnpm build: passed.
  • Checkout correctly creates a Stripe subscription and attaches membership metadata.
  • BLOCK: checkout.session.completed is currently routed to syncOrderFromStripeSession(), but membership Checkout does not set metadata.orderId; the webhook therefore throws Stripe session is missing order metadata.
  • BLOCK: recurring renewals are not handled (invoice.paid / equivalent), so new treatment credit is not ledgered per successful billing period.
  • BLOCK: there is no idempotent membership balance/entitlement ledger or cancellation/refund lifecycle.

Keep this PR draft. Next safe slice is a tested membership webhook/ledger contract after the client confirms final monthly/yearly credit and fee terms. Do not run a live Checkout until that path is implemented and tested.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant