Add Mollie checkout flow, billing UI, and payment UX polish #71

Merged
uz1mani merged 73 commits from staging into main 2026-03-28 10:28:03 +00:00
11 changed files with 802 additions and 95 deletions
Showing only changes of commit 6be8952fbe - Show all commits

8
app/checkout/layout.tsx Normal file
View File

@@ -0,0 +1,8 @@
export const metadata = {
title: 'Checkout — Pulse',
robots: 'noindex, nofollow',
}
export default function CheckoutLayout({ children }: { children: React.ReactNode }) {
return children
}

View File

@@ -19,7 +19,7 @@ import pulseLogo from '@/public/pulse_logo_no_margins.png'
const VALID_PLANS = new Set(Object.keys(PLAN_PRICES))
const VALID_INTERVALS = new Set(['month', 'year'])
const VALID_LIMITS = new Set(TRAFFIC_TIERS.map((t) => t.value))
const VALID_LIMITS = new Set<number>(TRAFFIC_TIERS.map((t) => t.value))
function isValidCheckoutParams(plan: string | null, interval: string | null, limit: string | null) {
if (!plan || !interval || !limit) return false
@@ -196,14 +196,14 @@ function CheckoutContent() {
<div className="grid grid-cols-1 gap-6 lg:grid-cols-2">
{/* Left — Plan summary */}
<PlanSummary
planId={planId}
plan={planId}
interval={billingInterval}
limit={pageviewLimit}
/>
{/* Right — Payment form */}
<PaymentForm
planId={planId}
plan={planId}
interval={billingInterval}
limit={pageviewLimit}
/>