Section
Pricing Table — Neo-Brutalism
Brutalist three-tier SaaS pricing table with hard black borders, offset drop shadows, flat bright accents, check/dash feature lists, a highlighted popular tier, and a working monthly/annual billing toggle that swaps the displayed prices live. Press-down hover states and monospace labels give it a raw, editorial character.
- Section
- Tailwind
- HTML
- MIT
Preview
Live section
9:41 100%
devsnips.dev/library/tailwind/sections/saas/pricing-table/neo-brutalism/ fluid · no fixed width 100%
Install
Add to your project
npx devsnips add Tailwind/Sections/SaaS/pricing-table/neo-brutalism Tailwind/Sections/SaaS/pricing-table/neo-brutalism <!--
Snippet Name: Pricing Table — Neo-Brutalism
Description: Three-tier SaaS pricing table with a working monthly/annual billing toggle, check/dash feature lists, a highlighted popular tier, and brutalist press-down CTAs.
Author: DevSnips Contributors
Usage Example: Drop into any pricing or marketing page. Toggle the billing switch to swap displayed prices live.
-->
<section class="relative w-full" data-pricing="nb">
<!-- Billing toggle -->
<div class="mb-8 flex flex-col items-center gap-3">
<div class="flex items-center gap-2 border-2 border-black bg-white p-1.5 shadow-[4px_4px_0_0_#000]">
<button type="button" data-billing="monthly" aria-pressed="true"
class="billing-btn border-2 border-transparent px-4 py-2 font-mono text-[12px] font-bold uppercase tracking-wider transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-black focus-visible:ring-offset-2">
Monthly
</button>
<button type="button" data-billing="annual" aria-pressed="false"
class="billing-btn border-2 border-transparent px-4 py-2 font-mono text-[12px] font-bold uppercase tracking-wider transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-black focus-visible:ring-offset-2">
Annual
<span class="ml-1 border border-black bg-[#00E676] px-1 py-0.5 text-[10px] text-black">-20%</span>
</button>
</div>
<p class="font-mono text-[11px] font-bold uppercase tracking-wider text-black/50">
// save two months with annual billing
</p>
</div>
<!-- Tiers grid -->
<div class="grid grid-cols-1 gap-6 md:grid-cols-3">
<!-- Starter -->
<article class="relative flex flex-col border-2 border-black bg-white p-6 shadow-[8px_8px_0_0_#000] transition-transform duration-100 hover:translate-x-[2px] hover:translate-y-[2px] hover:shadow-[5px_5px_0_0_#000]">
<header>
<p class="font-mono text-[11px] font-bold uppercase tracking-wider text-black/60">Starter</p>
<h2 class="mt-2 font-archivo text-2xl font-extrabold uppercase leading-none tracking-tight">Solo dev</h2>
<p class="mt-2 font-archivo text-[14px] font-medium text-black/70">Ship side-projects with the core toolkit.</p>
</header>
<div class="mt-5 flex items-end gap-1 border-b-2 border-black pb-5">
<span class="font-archivo text-5xl font-extrabold leading-none tracking-tighter" data-price="starter">$0</span>
<span class="mb-1 font-mono text-[11px] font-bold uppercase tracking-wider text-black/50" data-period="starter">/mo</span>
</div>
<ul class="mt-5 flex-1 space-y-3" role="list">
<li class="flex items-start gap-2.5">
<span class="mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center border-2 border-black bg-[#00E676]">
<svg class="h-3 w-3" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="4" aria-hidden="true"><path d="M5 12l5 5L20 6" /></svg>
</span>
<span class="font-archivo text-[14px] font-medium text-black">1 project</span>
</li>
<li class="flex items-start gap-2.5">
<span class="mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center border-2 border-black bg-[#00E676]">
<svg class="h-3 w-3" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="4" aria-hidden="true"><path d="M5 12l5 5L20 6" /></svg>
</span>
<span class="font-archivo text-[14px] font-medium text-black">Community snippets</span>
</li>
<li class="flex items-start gap-2.5">
<span class="mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center border-2 border-black bg-[#FFFDF5]">
<span class="h-0.5 w-2.5 bg-black"></span>
</span>
<span class="font-archivo text-[14px] font-medium text-black/50">AI pair programmer</span>
</li>
<li class="flex items-start gap-2.5">
<span class="mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center border-2 border-black bg-[#FFFDF5]">
<span class="h-0.5 w-2.5 bg-black"></span>
</span>
<span class="font-archivo text-[14px] font-medium text-black/50">Team workspace</span>
</li>
</ul>
<a href="#" class="mt-6 block border-2 border-black bg-white px-4 py-3 text-center font-archivo text-sm font-extrabold uppercase tracking-tight shadow-[4px_4px_0_0_#000] transition-transform duration-100 hover:translate-x-[2px] hover:translate-y-[2px] hover:shadow-[1px_1px_0_0_#000] focus:outline-none focus-visible:ring-2 focus-visible:ring-black focus-visible:ring-offset-2">
Start free
</a>
</article>
<!-- Pro (popular) -->
<article class="relative -mt-2 flex flex-col border-2 border-black bg-[#FFFDF5] p-6 shadow-[10px_10px_0_0_#000] md:-mx-2 md:scale-[1.03]" aria-describedby="pro-badge">
<span id="pro-badge" class="absolute -top-3 left-4 border-2 border-black bg-[#FF4FA3] px-2.5 py-1 font-mono text-[11px] font-bold uppercase tracking-wider text-white shadow-[3px_3px_0_0_#000]">Most popular</span>
<header>
<p class="font-mono text-[11px] font-bold uppercase tracking-wider text-black/60">Pro</p>
<h2 class="mt-2 font-archivo text-2xl font-extrabold uppercase leading-none tracking-tight">Indie maker</h2>
<p class="mt-2 font-archivo text-[14px] font-medium text-black/70">Everything you need to launch & iterate fast.</p>
</header>
<div class="mt-5 flex items-end gap-1 border-b-2 border-black pb-5">
<span class="font-archivo text-5xl font-extrabold leading-none tracking-tighter" data-price="pro">$19</span>
<span class="mb-1 font-mono text-[11px] font-bold uppercase tracking-wider text-black/50" data-period="pro">/mo</span>
</div>
<ul class="mt-5 flex-1 space-y-3" role="list">
<li class="flex items-start gap-2.5">
<span class="mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center border-2 border-black bg-[#00E676]">
<svg class="h-3 w-3" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="4" aria-hidden="true"><path d="M5 12l5 5L20 6" /></svg>
</span>
<span class="font-archivo text-[14px] font-medium text-black">Unlimited projects</span>
</li>
<li class="flex items-start gap-2.5">
<span class="mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center border-2 border-black bg-[#00E676]">
<svg class="h-3 w-3" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="4" aria-hidden="true"><path d="M5 12l5 5L20 6" /></svg>
</span>
<span class="font-archivo text-[14px] font-medium text-black">All premium snippets</span>
</li>
<li class="flex items-start gap-2.5">
<span class="mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center border-2 border-black bg-[#00E676]">
<svg class="h-3 w-3" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="4" aria-hidden="true"><path d="M5 12l5 5L20 6" /></svg>
</span>
<span class="font-archivo text-[14px] font-medium text-black">AI pair programmer</span>
</li>
<li class="flex items-start gap-2.5">
<span class="mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center border-2 border-black bg-[#FFFDF5]">
<span class="h-0.5 w-2.5 bg-black"></span>
</span>
<span class="font-archivo text-[14px] font-medium text-black/50">Team workspace</span>
</li>
</ul>
<a href="#" class="mt-6 block border-2 border-black bg-black px-4 py-3 text-center font-archivo text-sm font-extrabold uppercase tracking-tight text-white shadow-[4px_4px_0_0_#FFE600] transition-transform duration-100 hover:translate-x-[2px] hover:translate-y-[2px] hover:shadow-[1px_1px_0_0_#FFE600] focus:outline-none focus-visible:ring-2 focus-visible:ring-[#FFE600] focus-visible:ring-offset-2">
Get Pro
</a>
</article>
<!-- Team -->
<article class="relative flex flex-col border-2 border-black bg-white p-6 shadow-[8px_8px_0_0_#000] transition-transform duration-100 hover:translate-x-[2px] hover:translate-y-[2px] hover:shadow-[5px_5px_0_0_#000]">
<header>
<p class="font-mono text-[11px] font-bold uppercase tracking-wider text-black/60">Team</p>
<h2 class="mt-2 font-archivo text-2xl font-extrabold uppercase leading-none tracking-tight">Scale up</h2>
<p class="mt-2 font-archivo text-[14px] font-medium text-black/70">Collaborate across the whole crew.</p>
</header>
<div class="mt-5 flex items-end gap-1 border-b-2 border-black pb-5">
<span class="font-archivo text-5xl font-extrabold leading-none tracking-tighter" data-price="team">$49</span>
<span class="mb-1 font-mono text-[11px] font-bold uppercase tracking-wider text-black/50" data-period="team">/mo</span>
</div>
<ul class="mt-5 flex-1 space-y-3" role="list">
<li class="flex items-start gap-2.5">
<span class="mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center border-2 border-black bg-[#00E676]">
<svg class="h-3 w-3" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="4" aria-hidden="true"><path d="M5 12l5 5L20 6" /></svg>
</span>
<span class="font-archivo text-[14px] font-medium text-black">Everything in Pro</span>
</li>
<li class="flex items-start gap-2.5">
<span class="mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center border-2 border-black bg-[#00E676]">
<svg class="h-3 w-3" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="4" aria-hidden="true"><path d="M5 12l5 5L20 6" /></svg>
</span>
<span class="font-archivo text-[14px] font-medium text-black">Team workspace (10 seats)</span>
</li>
<li class="flex items-start gap-2.5">
<span class="mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center border-2 border-black bg-[#00E676]">
<svg class="h-3 w-3" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="4" aria-hidden="true"><path d="M5 12l5 5L20 6" /></svg>
</span>
<span class="font-archivo text-[14px] font-medium text-black">SSO & audit logs</span>
</li>
<li class="flex items-start gap-2.5">
<span class="mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center border-2 border-black bg-[#00E676]">
<svg class="h-3 w-3" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="4" aria-hidden="true"><path d="M5 12l5 5L20 6" /></svg>
</span>
<span class="font-archivo text-[14px] font-medium text-black">Priority support</span>
</li>
</ul>
<a href="#" class="mt-6 block border-2 border-black bg-[#00C2FF] px-4 py-3 text-center font-archivo text-sm font-extrabold uppercase tracking-tight text-black shadow-[4px_4px_0_0_#000] transition-transform duration-100 hover:translate-x-[2px] hover:translate-y-[2px] hover:shadow-[1px_1px_0_0_#000] focus:outline-none focus-visible:ring-2 focus-visible:ring-black focus-visible:ring-offset-2">
Start team trial
</a>
</article>
</div>
<p class="mt-6 text-center font-mono text-[11px] font-bold uppercase tracking-wider text-black/40">
// prices in USD · cancel anytime · no card required for free tier
</p>
<script>
(function () {
var root = document.currentScript.closest('[data-pricing]');
if (!root) return;
var PRICES = {
starter: { monthly: '$0', annual: '$0', periodM: '/mo', periodA: '/yr' },
pro: { monthly: '$19', annual: '$182', periodM: '/mo', periodA: '/yr' },
team: { monthly: '$49', annual: '$470', periodM: '/mo', periodA: '/yr' }
};
var buttons = root.querySelectorAll('.billing-btn');
function render(mode) {
Object.keys(PRICES).forEach(function (tier) {
var p = root.querySelector('[data-price="' + tier + '"]');
var per = root.querySelector('[data-period="' + tier + '"]');
if (p) p.textContent = PRICES[tier][mode];
if (per) per.textContent = mode === 'annual' ? PRICES[tier].periodA : PRICES[tier].periodM;
});
buttons.forEach(function (b) {
var active = b.getAttribute('data-billing') === mode;
b.setAttribute('aria-pressed', String(active));
if (active) {
b.classList.add('bg-[#FFE600]', 'border-black');
b.classList.remove('border-transparent');
} else {
b.classList.remove('bg-[#FFE600]', 'border-black');
b.classList.add('border-transparent');
}
});
}
buttons.forEach(function (b) {
b.addEventListener('click', function () {
render(b.getAttribute('data-billing'));
});
});
render('monthly');
})();
</script>
</section> 212 lines UTF-8 · LF · Spaces: 2
Continue browsing