buildmymcpserver/apps/web/app/(marketing)
Marco Sadjadi c2a21fc3cd
Some checks failed
Deploy to Production / deploy (push) Failing after 46s
feat(billing): Stripe Checkout + Customer Portal + signed webhook
- @bmm/api: stripe@22 SDK, plan-aware price-id lookup, Redis-backed event
  idempotency (7d TTL covers Stripe's retry window), startup warning when
  STRIPE_PRICE_* env vars contain product ids (prod_) by mistake
- routes/billing.ts:
    POST /v1/billing/checkout-session  → Stripe-hosted Checkout, SEPA+card,
                                          auto-VAT via Stripe Tax, tax_id
                                          collection for B2B, address required
    POST /v1/billing/portal            → Customer Portal session
    GET  /v1/billing/status            → drives the settings/billing UI
    POST /v1/billing/webhook           → signed, idempotent, handles
                                          checkout.session.completed,
                                          subscription.{created,updated,deleted},
                                          invoice.{paid,payment_failed}
- index.ts: rawBody-aware JSON parser so Stripe signature verify gets the
  exact payload bytes
- web: /settings/billing page (status, upgrade flow, manage-billing portal,
  auto-checkout when arriving with ?tier=… from the pricing CTAs), pricing
  page CTAs point to /settings/billing?tier=…
- Payment-failure path: suspend org only after 3rd failed attempt (Stripe
  Smart Retries handles the soft-retries). Suspended orgs keep their running
  servers but cannot create new ones (enforcement is in /v1/servers POST as
  a follow-up).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 16:30:42 +02:00
..
changelog feat(web): full SEO stack — metadata, JSON-LD, sitemap, robots, OG image 2026-05-21 19:16:40 +02:00
pricing feat(billing): Stripe Checkout + Customer Portal + signed webhook 2026-05-25 16:30:42 +02:00
privacy feat: tiered LLM (GLM free / Claude paid) + rate limits + quota enforcement 2026-05-23 23:50:00 +02:00
security feat: tiered LLM (GLM free / Claude paid) + rate limits + quota enforcement 2026-05-23 23:50:00 +02:00
status feat(web): full SEO stack — metadata, JSON-LD, sitemap, robots, OG image 2026-05-21 19:16:40 +02:00
terms feat(web): full SEO stack — metadata, JSON-LD, sitemap, robots, OG image 2026-05-21 19:16:40 +02:00
layout.tsx feat(web): country-code picker, auth-aware header, dedupe new-server CTA 2026-05-21 23:41:19 +02:00
page.tsx fix(web): mobile-responsive hero, marketing site, docs and dashboard 2026-05-21 23:25:26 +02:00