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

Interactive preview
Open preview
9:41 100%
devsnips.dev/library/tailwind/sections/saas/pricing-table/neo-brutalism/
fluid · no fixed width 100%
Dependencies: Tailwind CSS (CDN) · Google Fonts: Archivo, JetBrains Mono Responsive · Keyboard-ready

Install

Add to your project

terminal
npx devsnips add Tailwind/Sections/SaaS/pricing-table/neo-brutalism
registry path: Tailwind/Sections/SaaS/pricing-table/neo-brutalism

Source

Implementation

code.html
<!--
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

AI-ready

Available to your agent.

This section is reachable through the DevSnips CLI, MCP server and Skills integrations — one registry, one resource path.

Resource path

devsnips://sections/saas/pricing-table/neo-brutalism

Continue browsing

View all