Add PricingTeaser section — 4 tier mini-cards linking to /pricing
This commit is contained in:
78
src/components/sections/PricingTeaser.astro
Normal file
78
src/components/sections/PricingTeaser.astro
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
---
|
||||||
|
import { getAuthConfig } from '../../config/auth';
|
||||||
|
|
||||||
|
interface Tier {
|
||||||
|
name: string;
|
||||||
|
price: string;
|
||||||
|
sub: string;
|
||||||
|
href: string;
|
||||||
|
cta: string;
|
||||||
|
highlight?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auth = getAuthConfig();
|
||||||
|
|
||||||
|
const tiers: Tier[] = [
|
||||||
|
{
|
||||||
|
name: 'Trial',
|
||||||
|
price: 'Free',
|
||||||
|
sub: '14 days · 1 environment · 2 apps',
|
||||||
|
href: auth.signUpUrl,
|
||||||
|
cta: 'Start free trial',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'MID',
|
||||||
|
price: '20 € /mo',
|
||||||
|
sub: '2 environments · 10 apps · 7-day retention',
|
||||||
|
href: auth.signUpUrl,
|
||||||
|
cta: 'Start on MID',
|
||||||
|
highlight: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'HIGH',
|
||||||
|
price: 'Contact',
|
||||||
|
sub: 'Unlimited envs · 50 apps · 90-day retention · Debugger, Replay',
|
||||||
|
href: auth.salesMailto,
|
||||||
|
cta: 'Talk to sales',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'BUSINESS',
|
||||||
|
price: 'Contact',
|
||||||
|
sub: 'Unlimited everything · 365-day retention · all features',
|
||||||
|
href: auth.salesMailto,
|
||||||
|
cta: 'Talk to sales',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
---
|
||||||
|
<section class="border-b border-border">
|
||||||
|
<div class="max-w-content mx-auto px-6 py-20 md:py-24">
|
||||||
|
<div class="max-w-2xl mb-12">
|
||||||
|
<p class="text-accent font-mono text-xs tracking-[0.25em] uppercase mb-4">Pricing</p>
|
||||||
|
<h2 class="text-hero font-bold text-text mb-4">Start free. Grow when you need to.</h2>
|
||||||
|
<p class="text-text-muted text-lg">
|
||||||
|
No credit card for the trial.
|
||||||
|
<a href="/pricing" class="text-accent hover:underline">See full comparison →</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="grid md:grid-cols-2 lg:grid-cols-4 gap-5">
|
||||||
|
{tiers.map((tier) => (
|
||||||
|
<div class={`rounded-lg border bg-bg-elevated p-6 flex flex-col ${tier.highlight ? 'border-accent' : 'border-border'}`}>
|
||||||
|
<div class="mb-4">
|
||||||
|
<div class="font-mono text-xs tracking-wider text-text-muted mb-2">{tier.name.toUpperCase()}</div>
|
||||||
|
<div class="text-2xl font-bold text-text">{tier.price}</div>
|
||||||
|
</div>
|
||||||
|
<p class="text-text-muted text-sm leading-relaxed flex-grow mb-5">{tier.sub}</p>
|
||||||
|
<a
|
||||||
|
href={tier.href}
|
||||||
|
class={`inline-flex items-center justify-center rounded px-4 py-2 text-sm font-semibold transition-colors
|
||||||
|
${tier.highlight
|
||||||
|
? 'bg-accent text-bg hover:bg-accent-muted'
|
||||||
|
: 'border border-border-strong text-text hover:border-accent hover:text-accent'}`}
|
||||||
|
>
|
||||||
|
{tier.cta}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
Reference in New Issue
Block a user