aethex-forge/client/pages/Pricing.tsx
sirpiglr 2decee28e2 Add subscription management and pricing tiers to the platform
Implement Stripe integration for subscription creation, management, and webhook handling. Update pricing page to display membership tiers and integrate checkout functionality.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 9203795e-937a-4306-b81d-b4d5c78c240e
Replit-Commit-Checkpoint-Type: intermediate_checkpoint
Replit-Commit-Event-Id: 6d5c407a-473f-4820-a33d-abb2ae3e6b37
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/7c94b7a0-29c7-4f2e-94ef-44b2153872b7/9203795e-937a-4306-b81d-b4d5c78c240e/MdI1YXa
Replit-Helium-Checkpoint-Created: true
2025-12-12 23:27:03 +00:00

1028 lines
38 KiB
TypeScript

import { useEffect, useRef, useState } from "react";
import Layout from "@/components/Layout";
import LoadingScreen from "@/components/LoadingScreen";
import { Button } from "@/components/ui/button";
import { Badge } from "@/components/ui/badge";
import {
Card,
CardContent,
CardDescription,
CardHeader,
CardTitle,
CardFooter,
} from "@/components/ui/card";
import { aethexToast } from "@/lib/aethex-toast";
import { Link, useSearchParams } from "react-router-dom";
import {
BadgeDollarSign,
Briefcase,
CalendarCheck,
CheckCircle2,
Award,
BarChart3,
Clock,
DollarSign,
Handshake,
Layers,
LineChart,
Rocket,
Sparkles,
Stars,
Users,
Crown,
Zap,
Bot,
Lock,
Check,
Loader2,
ExternalLink,
} from "lucide-react";
import { useAuth } from "@/contexts/AuthContext";
import { supabase } from "@/lib/supabase";
type ServiceBundle = {
id: string;
name: string;
description: string;
startingAt: string;
typicalScope: string;
timeline: string;
includes: string[];
};
type EngagementModel = {
name: string;
summary: string;
bestFor: string;
pricing: string;
highlights: string[];
};
type CommissionTier = {
name: string;
split: string;
threshold: string;
notes: string;
};
type AddOn = {
title: string;
description: string;
rate: string;
icon: React.ElementType;
};
const serviceBundles: ServiceBundle[] = [
{
id: "game-development",
name: "Game Development",
description:
"Full-cycle production for Roblox, mobile, desktop, and console experiences. Ideal for creators scaling prototypes into live products.",
startingAt: "Starting at $2,500",
typicalScope: "Custom builds, ports, live ops systems",
timeline: "2-12 months depending on scope",
includes: [
"Dedicated producer + cross-disciplinary pod",
"Weekly playable builds with QA reports",
"Monetization + analytics integration",
"Launch, certification, and post-launch support",
],
},
{
id: "development-consulting",
name: "Development Consulting",
description:
"Strategy, architecture, and delivery acceleration for product teams modernizing stacks or scaling platforms.",
startingAt: "Starting at $6,000",
typicalScope: "Audits, modernization, DevOps, team enablement",
timeline: "1-12 weeks for engagements, retainers available",
includes: [
"Detailed technical audit and roadmap",
"Implementation pairing with in-house teams",
"Security, compliance, and performance baselines",
"Executive-ready reporting and success metrics",
],
},
{
id: "mentorship",
name: "Mentorship & Education",
description:
"Personalized mentorship programs, boot camps, and corporate training to upskill teams and individuals.",
startingAt: "Starting at $150/month",
typicalScope: "1:1 mentorship, group cohorts, enterprise training",
timeline: "4-24 weeks depending on track",
includes: [
"Custom learning plans and project briefs",
"Weekly live sessions with senior practitioners",
"Portfolio and interview preparation",
"Progress analytics shared with sponsors",
],
},
];
const engagementModels: EngagementModel[] = [
{
name: "Project-Based",
summary:
"Fixed-scope delivery with milestone billing. Transparent budgets and predictable outcomes for well-defined initiatives.",
bestFor: "Game launches, feature builds, audits, modernization projects",
pricing: "Quotes from $5,000 based on scope",
highlights: [
"Detailed proposal with scope, timeline, and deliverables",
"Milestone-based invoices aligned to value delivered",
"Dedicated producer as single point of contact",
],
},
{
name: "Retainer & Pod",
summary:
"Reserved capacity from a cross-functional AeThex pod. Ideal for studios needing consistent momentum and rapid iteration.",
bestFor: "Live ops, product roadmap execution, embedded leadership",
pricing: "Pods available from $4,500/month",
highlights: [
"Guaranteed hours and sprint cadence",
"Mix-and-match roles (engineering, design, PM)",
"Velocity reporting and prioritization workshops",
],
},
{
name: "Revenue Share / Commission",
summary:
"Performance-aligned partnerships where AeThex participates directly in upside across launches, cosmetics, or creator tooling.",
bestFor:
"Creators with engaged audiences, experiential brands, emerging studios",
pricing: "Flexible splits after recouped production costs",
highlights: [
"Shared analytics dashboards and growth experiments",
"Ongoing live ops + marketing alignment meetings",
"Option to blend with modest retainers for guaranteed throughput",
],
},
];
const commissionTiers: CommissionTier[] = [
{
name: "Indie Accelerator",
split: "70% creator / 30% AeThex after cost recovery",
threshold: "Projects under $50K or first-time launches",
notes:
"AeThex fronts production sprints and tooling. Marketing boosts via community partners included.",
},
{
name: "Studio Partnership",
split: "80% partner / 20% AeThex on net revenue",
threshold: "Established teams with existing distribution",
notes:
"Joint roadmap planning, LiveOps experimentation, and marketplace merchandising support.",
},
{
name: "Enterprise Commission",
split: "Custom 10-25% performance fee",
threshold:
"High-profile activations, seasonal events, or branded experiences",
notes:
"Co-marketing, compliance, and rapid scale pods with 24/7 operations.",
},
];
const addOns: AddOn[] = [
{
title: "Creative Direction",
description:
"Narrative design, concept art, branding systems, and pitch decks ready for investors or communities.",
rate: "$2,000+ per engagement",
icon: Sparkles,
},
{
title: "Growth & Monetization",
description:
"Economy balancing, pricing experiments, retention funnels, and live events strategy.",
rate: "$1,200/mo or revenue share",
icon: LineChart,
},
{
title: "Support & Operations",
description:
"Player support, moderation, telemetry tuning, and automated health checks across platforms.",
rate: "$95/hr or bundle",
icon: Users,
},
{
title: "QA & Certification",
description:
"Platform certification, device matrix testing, and regression pipelines for continuous delivery.",
rate: "$1,500 per release window",
icon: CalendarCheck,
},
];
const process = [
{
step: "01",
title: "Discovery & Alignment",
description:
"Schedule an intro call, share goals, and walk through references. We map success criteria and define the engagement model.",
},
{
step: "02",
title: "Proposal & Approval",
description:
"Receive a detailed proposal with investment breakdown, milestones, resourcing model, and optional add-ons.",
},
{
step: "03",
title: "Launch Sprint",
description:
"Kick off with a stakeholder workshop. We lock delivery cadence, communication stack, and analytics instrumentation.",
},
{
step: "04",
title: "Scale & Optimize",
description:
"Track KPIs together, review demos, and iterate. Additional pods or commission tiers can be activated as momentum grows.",
},
];
const faqs = [
{
question: "How do you price mixed-scope engagements?",
answer:
"We blend fixed-fee milestones for known deliverables with retainers or revenue share for live operations and experimental features. The model is always transparent and documented before kickoff.",
},
{
question: "What information helps you quote faster?",
answer:
"Links to existing builds, tech stack details, target platforms, deadlines, and growth goals. Even bullet-point dreams are welcome—our team is great at filling in blanks.",
},
{
question: "Can we start small before scaling up?",
answer:
"Absolutely. Many partners engage us for a quick assessment or prototype sprint before expanding into retainers or revenue share models.",
},
{
question: "Do you work with external creators or agencies?",
answer:
"Yes. We routinely collaborate with independent artists, streamers, and agencies. Our commission tiers were designed to align incentives across blended teams.",
},
];
type MembershipTier = {
id: "free" | "pro" | "council";
name: string;
price: string;
priceNote?: string;
description: string;
features: string[];
aiPersonas: string[];
highlight?: boolean;
badge?: string;
};
const membershipTiers: MembershipTier[] = [
{
id: "free",
name: "Free",
price: "$0",
priceNote: "forever",
description: "Essential access to the AeThex ecosystem with core AI assistants.",
features: [
"Community feed & discussions",
"Basic profile & passport",
"Opportunity browsing",
"2 AI personas included",
],
aiPersonas: ["Network Agent", "Ethics Sentinel"],
},
{
id: "pro",
name: "Pro",
price: "$9",
priceNote: "/month",
description: "Unlock advanced AI personas and enhanced platform features.",
features: [
"Everything in Free",
"Priority support",
"Advanced analytics",
"8 AI personas total",
"Badge unlocks via achievements",
],
aiPersonas: [
"Network Agent",
"Ethics Sentinel",
"Forge Master",
"SBS Architect",
"Curriculum Weaver",
"QuantumLeap",
"Vapor",
"Apex",
],
highlight: true,
badge: "Most Popular",
},
{
id: "council",
name: "Council",
price: "$29",
priceNote: "/month",
description: "Full access to all AI personas and exclusive Council benefits.",
features: [
"Everything in Pro",
"All 10 AI personas",
"Council-only Discord channels",
"Early feature access",
"Direct team communication",
"Governance participation",
],
aiPersonas: [
"All Pro personas",
"Ethos Producer",
"AeThex Archivist",
],
badge: "Elite",
},
];
export default function Engage() {
const [isLoading, setIsLoading] = useState(true);
const [checkoutLoading, setCheckoutLoading] = useState<string | null>(null);
const [userTier, setUserTier] = useState<string | null>(null);
const toastShownRef = useRef(false);
const [searchParams] = useSearchParams();
const { user } = useAuth();
useEffect(() => {
const fetchUserTier = async () => {
if (!user) {
setUserTier(null);
return;
}
const { data } = await supabase
.from("user_profiles")
.select("tier")
.eq("id", user.id)
.single();
setUserTier(data?.tier || "free");
};
fetchUserTier();
}, [user]);
useEffect(() => {
const subscriptionStatus = searchParams.get("subscription");
if (subscriptionStatus === "success") {
aethexToast.success({ title: "Subscription Activated", description: "Welcome to your new tier!" });
} else if (subscriptionStatus === "cancelled") {
aethexToast.info({ title: "Checkout Cancelled", description: "No changes were made." });
}
}, [searchParams]);
const handleCheckout = async (tier: "pro" | "council") => {
if (!user) {
aethexToast.error({ title: "Sign In Required", description: "Please sign in to subscribe" });
return;
}
setCheckoutLoading(tier);
try {
const { data: { session } } = await supabase.auth.getSession();
const response = await fetch("/api/subscriptions/create-checkout", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${session?.access_token}`,
},
body: JSON.stringify({
tier,
successUrl: `${window.location.origin}/pricing?subscription=success`,
cancelUrl: `${window.location.origin}/pricing?subscription=cancelled`,
}),
});
const data = await response.json();
if (!response.ok) {
throw new Error(data.error || "Failed to create checkout session");
}
if (data.url) {
window.location.href = data.url;
}
} catch (error: any) {
console.error("Checkout error:", error);
aethexToast.error({ title: "Checkout Error", description: error.message || "Failed to start checkout" });
} finally {
setCheckoutLoading(null);
}
};
const handleManageSubscription = async () => {
if (!user) return;
try {
const { data: { session } } = await supabase.auth.getSession();
const response = await fetch("/api/subscriptions/manage", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${session?.access_token}`,
},
body: JSON.stringify({ action: "portal" }),
});
const data = await response.json();
if (data.url) {
window.open(data.url, "_blank");
}
} catch (error) {
aethexToast.error({ title: "Billing Portal Error", description: "Failed to open billing portal" });
}
};
useEffect(() => {
const timer = setTimeout(() => {
setIsLoading(false);
if (!toastShownRef.current) {
aethexToast.system("Engagement center ready");
toastShownRef.current = true;
}
}, 900);
return () => clearTimeout(timer);
}, []);
if (isLoading) {
return (
<LoadingScreen
message="Loading engagement center..."
showProgress
duration={900}
/>
);
}
return (
<Layout>
<div className="min-h-screen bg-aethex-gradient">
{/* Hero */}
<section className="relative overflow-hidden py-16 sm:py-24 lg:py-28">
<div className="absolute inset-0 opacity-15">
{[...Array(35)].map((_, idx) => (
<div
key={idx}
className="absolute text-aethex-400/80 animate-float"
style={{
left: `${Math.random() * 100}%`,
top: `${Math.random() * 100}%`,
animationDelay: `${Math.random() * 3}s`,
animationDuration: `${3 + Math.random() * 2}s`,
fontSize: `${8 + Math.random() * 8}px`,
}}
>
{"💼🎮📈🛠️".charAt(Math.floor(Math.random() * 4))}
</div>
))}
</div>
<div className="container relative z-10 mx-auto max-w-5xl px-4 text-center">
<div className="mx-auto flex max-w-3xl flex-col items-center gap-8">
<Badge
variant="outline"
className="border-aethex-400/50 text-aethex-300 backdrop-blur-sm"
>
<Handshake className="mr-2 h-3 w-3" />
Engagement Playbook
</Badge>
<h1 className="text-4xl font-black tracking-tight sm:text-5xl lg:text-6xl">
<span className="text-gradient-purple">
Choose how you collaborate with AeThex
</span>
</h1>
<p className="text-lg text-muted-foreground sm:text-xl">
Compare investment models, commission structures, and add-ons in
a single hub. Every action to engage AeThex now routes here so
you can align stakeholders quickly.
</p>
<div className="flex flex-col gap-4 sm:flex-row">
<Button
asChild
size="lg"
className="bg-gradient-to-r from-aethex-500 to-neon-blue hover:from-aethex-600 hover:to-neon-blue/90 text-base sm:text-lg px-6 py-4 sm:px-8 sm:py-6"
>
<a href="#membership" className="flex items-center gap-2">
<Crown className="h-5 w-5" />
View Membership Tiers
</a>
</Button>
<Button
asChild
variant="outline"
size="lg"
className="border-aethex-400/60 text-aethex-100 hover:bg-aethex-500/10 text-base sm:text-lg px-6 py-4 sm:px-8 sm:py-6"
>
<a href="#bundles" className="flex items-center gap-2">
<BadgeDollarSign className="h-5 w-5" />
Explore Engagement Bundles
</a>
</Button>
</div>
<div className="flex flex-wrap justify-center gap-3 text-xs uppercase tracking-[0.2em] text-muted-foreground/70">
<span className="flex items-center gap-1">
<Clock className="h-3 w-3" />
24-hour proposal turnaround
</span>
<span className="flex items-center gap-1">
<Stars className="h-3 w-3" />
Transparent milestones
</span>
<span className="flex items-center gap-1">
<Users className="h-3 w-3" />
Embedded expert pods
</span>
</div>
</div>
</div>
</section>
{/* Membership Tiers */}
<section id="membership" className="bg-background/30 py-16 sm:py-20">
<div className="container mx-auto max-w-6xl px-4">
<div className="text-center mb-12">
<Badge
variant="outline"
className="border-aethex-400/50 text-aethex-300 backdrop-blur-sm mb-4"
>
<Bot className="mr-2 h-3 w-3" />
AI-Powered Membership
</Badge>
<h2 className="text-3xl font-bold text-gradient mb-4 sm:text-4xl">
Membership Tiers
</h2>
<p className="text-lg text-muted-foreground max-w-2xl mx-auto">
Unlock advanced AI personas and exclusive platform features.
Choose the tier that matches your creative ambitions.
</p>
{userTier && userTier !== "free" && (
<Button
variant="outline"
className="mt-4 border-aethex-400/60 text-aethex-100 hover:bg-aethex-500/10"
onClick={handleManageSubscription}
>
<ExternalLink className="mr-2 h-4 w-4" />
Manage Subscription
</Button>
)}
</div>
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
{membershipTiers.map((tier) => {
const isCurrentTier = userTier === tier.id;
const tierOrder = { free: 0, pro: 1, council: 2 };
const canUpgrade = !userTier || tierOrder[tier.id] > tierOrder[userTier as keyof typeof tierOrder];
return (
<Card
key={tier.id}
className={`relative overflow-hidden border-border/50 transition-all duration-500 hover:-translate-y-1 ${
tier.highlight
? "border-aethex-400/70 bg-gradient-to-b from-aethex-950/50 to-background shadow-lg shadow-aethex-500/10"
: "hover:border-aethex-400/50"
} ${isCurrentTier ? "ring-2 ring-aethex-400" : ""}`}
>
{tier.badge && (
<div className="absolute top-0 right-0">
<div className={`px-3 py-1 text-xs font-bold uppercase tracking-wider ${
tier.badge === "Elite"
? "bg-gradient-to-r from-amber-500 to-yellow-400 text-black"
: "bg-gradient-to-r from-aethex-500 to-neon-blue text-white"
}`}>
{tier.badge}
</div>
</div>
)}
<CardHeader className="space-y-4 pb-2">
<div className="flex items-center gap-2">
{tier.id === "free" && <Zap className="h-6 w-6 text-muted-foreground" />}
{tier.id === "pro" && <Sparkles className="h-6 w-6 text-aethex-400" />}
{tier.id === "council" && <Crown className="h-6 w-6 text-amber-400" />}
<CardTitle className="text-2xl">{tier.name}</CardTitle>
{isCurrentTier && (
<Badge variant="outline" className="ml-auto border-aethex-400 text-aethex-300">
Current
</Badge>
)}
</div>
<div className="flex items-baseline gap-1">
<span className="text-4xl font-bold text-foreground">{tier.price}</span>
{tier.priceNote && (
<span className="text-muted-foreground">{tier.priceNote}</span>
)}
</div>
<CardDescription>{tier.description}</CardDescription>
</CardHeader>
<CardContent className="space-y-4">
<div className="space-y-2">
{tier.features.map((feature) => (
<div key={feature} className="flex items-start gap-2 text-sm">
<Check className="mt-0.5 h-4 w-4 text-aethex-400 flex-shrink-0" />
<span className="text-muted-foreground">{feature}</span>
</div>
))}
</div>
<div className="pt-4 border-t border-border/50">
<div className="text-xs uppercase tracking-wider text-muted-foreground mb-2 flex items-center gap-1">
<Bot className="h-3 w-3" />
AI Personas Included
</div>
<div className="flex flex-wrap gap-1">
{tier.aiPersonas.map((persona) => (
<Badge
key={persona}
variant="secondary"
className="text-xs bg-background/60"
>
{persona}
</Badge>
))}
</div>
</div>
</CardContent>
<CardFooter className="pt-0">
{tier.id === "free" ? (
<Button
asChild
variant="outline"
className="w-full border-border/60 text-muted-foreground"
>
<Link to={user ? "/dashboard" : "/login"}>
{user ? "Go to Dashboard" : "Sign Up Free"}
</Link>
</Button>
) : isCurrentTier ? (
<Button
variant="outline"
className="w-full border-aethex-400/60 text-aethex-300"
disabled
>
<Check className="mr-2 h-4 w-4" />
Current Plan
</Button>
) : !canUpgrade ? (
<Button
variant="outline"
className="w-full border-border/60 text-muted-foreground"
disabled
>
<Lock className="mr-2 h-4 w-4" />
Included in Current Plan
</Button>
) : (
<Button
className={`w-full ${
tier.id === "council"
? "bg-gradient-to-r from-amber-500 to-yellow-500 hover:from-amber-600 hover:to-yellow-600 text-black"
: "bg-gradient-to-r from-aethex-500 to-neon-blue hover:from-aethex-600 hover:to-neon-blue/90"
}`}
onClick={() => handleCheckout(tier.id as "pro" | "council")}
disabled={checkoutLoading !== null}
>
{checkoutLoading === tier.id ? (
<>
<Loader2 className="mr-2 h-4 w-4 animate-spin" />
Processing...
</>
) : (
<>
Upgrade to {tier.name}
</>
)}
</Button>
)}
</CardFooter>
</Card>
);
})}
</div>
<div className="mt-8 text-center text-sm text-muted-foreground">
<p>
All subscriptions are billed monthly. Cancel anytime from your billing portal.
<br />
Badges earned through achievements can unlock personas without a paid subscription.
</p>
</div>
</div>
</section>
{/* Service Bundles */}
<section id="bundles" className="py-16 sm:py-20">
<div className="container mx-auto max-w-6xl px-4">
<div className="text-center">
<h2 className="text-3xl font-bold text-gradient mb-4 sm:text-4xl">
Core Engagement Bundles
</h2>
<p className="text-lg text-muted-foreground">
These bundles power every CTA across Game Development,
Consulting, and Mentorship. Pick the bundle, customize with
add-ons, and launch fast.
</p>
</div>
<div className="mt-12 grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
{serviceBundles.map((bundle, index) => (
<Card
key={bundle.id}
id={bundle.id}
className="relative overflow-hidden border-border/50 hover:border-aethex-400/50 transition-all duration-500 hover:-translate-y-1"
style={{ animationDelay: `${index * 0.1}s` }}
>
<CardHeader className="space-y-4">
<div className="inline-flex items-center gap-2 rounded-full border border-aethex-400/30 bg-background/40 px-3 py-1 text-xs font-semibold uppercase tracking-wider text-aethex-200">
<Layers className="h-3 w-3" /> {bundle.typicalScope}
</div>
<CardTitle className="text-2xl">{bundle.name}</CardTitle>
<CardDescription>{bundle.description}</CardDescription>
<div className="text-left text-sm text-muted-foreground">
<span className="font-semibold text-aethex-300">
{bundle.startingAt}
</span>
<div>{bundle.timeline}</div>
</div>
</CardHeader>
<CardContent className="space-y-3">
{bundle.includes.map((item) => (
<div
key={item}
className="flex items-start gap-2 text-sm text-muted-foreground"
>
<CheckCircle2 className="mt-0.5 h-4 w-4 text-aethex-400" />
<span>{item}</span>
</div>
))}
<Button
asChild
variant="outline"
className="mt-4 w-full border-aethex-400/40 text-aethex-100 hover:border-aethex-400 hover:bg-aethex-500/10"
>
<Link
to={`/contact?subject=${encodeURIComponent(bundle.name + " Inquiry")}`}
>
Request {bundle.name} Proposal
</Link>
</Button>
</CardContent>
</Card>
))}
</div>
</div>
</section>
{/* Engagement Models */}
<section className="py-16 sm:py-20">
<div className="container mx-auto max-w-6xl px-4">
<div className="text-center">
<h2 className="text-3xl font-bold text-gradient mb-4 sm:text-4xl">
Engagement Models
</h2>
<p className="text-lg text-muted-foreground">
Mix and match fixed project work, retainers, or
performance-based commissions. Every option includes transparent
reporting.
</p>
</div>
<div className="mt-12 grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
{engagementModels.map((model) => (
<Card
key={model.name}
className="border-border/50 bg-card/40 hover:border-aethex-400/50 transition-all duration-500 hover:-translate-y-1"
>
<CardHeader className="space-y-3">
<CardTitle className="text-2xl">{model.name}</CardTitle>
<CardDescription>{model.summary}</CardDescription>
</CardHeader>
<CardContent className="space-y-4">
<div className="rounded-lg border border-border/50 bg-background/40 p-4 text-sm text-muted-foreground">
<div className="font-semibold text-aethex-300">
Best for
</div>
<div>{model.bestFor}</div>
</div>
<div className="text-sm font-semibold text-aethex-300">
{model.pricing}
</div>
<div className="space-y-2 text-sm text-muted-foreground">
{model.highlights.map((highlight) => (
<div key={highlight} className="flex items-start gap-2">
<CheckCircle2 className="h-4 w-4 text-aethex-400" />
<span>{highlight}</span>
</div>
))}
</div>
</CardContent>
</Card>
))}
</div>
</div>
</section>
{/* Commission Tiers */}
<section className="bg-background/30 py-16 sm:py-20">
<div className="container mx-auto max-w-5xl px-4">
<div className="text-center">
<h2 className="text-3xl font-bold text-gradient mb-4 sm:text-4xl">
Commission & Revenue Share Tiers
</h2>
<p className="text-lg text-muted-foreground">
When upside matters more than invoices, these tiers align our
success with yours. All tiers include weekly revenue snapshots
and experiment planning calls.
</p>
</div>
<div className="mt-12 grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-6">
{commissionTiers.map((tier) => (
<Card
key={tier.name}
className="border-border/50 bg-card/40 hover:border-aethex-400/50 transition-all duration-500"
>
<CardHeader className="space-y-2">
<CardTitle className="text-xl">{tier.name}</CardTitle>
<CardDescription className="text-sm font-semibold text-aethex-300">
{tier.split}
</CardDescription>
</CardHeader>
<CardContent className="space-y-3 text-sm text-muted-foreground">
<div className="flex items-center gap-2">
<BarChart3 className="h-4 w-4 text-aethex-400" />
<span>{tier.threshold}</span>
</div>
<p>{tier.notes}</p>
</CardContent>
</Card>
))}
</div>
</div>
</section>
{/* Add-ons */}
<section className="py-16 sm:py-20">
<div className="container mx-auto max-w-6xl px-4">
<div className="text-center">
<h2 className="text-3xl font-bold text-gradient mb-4 sm:text-4xl">
Popular Add-ons
</h2>
<p className="text-lg text-muted-foreground">
Bolt these on to any bundle or engagement model for extra lift.
Investments shown are typicalfinal quotes depend on scope.
</p>
</div>
<div className="mt-12 grid grid-cols-1 sm:grid-cols-2 gap-6 md:grid-cols-2">
{addOns.map((addon) => {
const Icon = addon.icon;
return (
<Card
key={addon.title}
className="border-border/50 bg-card/40 hover:border-aethex-400/50 transition-all duration-500"
>
<CardHeader className="flex flex-row items-start justify-between">
<div className="space-y-2">
<CardTitle>{addon.title}</CardTitle>
<CardDescription>{addon.description}</CardDescription>
</div>
<Icon className="h-8 w-8 text-aethex-400" />
</CardHeader>
<CardContent>
<div className="inline-flex items-center gap-2 rounded-full border border-aethex-400/40 bg-background/30 px-4 py-1 text-sm font-semibold text-aethex-200">
<DollarSign className="h-4 w-4" /> {addon.rate}
</div>
</CardContent>
</Card>
);
})}
</div>
</div>
</section>
{/* Process */}
<section className="bg-background/30 py-16 sm:py-20">
<div className="container mx-auto max-w-5xl px-4">
<div className="text-center">
<h2 className="text-3xl font-bold text-gradient mb-4 sm:text-4xl">
How Engagements Flow
</h2>
<p className="text-lg text-muted-foreground">
Every engagementregardless of investmentfollows a transparent
flow so you always know what happens next.
</p>
</div>
<div className="mt-12 grid grid-cols-1 sm:grid-cols-2 gap-6 md:grid-cols-2">
{process.map((stage) => (
<Card
key={stage.step}
className="border-border/50 bg-card/40 hover:border-aethex-400/50 transition-all duration-500"
>
<CardHeader className="space-y-2">
<div className="text-xs font-semibold uppercase tracking-[0.3em] text-muted-foreground">
Step {stage.step}
</div>
<CardTitle>{stage.title}</CardTitle>
</CardHeader>
<CardContent className="text-sm text-muted-foreground">
{stage.description}
</CardContent>
</Card>
))}
</div>
</div>
</section>
{/* FAQs + CTA */}
<section className="py-16 sm:py-20">
<div className="container mx-auto max-w-5xl px-4">
<div className="grid gap-12 md:grid-cols-[3fr,2fr]">
<div>
<h2 className="text-3xl font-bold text-gradient mb-6 sm:text-4xl">
Frequently Asked
</h2>
<div className="space-y-6">
{faqs.map((faq) => (
<div
key={faq.question}
className="rounded-xl border border-border/40 bg-card/40 p-6"
>
<h3 className="text-lg font-semibold text-foreground">
{faq.question}
</h3>
<p className="mt-2 text-sm text-muted-foreground">
{faq.answer}
</p>
</div>
))}
</div>
</div>
<Card className="border-aethex-400/50 bg-gradient-to-br from-aethex-950/80 via-aethex-900/60 to-neon-blue/10 backdrop-blur">
<CardHeader className="space-y-4 text-center">
<CardTitle className="text-2xl text-gradient">
Ready to start?
</CardTitle>
<CardDescription className="text-sm text-muted-foreground">
Share your goals and we'll craft a tailored engagement plan
within one business day.
</CardDescription>
</CardHeader>
<CardContent className="space-y-4">
<Button
asChild
size="lg"
className="w-full bg-gradient-to-r from-aethex-500 to-neon-blue hover:from-aethex-600 hover:to-neon-blue/90 text-base sm:text-lg py-4 sm:py-5"
>
<Link
to="/contact"
className="flex items-center justify-center gap-2"
>
<Briefcase className="h-5 w-5" />
Request Proposal
</Link>
</Button>
<Button
asChild
variant="outline"
className="w-full border-aethex-400/60 text-aethex-100 hover:bg-aethex-500/10 text-base sm:text-lg py-4 sm:py-5"
>
<a href="mailto:hello@aethex.biz?subject=AeThex Engagement Inquiry">
hello@aethex.biz
</a>
</Button>
<div className="rounded-lg border border-border/40 bg-background/40 p-4 text-left text-xs text-muted-foreground">
<p>
Need NDAs or procurement documents? Mention it in your
message and our operations team will respond with the
required paperwork.
</p>
</div>
</CardContent>
</Card>
</div>
</div>
</section>
</div>
</Layout>
);
}