/** * Pricing Page Component (S-9.4) * * Displays 4-tier pricing with annual/monthly toggle, * feature comparison table, and FAQ accordion. */ import React, { useState } from 'react'; // ─── Tier Data ─────────────────────────────────────────────── interface Tier { name: string; monthlyPrice: number | null; // null = custom annualMonthlyPrice: number | null; events: string; apiKeys: string; storage: string; retention: string; members: string; support: string; overageRate: string; cta: string; ctaVariant: 'default' | 'primary' | 'outline'; highlighted?: boolean; features: string[]; } const TIERS: Tier[] = [ { name: 'Free', monthlyPrice: 0, annualMonthlyPrice: 0, events: '10,000', apiKeys: '2', storage: '1 GB', retention: '7 days', members: '1', support: 'Community', overageRate: 'Blocked', cta: 'Get Started', ctaVariant: 'outline', features: ['Session replay', 'LLM cost tracking', 'Guardrails', 'Benchmarks'], }, { name: 'Pro', monthlyPrice: 29, annualMonthlyPrice: 23, events: '1,000,000', apiKeys: '10', storage: '100 GB', retention: '30 days', members: '5', support: 'Email', overageRate: '$0.10/1K', cta: 'Start Free Trial', ctaVariant: 'primary', highlighted: true, features: [ 'Session replay', 'LLM cost tracking', 'Guardrails', 'Benchmarks', 'Alerting', ], }, { name: 'Team', monthlyPrice: 99, annualMonthlyPrice: 79, events: '10,000,000', apiKeys: '50', storage: '1 TB', retention: '90 days', members: 'Unlimited', support: 'Priority', overageRate: '$0.08/1K', cta: 'Start Free Trial', ctaVariant: 'primary', features: [ 'Session replay', 'LLM cost tracking', 'Guardrails', 'Benchmarks', 'Alerting', 'RBAC', 'Audit log', ], }, { name: 'Enterprise', monthlyPrice: null, annualMonthlyPrice: null, events: '100,000,000+', apiKeys: '200+', storage: '10 TB+', retention: 'Custom', members: 'Unlimited', support: 'Dedicated + SLA', overageRate: 'Custom', cta: 'Contact Sales', ctaVariant: 'outline', features: [ 'Session replay', 'LLM cost tracking', 'Guardrails', 'Benchmarks', 'Alerting', 'RBAC', 'Audit log', 'SSO / SAML', 'SLA', ], }, ]; // ─── FAQ Data ──────────────────────────────────────────────── const FAQ_ITEMS = [ { q: 'What counts as an event?', a: 'Any data point sent to AgentLens: LLM calls, tool invocations, agent actions, errors, guardrail checks, benchmarks, or custom events.', }, { q: 'What happens when I hit my event limit?', a: 'Free plans pause ingestion until the next cycle. Pro & Team plans incur overage charges automatically — you\'re never cut off.', }, { q: 'Can I upgrade or downgrade at any time?', a: 'Yes. Upgrades are immediate with prorated billing. Downgrades take effect at the end of your billing period.', }, { q: 'Is there a free trial?', a: 'Yes — Pro and Team plans include a 14-day free trial with full features. No credit card required.', }, { q: 'How does annual billing work?', a: 'Annual plans save 20%. Pro: $276/year ($23/mo). Team: $948/year ($79/mo). Billed once per year.', }, { q: 'Can I self-host instead?', a: 'Absolutely. AgentLens is open-source. The cloud offering adds managed infrastructure, team features, and billing.', }, ]; // ─── Comparison Table Rows ─────────────────────────────────── const COMPARISON_ROWS: Array<{ label: string; values: [string, string, string, string] }> = [ { label: 'Monthly events', values: ['10K', '1M', '10M', '100M+'] }, { label: 'API keys', values: ['2', '10', '50', '200+'] }, { label: 'Storage', values: ['1 GB', '100 GB', '1 TB', '10 TB+'] }, { label: 'Data retention', values: ['7 days', '30 days', '90 days', 'Custom'] }, { label: 'Team members', values: ['1', '5', 'Unlimited', 'Unlimited'] }, { label: 'Session replay', values: ['✅', '✅', '✅', '✅'] }, { label: 'LLM cost tracking', values: ['✅', '✅', '✅', '✅'] }, { label: 'Guardrails', values: ['✅', '✅', '✅', '✅'] }, { label: 'Benchmarks', values: ['✅', '✅', '✅', '✅'] }, { label: 'Alerting', values: ['—', '✅', '✅', '✅'] }, { label: 'RBAC', values: ['—', '—', '✅', '✅'] }, { label: 'Audit log', values: ['—', '—', '✅', '✅'] }, { label: 'SSO / SAML', values: ['—', '—', '—', '✅'] }, { label: 'SLA', values: ['—', '—', '—', '✅'] }, { label: 'Overage rate', values: ['Blocked', '$0.10/1K', '$0.08/1K', 'Custom'] }, ]; // ─── Component ─────────────────────────────────────────────── export const PricingPage: React.FC = () => { const [annual, setAnnual] = useState(false); const [openFaq, setOpenFaq] = useState(null); return (

Simple, transparent pricing

Start free. Scale as you grow. All plans include the full AgentLens feature set.

{/* Annual/Monthly Toggle */}
Monthly Annual Save 20%
{/* Tier Cards */}
{TIERS.map((tier) => (
{tier.highlighted && (
Most Popular
)}

{tier.name}

{tier.monthlyPrice === null ? 'Custom' : tier.monthlyPrice === 0 ? '$0' : `$${annual ? tier.annualMonthlyPrice : tier.monthlyPrice}`} {tier.monthlyPrice !== null && tier.monthlyPrice > 0 && ( /mo )}
{annual && tier.monthlyPrice !== null && tier.monthlyPrice > 0 && (
billed annually
)}
{tier.events} events/mo
    {tier.features.map((f) => (
  • ✓ {f}
  • ))}
))}
{/* Feature Comparison Table */}

Feature Comparison

{TIERS.map((t) => ( ))} {COMPARISON_ROWS.map((row, i) => ( {row.values.map((v, j) => ( ))} ))}
{t.name}
{row.label}{v}
{/* FAQ */}

Frequently Asked Questions

{FAQ_ITEMS.map((item, i) => (
{openFaq === i && (

{item.a}

)}
))}
); }; export default PricingPage;