SaaS Pricing
A premium three-tier pricing table with the recommended plan elevated in the brand accent color. Prices, descriptions, and buttons stay aligned across every column.
Starter
$0/mo
Try it out, no credit card required.
- 1 project
- Community support
- Basic analytics
Popular
Pro
$29/mo
For teams ready to scale.
- Unlimited projects
- Priority support
- Advanced analytics
- Custom domains
- Team roles
Enterprise
$99/mo
For organizations with advanced needs.
- Everything in Pro
- SSO & SAML
- Dedicated support
- Custom contracts
SaasPricing.jsx
import Link from 'next/link' import { Check, Sparkles } from 'lucide-react' // Add or edit your pricing plans here const PLANS = [ { name: 'Starter', price: '$0', period: '/mo', description: 'Try it out, no credit card required.', features: ['1 project', 'Community support', 'Basic analytics'], highlighted: false, }, { name: 'Pro', price: '$29', period: '/mo', description: 'For teams ready to scale.', features: ['Unlimited projects', 'Priority support', 'Advanced analytics', 'Custom domains', 'Team roles'], highlighted: true, }, { name: 'Enterprise', price: '$99', period: '/mo', description: 'For organizations with advanced needs.', features: ['Everything in Pro', 'SSO & SAML', 'Dedicated support', 'Custom contracts'], highlighted: false, }, ] export default function SaasPricing() { return ( <div className="@container w-full"> <div className="grid grid-cols-1 @2xl:grid-cols-3 gap-6 items-stretch"> {PLANS.map((plan) => ( <div key={plan.name} className={`relative h-full flex flex-col rounded-2xl p-8 transition-all duration-200 hover:-translate-y-0.5 ${ plan.highlighted ? 'pt-10 ring-1 ring-[#7e60d6]/40 bg-gradient-to-b from-[#7e60d6]/[0.06] to-transparent dark:from-[#7e60d6]/[0.12] shadow-[0_20px_60px_-20px_rgba(126,96,214,.45)]' : 'border border-[#E0E0E0] dark:border-[#4C4C4C] bg-white/80 dark:bg-[#1e1e1e]/80 backdrop-blur-md hover:shadow-[0_8px_30px_-12px_rgba(0,0,0,.12)]' }`}> {plan.highlighted && ( <span className="absolute -top-3 left-1/2 -translate-x-1/2 flex items-center gap-1 rounded-full bg-[#7e60d6] px-3 py-1 text-[11px] font-semibold text-white whitespace-nowrap"> <Sparkles size={11} strokeWidth={2.5} /> Popular </span> )} <h3 className="text-[15px] font-semibold text-[#121212] dark:text-[#f1f1f1]">{plan.name}</h3> <div className="mt-4 flex items-baseline gap-1"> <span className="text-[42px] font-bold tracking-tight text-[#121212] dark:text-[#f1f1f1]"> {plan.price} </span> <span className="text-[13px] text-[#4b4b4b] dark:text-[#b5b5b5]">{plan.period}</span> </div> <p className="mt-2 min-h-[40px] text-[13px] leading-relaxed text-[#4b4b4b] dark:text-[#b5b5b5]"> {plan.description} </p> <ul className="mt-8 flex-1 flex flex-col gap-3.5"> {plan.features.map((feature) => ( <li key={feature} className="flex items-start gap-2.5"> <Check size={15} className={`mt-[1px] shrink-0 ${plan.highlighted ? 'text-[#7e60d6]' : 'text-[#4b4b4b] dark:text-[#b5b5b5]'}`} strokeWidth={2} /> <span className="text-[13px] text-[#121212] dark:text-[#f1f1f1]">{feature}</span> </li> ))} </ul> <Link href="#" className={`mt-6 rounded-full py-2.5 text-center text-[13px] font-medium transition-colors cursor-pointer ${ plan.highlighted ? 'bg-[#7e60d6] text-white hover:bg-[#6d51c2]' : 'bg-[#E8E8E8] border-2 border-[#E0E0E0] text-[#121212] hover:bg-[#F1F1F1] dark:bg-[#2A2A2A] dark:border-[#4C4C4C] dark:text-[#f1f1f1] dark:hover:bg-[#1E1E1E]' }`}> Get started </Link> </div> ))} </div> </div> ) }