422 lines
20 KiB
TypeScript
422 lines
20 KiB
TypeScript
import {Footer, Navbar, ComparisonTable, FAQSection} from '../../components';
|
|
import {motion} from 'framer-motion';
|
|
import {DASHBOARD_URI, WIKI_URI} from '../../lib/constants';
|
|
import React from 'react';
|
|
import Link from 'next/link';
|
|
import {NextSeo} from 'next-seo';
|
|
import {ArrowRight, PackageOpen, DollarSign, Zap, Globe, Users, BarChart3} from 'lucide-react';
|
|
import type {ComparisonRow} from '../../components/ComparisonTable';
|
|
import type {FAQ} from '../../components/FAQSection';
|
|
|
|
const comparisonData: ComparisonRow[] = [
|
|
{feature: 'Pricing Model', plunk: 'Pay-as-you-go', competitor: 'Monthly subscription tiers'},
|
|
{feature: 'Setup Time', plunk: '5 minutes', competitor: 'Hours of configuration'},
|
|
{feature: 'Open Source', plunk: true, competitor: false},
|
|
{feature: 'Self-Hostable', plunk: true, competitor: false},
|
|
{feature: 'Transactional Emails', plunk: true, competitor: true},
|
|
{feature: 'Marketing Campaigns', plunk: 'Included', competitor: 'Separate product'},
|
|
{feature: 'Workflow Automation', plunk: true, competitor: 'Enterprise only'},
|
|
{feature: 'Dynamic Segmentation', plunk: true, competitor: 'Limited'},
|
|
{feature: 'API Simplicity', plunk: 'Modern REST', competitor: 'Complex legacy API'},
|
|
];
|
|
|
|
const faqs: FAQ[] = [
|
|
{
|
|
question: 'What is the difference between Plunk and SendGrid pricing?',
|
|
answer:
|
|
"Plunk uses a pay-as-you-go model where you only pay for emails sent, with no monthly minimums. SendGrid uses monthly subscription tiers with fixed costs regardless of actual usage. Plunk's approach means you're not locked into a monthly fee if your email volume varies.",
|
|
},
|
|
{
|
|
question: 'Why is SendGrid so complicated to set up?',
|
|
answer:
|
|
'SendGrid is built for large enterprises with complex needs. It requires configuring IP addresses, sender authentication, subuser accounts, and understanding their legacy API structure. Plunk is built for developers who want to start sending emails in minutes with a simple, modern API.',
|
|
},
|
|
{
|
|
question: 'Does Plunk have the same deliverability as SendGrid?',
|
|
answer:
|
|
'Yes. Plunk is built on top of AWS SES, which has excellent deliverability comparable to SendGrid. Both platforms support custom domains, DKIM authentication, and dedicated IPs (for high-volume senders). The key difference is Plunk makes these features accessible without the complexity.',
|
|
},
|
|
{
|
|
question: 'Can I migrate from SendGrid to Plunk?',
|
|
answer:
|
|
'Yes, migration is straightforward. Export your contacts from SendGrid, import them to Plunk via CSV, and update your application to use Plunk\'s easy API. Most migrations take less than a day.',
|
|
},
|
|
{
|
|
question: 'What SendGrid features does Plunk not have?',
|
|
answer:
|
|
'Plunk focuses on modern email workflows rather than enterprise-specific features. For 95% of use cases, Plunk provides everything you need.',
|
|
},
|
|
];
|
|
|
|
/**
|
|
* Plunk vs SendGrid comparison page
|
|
*/
|
|
export default function SendGridComparison() {
|
|
return (
|
|
<>
|
|
<NextSeo
|
|
title="SendGrid Alternative: Pay-As-You-Go & Open Source | Plunk"
|
|
description="Plunk offers pay-as-you-go pricing instead of monthly subscriptions, with a modern API and no complex setup. Open source alternative to SendGrid."
|
|
canonical="https://www.useplunk.com/vs/sendgrid"
|
|
openGraph={{
|
|
title: 'SendGrid Alternative: Pay-As-You-Go & Open Source | Plunk',
|
|
description:
|
|
"Plunk offers pay-as-you-go pricing instead of monthly subscriptions, with a modern API and no complex setup.",
|
|
url: 'https://www.useplunk.com/vs/sendgrid',
|
|
images: [{url: 'https://www.useplunk.com/assets/card.png', alt: 'Plunk vs SendGrid'}],
|
|
}}
|
|
/>
|
|
|
|
<Navbar />
|
|
|
|
<main className={'mx-auto max-w-7xl px-8 sm:px-0'}>
|
|
{/* Hero Section */}
|
|
<section className={'relative py-32 sm:py-48'}>
|
|
<div
|
|
className={
|
|
'absolute inset-0 -z-10 h-full w-full bg-white bg-[linear-gradient(to_right,#e5e7eb_1px,transparent_1px),linear-gradient(to_bottom,#e5e7eb_1px,transparent_1px)] bg-[size:4rem_4rem] [mask-image:radial-gradient(ellipse_80%_50%_at_50%_0%,#000_70%,transparent_110%)]'
|
|
}
|
|
/>
|
|
|
|
<motion.div
|
|
initial={{opacity: 0, y: 20}}
|
|
animate={{opacity: 1, y: 0}}
|
|
transition={{duration: 0.7, ease: [0.22, 1, 0.36, 1]}}
|
|
className={'mx-auto max-w-4xl text-center'}
|
|
>
|
|
<div className={'mb-6 inline-flex items-center gap-2 rounded-full border border-neutral-200 bg-white px-4 py-2'}>
|
|
<span className={'text-sm text-neutral-600'}>Comparing</span>
|
|
<span className={'text-sm font-semibold text-neutral-900'}>Plunk vs SendGrid</span>
|
|
</div>
|
|
|
|
<h1 className={'text-6xl font-bold tracking-tight text-neutral-900 sm:text-7xl lg:text-8xl'}>
|
|
Open-source alternative
|
|
<br />
|
|
for SendGrid
|
|
</h1>
|
|
|
|
<p className={'mx-auto mt-8 max-w-2xl text-xl text-neutral-600'}>
|
|
Pay-as-you-go instead of fixed subscriptions. No complex setup, no feature gating, no enterprise sales pitches.
|
|
Built for developers, not procurement teams.
|
|
</p>
|
|
|
|
<div className={'mt-12 flex flex-wrap justify-center gap-4'}>
|
|
<motion.a
|
|
whileHover={{scale: 1.02}}
|
|
whileTap={{scale: 0.98}}
|
|
href={`${DASHBOARD_URI}/auth/signup`}
|
|
className={
|
|
'group rounded-lg bg-neutral-900 px-8 py-4 text-base font-semibold text-white shadow-lg shadow-neutral-900/10 transition hover:bg-neutral-800'
|
|
}
|
|
>
|
|
<span className={'flex items-center gap-2'}>
|
|
Get started free
|
|
<ArrowRight className="h-4 w-4 transition-transform group-hover:translate-x-1" />
|
|
</span>
|
|
</motion.a>
|
|
<Link
|
|
href={WIKI_URI}
|
|
target={'_blank'}
|
|
className={
|
|
'rounded-lg border border-neutral-300 bg-white px-8 py-4 text-base font-semibold text-neutral-900 transition hover:border-neutral-400'
|
|
}
|
|
>
|
|
View documentation
|
|
</Link>
|
|
</div>
|
|
</motion.div>
|
|
</section>
|
|
|
|
{/* Pricing Model Comparison */}
|
|
<section className={'py-32'}>
|
|
<motion.div
|
|
initial={{opacity: 0, y: 20}}
|
|
whileInView={{opacity: 1, y: 0}}
|
|
viewport={{once: true}}
|
|
transition={{duration: 0.7, ease: [0.22, 1, 0.36, 1]}}
|
|
className={'mb-16 text-center'}
|
|
>
|
|
<h2 className={'text-5xl font-bold tracking-tight text-neutral-900'}>The Pricing Model That Makes Sense</h2>
|
|
<p className={'mt-4 text-lg text-neutral-600'}>Pay for what you use, not for what you might use</p>
|
|
</motion.div>
|
|
|
|
<div className={'grid gap-8 lg:grid-cols-2'}>
|
|
<motion.div
|
|
initial={{opacity: 0, x: -20}}
|
|
whileInView={{opacity: 1, x: 0}}
|
|
viewport={{once: true}}
|
|
transition={{duration: 0.7, ease: [0.22, 1, 0.36, 1]}}
|
|
className={'rounded-2xl border-2 border-neutral-900 bg-white p-10'}
|
|
>
|
|
<div className={'mb-4 inline-flex items-center gap-2 rounded-full bg-neutral-900 px-4 py-1.5'}>
|
|
<span className={'text-sm font-semibold text-white'}>Plunk</span>
|
|
</div>
|
|
<h3 className={'mt-6 text-2xl font-bold text-neutral-900'}>Pay per email sent</h3>
|
|
<p className={'mt-3 leading-relaxed text-neutral-600'}>
|
|
Pay-as-you-go pricing. Only pay for emails you actually send, no monthly minimums.
|
|
</p>
|
|
<div className={'mt-6 text-4xl font-bold text-neutral-900'}>Pay-as-you-go</div>
|
|
<div className={'mt-8 space-y-3'}>
|
|
<div className={'flex items-center gap-3 text-sm text-neutral-600'}>
|
|
<div className={'h-5 w-5 rounded-full bg-neutral-900 flex items-center justify-center'}>
|
|
<div className={'h-1.5 w-1.5 rounded-full bg-white'} />
|
|
</div>
|
|
<span>No monthly minimum or commitment</span>
|
|
</div>
|
|
<div className={'flex items-center gap-3 text-sm text-neutral-600'}>
|
|
<div className={'h-5 w-5 rounded-full bg-neutral-900 flex items-center justify-center'}>
|
|
<div className={'h-1.5 w-1.5 rounded-full bg-white'} />
|
|
</div>
|
|
<span>Marketing campaigns included</span>
|
|
</div>
|
|
<div className={'flex items-center gap-3 text-sm text-neutral-600'}>
|
|
<div className={'h-5 w-5 rounded-full bg-neutral-900 flex items-center justify-center'}>
|
|
<div className={'h-1.5 w-1.5 rounded-full bg-white'} />
|
|
</div>
|
|
<span>Workflow automation included</span>
|
|
</div>
|
|
</div>
|
|
</motion.div>
|
|
|
|
<motion.div
|
|
initial={{opacity: 0, x: 20}}
|
|
whileInView={{opacity: 1, x: 0}}
|
|
viewport={{once: true}}
|
|
transition={{duration: 0.7, ease: [0.22, 1, 0.36, 1]}}
|
|
className={'rounded-2xl border border-neutral-200 bg-neutral-50 p-10'}
|
|
>
|
|
<div className={'mb-4 inline-flex items-center gap-2 rounded-full bg-neutral-200 px-4 py-1.5'}>
|
|
<span className={'text-sm font-semibold text-neutral-900'}>SendGrid</span>
|
|
</div>
|
|
<h3 className={'mt-6 text-2xl font-bold text-neutral-900'}>Monthly subscription tiers</h3>
|
|
<p className={'mt-3 leading-relaxed text-neutral-600'}>
|
|
Fixed monthly fees based on email volume tiers with feature restrictions.
|
|
</p>
|
|
<div className={'mt-6 text-4xl font-bold text-neutral-900'}>Fixed subscription</div>
|
|
<div className={'mt-8 space-y-3'}>
|
|
<div className={'flex items-center gap-3 text-sm text-neutral-600'}>
|
|
<div className={'h-5 w-5 rounded-full bg-neutral-300 flex items-center justify-center'}>
|
|
<div className={'h-1.5 w-1.5 rounded-full bg-neutral-600'} />
|
|
</div>
|
|
<span>Locked into monthly subscription plan</span>
|
|
</div>
|
|
<div className={'flex items-center gap-3 text-sm text-neutral-600'}>
|
|
<div className={'h-5 w-5 rounded-full bg-neutral-300 flex items-center justify-center'}>
|
|
<div className={'h-1.5 w-1.5 rounded-full bg-neutral-600'} />
|
|
</div>
|
|
<span>Marketing is a separate paid product</span>
|
|
</div>
|
|
<div className={'flex items-center gap-3 text-sm text-neutral-600'}>
|
|
<div className={'h-5 w-5 rounded-full bg-neutral-300 flex items-center justify-center'}>
|
|
<div className={'h-1.5 w-1.5 rounded-full bg-neutral-600'} />
|
|
</div>
|
|
<span>Automation locked to enterprise tier</span>
|
|
</div>
|
|
</div>
|
|
</motion.div>
|
|
</div>
|
|
</section>
|
|
|
|
{/* Key Advantages */}
|
|
<section className={'py-32'}>
|
|
<motion.div
|
|
initial={{opacity: 0, y: 20}}
|
|
whileInView={{opacity: 1, y: 0}}
|
|
viewport={{once: true}}
|
|
transition={{duration: 0.7, ease: [0.22, 1, 0.36, 1]}}
|
|
className={'mb-20 text-center'}
|
|
>
|
|
<h2 className={'text-5xl font-bold tracking-tight text-neutral-900'}>Why Choose Plunk Over SendGrid</h2>
|
|
<p className={'mt-4 text-lg text-neutral-600'}>Built for modern developers, not enterprise sales teams</p>
|
|
</motion.div>
|
|
|
|
<div className={'grid gap-px bg-neutral-200 sm:grid-cols-2 lg:grid-cols-3'}>
|
|
<motion.div
|
|
initial={{opacity: 0, y: 20}}
|
|
whileInView={{opacity: 1, y: 0}}
|
|
viewport={{once: true}}
|
|
transition={{duration: 0.5, delay: 0.1, ease: [0.22, 1, 0.36, 1]}}
|
|
className={'group bg-white p-12 transition hover:bg-neutral-50'}
|
|
>
|
|
<div
|
|
className={
|
|
'flex h-12 w-12 items-center justify-center rounded-xl bg-neutral-900 text-white transition group-hover:scale-110'
|
|
}
|
|
>
|
|
<DollarSign className="h-5 w-5" />
|
|
</div>
|
|
<h3 className={'mt-6 text-xl font-semibold text-neutral-900'}>Simple, Transparent Pricing</h3>
|
|
<p className={'mt-3 leading-relaxed text-neutral-600'}>
|
|
Pay-as-you-go per email. No hidden fees, no complex tiers, no enterprise sales calls. Start free, scale as
|
|
you grow.
|
|
</p>
|
|
</motion.div>
|
|
|
|
<motion.div
|
|
initial={{opacity: 0, y: 20}}
|
|
whileInView={{opacity: 1, y: 0}}
|
|
viewport={{once: true}}
|
|
transition={{duration: 0.5, delay: 0.2, ease: [0.22, 1, 0.36, 1]}}
|
|
className={'group bg-white p-12 transition hover:bg-neutral-50'}
|
|
>
|
|
<div
|
|
className={
|
|
'flex h-12 w-12 items-center justify-center rounded-xl bg-neutral-900 text-white transition group-hover:scale-110'
|
|
}
|
|
>
|
|
<Zap className="h-5 w-5" />
|
|
</div>
|
|
<h3 className={'mt-6 text-xl font-semibold text-neutral-900'}>5-Minute Setup</h3>
|
|
<p className={'mt-3 leading-relaxed text-neutral-600'}>
|
|
Start sending emails in minutes, not hours. Modern API, clear documentation, no complex configuration.
|
|
Copy-paste and go.
|
|
</p>
|
|
</motion.div>
|
|
|
|
<motion.div
|
|
initial={{opacity: 0, y: 20}}
|
|
whileInView={{opacity: 1, y: 0}}
|
|
viewport={{once: true}}
|
|
transition={{duration: 0.5, delay: 0.3, ease: [0.22, 1, 0.36, 1]}}
|
|
className={'group bg-white p-12 transition hover:bg-neutral-50'}
|
|
>
|
|
<div
|
|
className={
|
|
'flex h-12 w-12 items-center justify-center rounded-xl bg-neutral-900 text-white transition group-hover:scale-110'
|
|
}
|
|
>
|
|
<BarChart3 className="h-5 w-5" />
|
|
</div>
|
|
<h3 className={'mt-6 text-xl font-semibold text-neutral-900'}>Marketing Included</h3>
|
|
<p className={'mt-3 leading-relaxed text-neutral-600'}>
|
|
Campaigns, workflows, and segmentation at no extra cost. SendGrid requires their separate Marketing
|
|
Campaigns product with additional fees.
|
|
</p>
|
|
</motion.div>
|
|
|
|
<motion.div
|
|
initial={{opacity: 0, y: 20}}
|
|
whileInView={{opacity: 1, y: 0}}
|
|
viewport={{once: true}}
|
|
transition={{duration: 0.5, delay: 0.4, ease: [0.22, 1, 0.36, 1]}}
|
|
className={'group bg-white p-12 transition hover:bg-neutral-50'}
|
|
>
|
|
<div
|
|
className={
|
|
'flex h-12 w-12 items-center justify-center rounded-xl bg-neutral-900 text-white transition group-hover:scale-110'
|
|
}
|
|
>
|
|
<PackageOpen className="h-5 w-5" />
|
|
</div>
|
|
<h3 className={'mt-6 text-xl font-semibold text-neutral-900'}>Open Source & Transparent</h3>
|
|
<p className={'mt-3 leading-relaxed text-neutral-600'}>
|
|
AGPL-3.0 licensed. Inspect the code, contribute features, self-host if needed. No black boxes, no vendor
|
|
lock-in.
|
|
</p>
|
|
</motion.div>
|
|
|
|
<motion.div
|
|
initial={{opacity: 0, y: 20}}
|
|
whileInView={{opacity: 1, y: 0}}
|
|
viewport={{once: true}}
|
|
transition={{duration: 0.5, delay: 0.5, ease: [0.22, 1, 0.36, 1]}}
|
|
className={'group bg-white p-12 transition hover:bg-neutral-50'}
|
|
>
|
|
<div
|
|
className={
|
|
'flex h-12 w-12 items-center justify-center rounded-xl bg-neutral-900 text-white transition group-hover:scale-110'
|
|
}
|
|
>
|
|
<Globe className="h-5 w-5" />
|
|
</div>
|
|
<h3 className={'mt-6 text-xl font-semibold text-neutral-900'}>Self-Hostable</h3>
|
|
<p className={'mt-3 leading-relaxed text-neutral-600'}>
|
|
Run on your infrastructure with Docker. Full data control, compliance-ready, cost-optimized. SendGrid is
|
|
cloud-only.
|
|
</p>
|
|
</motion.div>
|
|
|
|
<motion.div
|
|
initial={{opacity: 0, y: 20}}
|
|
whileInView={{opacity: 1, y: 0}}
|
|
viewport={{once: true}}
|
|
transition={{duration: 0.5, delay: 0.6, ease: [0.22, 1, 0.36, 1]}}
|
|
className={'group bg-white p-12 transition hover:bg-neutral-50'}
|
|
>
|
|
<div
|
|
className={
|
|
'flex h-12 w-12 items-center justify-center rounded-xl bg-neutral-900 text-white transition group-hover:scale-110'
|
|
}
|
|
>
|
|
<Users className="h-5 w-5" />
|
|
</div>
|
|
<h3 className={'mt-6 text-xl font-semibold text-neutral-900'}>No Feature Gating</h3>
|
|
<p className={'mt-3 leading-relaxed text-neutral-600'}>
|
|
All features available on all plans. No artificial limits, no forced upgrades to "enterprise" for basic
|
|
automation.
|
|
</p>
|
|
</motion.div>
|
|
</div>
|
|
</section>
|
|
|
|
{/* Feature Comparison */}
|
|
<section className={'py-32'}>
|
|
<motion.div
|
|
initial={{opacity: 0, y: 20}}
|
|
whileInView={{opacity: 1, y: 0}}
|
|
viewport={{once: true}}
|
|
transition={{duration: 0.7, ease: [0.22, 1, 0.36, 1]}}
|
|
className={'mb-16 text-center'}
|
|
>
|
|
<h2 className={'text-5xl font-bold tracking-tight text-neutral-900'}>Feature-by-Feature Comparison</h2>
|
|
<p className={'mt-4 text-lg text-neutral-600'}>See exactly what you get with each platform</p>
|
|
</motion.div>
|
|
|
|
<ComparisonTable competitorName="SendGrid" rows={comparisonData} />
|
|
</section>
|
|
|
|
{/* FAQ */}
|
|
<FAQSection faqs={faqs} schemaId="faq-schema-sendgrid" />
|
|
|
|
{/* CTA */}
|
|
<section className={'border-t border-neutral-200 py-32'}>
|
|
<motion.div
|
|
initial={{opacity: 0, y: 20}}
|
|
whileInView={{opacity: 1, y: 0}}
|
|
viewport={{once: true}}
|
|
transition={{duration: 0.7, ease: [0.22, 1, 0.36, 1]}}
|
|
className={'mx-auto max-w-3xl text-center'}
|
|
>
|
|
<h2 className={'text-5xl font-bold tracking-tight text-neutral-900'}>Make the switch today</h2>
|
|
<p className={'mt-6 text-lg text-neutral-600'}>
|
|
Join hundreds of developers who've ditched SendGrid's complexity for Plunk's simplicity.
|
|
</p>
|
|
<div className={'mt-12 flex flex-wrap justify-center gap-4'}>
|
|
<motion.a
|
|
whileHover={{scale: 1.02}}
|
|
whileTap={{scale: 0.98}}
|
|
href={`${DASHBOARD_URI}/auth/signup`}
|
|
className={
|
|
'rounded-lg bg-neutral-900 px-8 py-4 text-base font-semibold text-white transition hover:bg-neutral-800'
|
|
}
|
|
>
|
|
Start free trial
|
|
</motion.a>
|
|
<Link
|
|
href="/pricing"
|
|
className={
|
|
'rounded-lg border border-neutral-300 px-8 py-4 text-base font-semibold text-neutral-900 transition hover:border-neutral-400'
|
|
}
|
|
>
|
|
View pricing details
|
|
</Link>
|
|
</div>
|
|
</motion.div>
|
|
</section>
|
|
</main>
|
|
|
|
<Footer />
|
|
</>
|
|
);
|
|
}
|