Section

Dashboard Overview — Neo-Brutalism

Brutalist analytics dashboard overview with KPI stat cards and trend deltas, a pure-SVG dual bar chart, a recent-activity feed, and a wired 7d/30d/90d range selector that swaps hardcoded datasets live. Hard black borders, offset drop shadows, and flat bright accents.

  • Section
  • Tailwind
  • HTML
  • MIT

What it does

Capabilities

  • KPI stat cards with trend deltas
  • Pure SVG bar chart (no libraries)
  • Wired 7d/30d/90d range switcher
  • Live dataset swap on range change
  • Recent activity feed
  • Hard offset shadows
  • Flat bright accent palette
  • Keyboard accessible range buttons

Preview

Live section

Interactive preview
Open preview
9:41 100%
devsnips.site/library/tailwind/sections/app-ui/dashboard-overview/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/App-UI/dashboard-overview/neo-brutalism
registry path: Tailwind/Sections/App-UI/dashboard-overview/neo-brutalism

Source

Implementation

code.html
<!--
Snippet Name: Dashboard Overview — Neo-Brutalism
Description: Brutalist analytics dashboard with KPI stat cards, a pure-SVG bar chart, an activity feed, and a wired 7d/30d/90d range switcher that swaps hardcoded datasets.
Author: DevSnips Contributors
Usage Example: Drop into any app shell as an analytics overview. The range selector updates KPI values, deltas, and the chart in preview.html.
-->
<div class="relative w-full" data-dash="nb">

  <!-- Panel -->
  <div class="border-2 border-black bg-[#FFFDF5] shadow-[8px_8px_0_0_#000]">

    <!-- Header / toolbar -->
    <div class="flex flex-col gap-4 border-b-2 border-black bg-white px-5 py-4 sm:flex-row sm:items-center sm:justify-between sm:px-6">
      <div class="flex items-center gap-3">
        <div class="flex h-11 w-11 items-center justify-center border-2 border-black bg-[#FFE600] shadow-[3px_3px_0_0_#000]">
          <svg class="h-6 w-6" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true">
            <path d="M3 20h18M5 20V11M10 20V7M15 20v-6M20 20V5" />
          </svg>
        </div>
        <div>
          <p class="font-archivo text-lg font-extrabold uppercase leading-none tracking-tight">Overview</p>
          <p class="mt-1.5 font-mono text-[11px] font-bold uppercase tracking-wider text-black/60">
            <span class="inline-block h-2 w-2 border border-black bg-[#00E676]"></span>
            LIVE · UPDATED 2 MIN AGO
          </p>
        </div>
      </div>

      <!-- Range selector -->
      <div role="group" aria-label="Time range" class="flex w-fit items-center border-2 border-black bg-[#FFFDF5] shadow-[3px_3px_0_0_#000]">
        <button type="button" data-range="7" class="nb-range font-mono text-[11px] font-bold uppercase px-3.5 py-2 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-black focus-visible:ring-offset-2">7d</button>
        <button type="button" data-range="30" class="nb-range border-x-2 border-black font-mono text-[11px] font-bold uppercase px-3.5 py-2 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-black focus-visible:ring-offset-2">30d</button>
        <button type="button" data-range="90" class="nb-range font-mono text-[11px] font-bold uppercase px-3.5 py-2 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-black focus-visible:ring-offset-2">90d</button>
      </div>
    </div>

    <!-- KPI cards -->
    <div class="grid grid-cols-1 gap-0 border-b-2 border-black sm:grid-cols-2 lg:grid-cols-4 lg:divide-x-2 lg:divide-black">
      <!-- Revenue -->
      <div class="border-b-2 border-black p-5 sm:border-r-0 sm:[&:nth-child(odd)]:border-r-2 sm:[&:nth-child(odd)]:border-black lg:border-r-0 lg:border-b-0 lg:[&:nth-child(odd)]:border-r-0" data-kpi="revenue">
        <p class="font-mono text-[11px] font-bold uppercase tracking-wider text-black/60">Revenue</p>
        <p class="mt-2 font-archivo text-3xl font-extrabold leading-none" data-kpi-value>$48,210</p>
        <div class="mt-3 inline-flex items-center gap-1.5 border-2 border-black px-2 py-0.5 font-mono text-[11px] font-bold uppercase" data-kpi-delta>
          <span class="inline-block h-2 w-2 bg-[#00E676]"></span>+12.4%
        </div>
      </div>
      <!-- Active Users -->
      <div class="border-b-2 border-black p-5 lg:border-b-0" data-kpi="users">
        <p class="font-mono text-[11px] font-bold uppercase tracking-wider text-black/60">Active Users</p>
        <p class="mt-2 font-archivo text-3xl font-extrabold leading-none" data-kpi-value>18,402</p>
        <div class="mt-3 inline-flex items-center gap-1.5 border-2 border-black px-2 py-0.5 font-mono text-[11px] font-bold uppercase" data-kpi-delta>
          <span class="inline-block h-2 w-2 bg-[#00E676]"></span>+8.1%
        </div>
      </div>
      <!-- MRR -->
      <div class="border-b-2 border-black p-5 sm:border-r-0 sm:[&:nth-child(odd)]:border-r-2 sm:[&:nth-child(odd)]:border-black lg:border-r-0 lg:border-b-0 lg:[&:nth-child(odd)]:border-r-0" data-kpi="mrr">
        <p class="font-mono text-[11px] font-bold uppercase tracking-wider text-black/60">MRR</p>
        <p class="mt-2 font-archivo text-3xl font-extrabold leading-none" data-kpi-value>$12,640</p>
        <div class="mt-3 inline-flex items-center gap-1.5 border-2 border-black px-2 py-0.5 font-mono text-[11px] font-bold uppercase" data-kpi-delta>
          <span class="inline-block h-2 w-2 bg-[#00E676]"></span>+5.7%
        </div>
      </div>
      <!-- Churn -->
      <div class="p-5" data-kpi="churn">
        <p class="font-mono text-[11px] font-bold uppercase tracking-wider text-black/60">Churn</p>
        <p class="mt-2 font-archivo text-3xl font-extrabold leading-none" data-kpi-value>2.1%</p>
        <div class="mt-3 inline-flex items-center gap-1.5 border-2 border-black px-2 py-0.5 font-mono text-[11px] font-bold uppercase" data-kpi-delta>
          <span class="inline-block h-2 w-2 bg-[#FF4FA3]"></span>-0.3pp
        </div>
      </div>
    </div>

    <!-- Chart + activity -->
    <div class="grid grid-cols-1 lg:grid-cols-3">
      <!-- Chart -->
      <div class="border-b-2 border-black p-5 sm:p-6 lg:col-span-2 lg:border-b-0 lg:border-r-2">
        <div class="mb-5 flex items-end justify-between">
          <div>
            <p class="font-archivo text-base font-extrabold uppercase tracking-tight">Revenue Trend</p>
            <p class="mt-1 font-mono text-[11px] font-bold uppercase tracking-wider text-black/55">LAST <span data-range-label>30 DAYS</span></p>
          </div>
          <div class="flex items-center gap-3">
            <span class="flex items-center gap-1.5 font-mono text-[10px] font-bold uppercase text-black/60">
              <span class="inline-block h-2.5 w-2.5 border border-black bg-[#FFE600]"></span>Revenue
            </span>
            <span class="flex items-center gap-1.5 font-mono text-[10px] font-bold uppercase text-black/60">
              <span class="inline-block h-2.5 w-2.5 border border-black bg-[#00C2FF]"></span>Prev
            </span>
          </div>
        </div>
        <div class="relative">
          <svg data-chart viewBox="0 0 640 240" preserveAspectRatio="none" class="h-56 w-full sm:h-64" role="img" aria-label="Revenue trend bar chart"></svg>
          <div class="mt-2 flex items-center justify-between font-mono text-[10px] font-bold uppercase text-black/45" data-chart-axis></div>
        </div>
      </div>

      <!-- Activity feed -->
      <div class="p-5 sm:p-6">
        <div class="mb-4 flex items-center justify-between">
          <p class="font-archivo text-base font-extrabold uppercase tracking-tight">Activity</p>
          <button type="button" class="font-mono text-[10px] font-bold uppercase text-black/55 underline focus:outline-none focus-visible:ring-2 focus-visible:ring-black focus-visible:ring-offset-2">View all</button>
        </div>
        <ul class="space-y-3" data-activity>
          <li class="flex gap-3 border-2 border-black bg-white p-3 shadow-[3px_3px_0_0_#000]">
            <span class="flex h-9 w-9 shrink-0 items-center justify-center border-2 border-black bg-[#00E676] text-black">
              <svg class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" aria-hidden="true"><path d="M12 5v14M5 12h14" /></svg>
            </span>
            <div class="min-w-0 flex-1">
              <p class="font-archivo text-[13px] font-bold leading-tight">New customer upgrade</p>
              <p class="mt-0.5 font-mono text-[10px] font-bold uppercase tracking-wider text-black/55">Acme Co · Pro plan · 2m ago</p>
            </div>
          </li>
          <li class="flex gap-3 border-2 border-black bg-white p-3 shadow-[3px_3px_0_0_#000]">
            <span class="flex h-9 w-9 shrink-0 items-center justify-center border-2 border-black bg-[#FFE600] text-black">
              <svg class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6" /></svg>
            </span>
            <div class="min-w-0 flex-1">
              <p class="font-archivo text-[13px] font-bold leading-tight">Payout processed</p>
              <p class="mt-0.5 font-mono text-[10px] font-bold uppercase tracking-wider text-black/55">Stripe · $4,820 · 38m ago</p>
            </div>
          </li>
          <li class="flex gap-3 border-2 border-black bg-white p-3 shadow-[3px_3px_0_0_#000]">
            <span class="flex h-9 w-9 shrink-0 items-center justify-center border-2 border-black bg-[#FF4FA3] text-white">
              <svg class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" aria-hidden="true"><path d="M6 9l6 6 6-6" /></svg>
            </span>
            <div class="min-w-0 flex-1">
              <p class="font-archivo text-[13px] font-bold leading-tight">Churn alert resolved</p>
              <p class="mt-0.5 font-mono text-[10px] font-bold uppercase tracking-wider text-black/55">Quark.io · 1h ago</p>
            </div>
          </li>
          <li class="flex gap-3 border-2 border-black bg-white p-3 shadow-[3px_3px_0_0_#000]">
            <span class="flex h-9 w-9 shrink-0 items-center justify-center border-2 border-black bg-[#00C2FF] text-black">
              <svg class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" aria-hidden="true"><circle cx="12" cy="12" r="3" /><path d="M12 2v3M12 19v3M2 12h3M19 12h3" /></svg>
            </span>
            <div class="min-w-0 flex-1">
              <p class="font-archivo text-[13px] font-bold leading-tight">New trial signup</p>
              <p class="mt-0.5 font-mono text-[10px] font-bold uppercase tracking-wider text-black/55">Loop Labs · 3h ago</p>
            </div>
          </li>
        </ul>
      </div>
    </div>
  </div>

  <script>
    (function () {
      var root = document.currentScript.closest('[data-dash]');
      if (!root) return;

      // Hardcoded datasets per range
      var datasets = {
        7: {
          labels: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
          current: [42, 55, 48, 71, 66, 80, 95],
          previous: [38, 47, 52, 60, 58, 70, 82],
          kpis: {
            revenue: { value: '$11,420', delta: '+9.2%', up: true },
            users: { value: '4,820', delta: '+6.4%', up: true },
            mrr: { value: '$12,640', delta: '+5.7%', up: true },
            churn: { value: '2.1%', delta: '-0.3pp', up: false, good: true }
          }
        },
        30: {
          labels: ['W1', 'W2', 'W3', 'W4'],
          current: [320, 410, 380, 510],
          previous: [280, 360, 340, 460],
          kpis: {
            revenue: { value: '$48,210', delta: '+12.4%', up: true },
            users: { value: '18,402', delta: '+8.1%', up: true },
            mrr: { value: '$12,640', delta: '+5.7%', up: true },
            churn: { value: '2.1%', delta: '-0.3pp', up: false, good: true }
          }
        },
        90: {
          labels: ['M1', 'M2', 'M3'],
          current: [1480, 1720, 1610],
          previous: [1260, 1520, 1450],
          kpis: {
            revenue: { value: '$142,080', delta: '+18.6%', up: true },
            users: { value: '52,140', delta: '+14.2%', up: true },
            mrr: { value: '$13,920', delta: '+9.3%', up: true },
            churn: { value: '1.9%', delta: '-0.4pp', up: false, good: true }
          }
        }
      };

      var chart = root.querySelector('[data-chart]');
      var axis = root.querySelector('[data-chart-axis]');
      var rangeLabel = root.querySelector('[data-range-label]');
      var buttons = root.querySelectorAll('.nb-range');

      function render(range) {
        var d = datasets[range];
        if (!d) return;

        // KPIs
        ['revenue', 'users', 'mrr', 'churn'].forEach(function (key) {
          var card = root.querySelector('[data-kpi="' + key + '"]');
          if (!card) return;
          var k = d.kpis[key];
          var valEl = card.querySelector('[data-kpi-value]');
          var dEl = card.querySelector('[data-kpi-delta]');
          if (valEl) valEl.textContent = k.value;
          if (dEl) {
            var dotColor = k.up ? '#00E676' : (k.good ? '#00E676' : '#FF4FA3');
            dEl.innerHTML = '<span class="inline-block h-2 w-2" style="background:' + dotColor + '"></span>' + k.delta;
          }
        });

        if (rangeLabel) rangeLabel.textContent = range + ' DAYS';

        // Chart
        var W = 640, H = 240, padB = 18, padT = 10, padX = 16;
        var n = d.current.length;
        var max = Math.max.apply(null, d.current.concat(d.previous)) * 1.12;
        var barGroup = (W - padX * 2) / n;
        var bw = Math.max(6, barGroup * 0.32);
        var gap = Math.max(2, barGroup * 0.12);

        var svg = '';
        // baseline gridlines
        for (var g = 0; g <= 4; g++) {
          var y = padT + (H - padT - padB) * (g / 4);
          svg += '<line x1="' + padX + '" y1="' + y.toFixed(1) + '" x2="' + (W - padX) + '" y2="' + y.toFixed(1) + '" stroke="#000" stroke-width="1" stroke-dasharray="2 4" opacity="0.15"/>';
        }
        // bars
        for (var i = 0; i < n; i++) {
          var cx = padX + barGroup * i + barGroup / 2;
          // previous (cyan, behind)
          var ph = (d.previous[i] / max) * (H - padT - padB);
          svg += '<rect x="' + (cx - bw - gap / 2).toFixed(1) + '" y="' + (H - padB - ph).toFixed(1) + '" width="' + bw.toFixed(1) + '" height="' + ph.toFixed(1) + '" fill="#00C2FF" stroke="#000" stroke-width="2"/>';
          // current (yellow)
          var ch = (d.current[i] / max) * (H - padT - padB);
          svg += '<rect x="' + (cx + gap / 2).toFixed(1) + '" y="' + (H - padB - ch).toFixed(1) + '" width="' + bw.toFixed(1) + '" height="' + ch.toFixed(1) + '" fill="#FFE600" stroke="#000" stroke-width="2"/>';
        }
        // baseline
        svg += '<line x1="' + padX + '" y1="' + (H - padB) + '" x2="' + (W - padX) + '" y2="' + (H - padB) + '" stroke="#000" stroke-width="2.5"/>';
        chart.innerHTML = svg;

        // axis labels
        if (axis) {
          axis.innerHTML = d.labels.map(function (l) { return '<span>' + l + '</span>'; }).join('');
        }

        // active button
        buttons.forEach(function (b) {
          var active = b.dataset.range === String(range);
          b.classList.toggle('bg-[#FFE600]', active);
          b.classList.toggle('text-black', active);
          if (active) b.setAttribute('aria-pressed', 'true'); else b.removeAttribute('aria-pressed');
        });
      }

      buttons.forEach(function (b) {
        b.addEventListener('click', function () {
          render(parseInt(b.dataset.range, 10));
        });
      });

      render(30);
    })();
  </script>
