From 375bfc46b12f7945227d384c8bafa26ff2dc0a25 Mon Sep 17 00:00:00 2001 From: DeathKaioken Date: Fri, 3 Oct 2025 21:37:08 +0200 Subject: [PATCH] feature: add Memberships Page with dummy data --- src/app/components/PageLayout.tsx | 6 +- src/app/memberships/page.tsx | 418 ++++++++++++++++++++++++++++++ 2 files changed, 421 insertions(+), 3 deletions(-) create mode 100644 src/app/memberships/page.tsx diff --git a/src/app/components/PageLayout.tsx b/src/app/components/PageLayout.tsx index 87be461..72cdec9 100644 --- a/src/app/components/PageLayout.tsx +++ b/src/app/components/PageLayout.tsx @@ -25,7 +25,7 @@ export default function PageLayout({ const isMobile = isMobileDevice(); return ( -
+
{showHeader && (
@@ -33,8 +33,8 @@ export default function PageLayout({
)} - {/* Main content */} -
+ {/* Main content now participates in normal document flow */} +
{children}
diff --git a/src/app/memberships/page.tsx b/src/app/memberships/page.tsx new file mode 100644 index 0000000..bb35149 --- /dev/null +++ b/src/app/memberships/page.tsx @@ -0,0 +1,418 @@ +import { CheckIcon, XMarkIcon } from '@heroicons/react/20/solid' +import PageLayout from '../components/PageLayout' + +const frequencies = [ + { value: 'monthly', label: 'Monthly' }, + { value: 'annually', label: 'Annually' }, +] +const tiers = [ + { + name: 'Starter', + id: 'tier-starter', + href: '#', + featured: false, + description: 'Everything you need to get started.', + price: { monthly: '$19', annually: '$199' }, + highlights: ['Custom domains', 'Edge content delivery', 'Advanced analytics'], + }, + { + name: 'Scale', + id: 'tier-scale', + href: '#', + featured: true, + description: 'Added flexibility at scale.', + price: { monthly: '$99', annually: '$999' }, + highlights: [ + 'Custom domains', + 'Edge content delivery', + 'Advanced analytics', + 'Quarterly workshops', + 'Single sign-on (SSO)', + 'Priority phone support', + ], + }, + { + name: 'Growth', + id: 'tier-growth', + href: '#', + featured: false, + description: 'All the extras for your growing team.', + price: { monthly: '$49', annually: '$499' }, + highlights: ['Custom domains', 'Edge content delivery', 'Advanced analytics', 'Quarterly workshops'], + }, +] +const sections = [ + { + name: 'Features', + features: [ + { name: 'Edge content delivery', tiers: { Starter: true, Growth: true, Scale: true } }, + { name: 'Custom domains', tiers: { Starter: '1', Growth: '3', Scale: 'Unlimited' } }, + { name: 'Team members', tiers: { Starter: '3', Growth: '20', Scale: 'Unlimited' } }, + { name: 'Single sign-on (SSO)', tiers: { Starter: false, Growth: false, Scale: true } }, + ], + }, + { + name: 'Reporting', + features: [ + { name: 'Advanced analytics', tiers: { Starter: true, Growth: true, Scale: true } }, + { name: 'Basic reports', tiers: { Starter: false, Growth: true, Scale: true } }, + { name: 'Professional reports', tiers: { Starter: false, Growth: false, Scale: true } }, + { name: 'Custom report builder', tiers: { Starter: false, Growth: false, Scale: true } }, + ], + }, + { + name: 'Support', + features: [ + { name: '24/7 online support', tiers: { Starter: true, Growth: true, Scale: true } }, + { name: 'Quarterly workshops', tiers: { Starter: false, Growth: true, Scale: true } }, + { name: 'Priority phone support', tiers: { Starter: false, Growth: false, Scale: true } }, + { name: '1:1 onboarding tour', tiers: { Starter: false, Growth: false, Scale: true } }, + ], + }, +] + +function classNames(...classes: (string | undefined | null | false)[]): string { + return classes.filter(Boolean).join(' ') +} + +export default function MembershipsPage() { + return ( + +
+
+
+
+

+ Pricing that grows with you +

+

+ Choose an affordable plan that’s packed with the best features for engaging your audience, creating + customer loyalty, and driving sales. +

+
+
+
+ + +
+
+
+
+
+ + +
+
+
+
+ {/* Feature comparison (up to lg) */} +
+

+ Feature comparison +

+ +
+ {tiers.map((tier) => ( +
+
+

+ {tier.name} +

+

{tier.description}

+
+ +
+ {sections.map((section) => ( +
+

{section.name}

+
+ {/* Fake card background */} + + ))} +
+
+ ))} +
+
+ + {/* Feature comparison (lg+) */} +
+

+ Feature comparison +

+ +
+ {tiers.map((tier) => ( + + ))} +
+ +
+ {sections.map((section) => ( +
+

{section.name}

+
+ {/* Fake card backgrounds */} +
+
+
+ + + ) +} \ No newline at end of file