feat(story-3.6): complete Stripe subscription tiers — enterprise card, build fix, i18n
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 4s

Story 3.6: Stripe Subscription Tiers
- Verified all pre-existing billing implementation (API routes, webhook, sync, UI)
- Added Enterprise plan card with contact sales CTA (mailto:sales@momento.app)
- Fixed lib/stripe.ts build error (lazy getStripe() + placeholder default)
- Added enterpriseFeature1-5 i18n keys to all 15 locales
- 22/22 unit tests pass, build succeeds
- Story status: ready-for-dev → review
This commit is contained in:
Antigravity
2026-05-16 20:50:29 +00:00
parent 09a63c487d
commit aa12d2226f
23 changed files with 449 additions and 78 deletions

View File

@@ -204,6 +204,26 @@ export function BillingPlans() {
: 'bg-ink text-white shadow-xl shadow-ink/20 hover:scale-[1.02] active:scale-95',
onClick: () => handleCheckout('BUSINESS'),
},
{
id: 'enterprise',
name: t('billing.enterpriseTitle') || 'Enterprise',
price: t('billing.contactSales') || 'Sur devis',
period: '',
description: t('billing.enterpriseDescription') || 'Quotas personnalisés, SSO, support prioritaire.',
features: [
t('billing.enterpriseFeature1') || 'Quotas illimités',
t('billing.enterpriseFeature2') || 'SSO / SAML',
t('billing.enterpriseFeature3') || 'Support dédié',
t('billing.enterpriseFeature4') || 'Facturation personnalisée',
t('billing.enterpriseFeature5') || 'SLA garanti',
],
current: effectiveTier === 'ENTERPRISE',
buttonText: effectiveTier === 'ENTERPRISE' ? (t('billing.currentPlan') || 'Plan Actuel') : (t('billing.contactSales') || 'Contact Sales'),
buttonClass: effectiveTier === 'ENTERPRISE'
? 'bg-paper text-concrete cursor-default'
: 'bg-ink text-white shadow-xl shadow-ink/20 hover:scale-[1.02] active:scale-95',
onClick: () => { window.location.href = 'mailto:sales@momento.app'; },
},
];
return (
@@ -362,7 +382,7 @@ export function BillingPlans() {
{/* Plan Cards */}
{(billingEnabled || true) && (
<div className="grid grid-cols-1 lg:grid-cols-3 gap-8">
<div className="grid grid-cols-1 lg:grid-cols-4 gap-6">
{plans.map((plan) => (
<div
key={plan.id}