</div>
263 lines UTF-8 · LF · Spaces: 2
DevSnips AI ready Claude · Cursor · Windsurf

Agent skill & Model Context Protocol

Pass this section straight into your AI workflow. DevSnips exposes each resource as a structured, addressable registry entry, so your agent installs the real files instead of approximating them.

devsnips://sections/app-ui/dashboard-overview/neo-brutalism
Prompt instruction
I want to use this DevSnips resource in production:

Page:
https://devsnips.site/library/tailwind/sections/app-ui/dashboard-overview/neo-brutalism/

Install: npx devsnips add
Tailwind/Sections/App-UI/dashboard-overview/neo-brutalism

This is the Dashboard Overview — Neo-Brutalism — Brutalist analytics dashboard overview with KPI stat cards and trend deltas, a pure-SVG dual bar chart, a recent-activity feed, and a wired 7d/30d/90d range selector that swaps hardcoded datasets live. Hard black borders, offset drop shadows, and flat bright accents.

Use this DevSnips resource as the starting point for my project.
Adapt it to my project's stack and conventions, fix any issues,
and make it production-ready while preserving its intended design
and behavior.

Paste into ChatGPT, Claude or your agent — it already carries the page URL and the exact install path.

Resource URI
devsnips://sections/app-ui/dashboard-overview/neo-brutalism