Skip to content
All Taste components

Stats

Stats — beside a quote

A customer's words on the left and four figures from their account on the right, so the numbers have a face.

large pull quote · avatar, name and company wordmark · 2 × 2 figures with top rules · stacks below 760px

We used to spend the first week of every month chasing invoices. Now the money arrives before we've noticed it was due.
LMLena MarshStudio manager, Blue PineBlue Pine
clients billed every month
42
average days to get paid, from 31
8
of invoices paid on time
94%
hours of admin saved a month
12
import { Quote } from "lucide-react";
import { cn } from "@/lib/utils";

// Use a real customer's words and numbers, with their permission.
const story = {
  quote: "We used to spend the first week of every month chasing invoices. Now the money arrives before we’ve noticed it was due.",
  name: "Lena Marsh",
  role: "Studio manager, Blue Pine",
  initials: "LM",
  company: "Blue Pine",
  stats: [
    { value: "42", label: "clients billed every month" },
    { value: "8", label: "average days to get paid, from 31" },
    { value: "94%", label: "of invoices paid on time" },
    { value: "12", label: "hours of admin saved a month" },
  ],
};

export function StatsWithQuote() {
  return (
    <section aria-label="Customer story" className="bg-bg font-sans">
      <div className="mx-auto grid max-w-6xl items-center gap-10 px-4 py-16 sm:px-6 lg:grid-cols-[1.15fr_1fr] lg:gap-16 lg:py-24">
        <figure className="grid gap-6">
          <Quote className="size-8 text-primary" aria-hidden />
          <blockquote className="text-pretty text-xl font-medium leading-snug tracking-tight text-fg sm:text-2xl lg:text-[28px]">
            {story.quote}
          </blockquote>
          <figcaption className="flex items-center gap-3 text-sm text-fg-muted">
            <span className="grid size-9 place-items-center rounded-full bg-primary-soft text-[13px] font-medium text-primary-soft-fg">{story.initials}</span>
            <span><b className="block font-semibold text-fg">{story.name}</b>{story.role}</span>
            <span className="ml-auto hidden border-l border-border pl-4 text-[17px] font-medium tracking-wide text-fg-subtle min-[480px]:block">{story.company}</span>
          </figcaption>
        </figure>
        <dl className="grid grid-cols-2 gap-x-7 gap-y-8">
          {story.stats.map((s, i) => (
            <div key={s.label} className={cn("flex flex-col gap-1.5 border-t pt-4", i === 0 ? "border-t-2 border-fg" : "border-border")}>
              <dt className="order-2 text-[13.5px] leading-snug text-fg-muted">{s.label}</dt>
              <dd className="order-1 text-4xl font-semibold leading-none tracking-[-0.045em] tabular-nums text-fg">{s.value}</dd>
            </div>
          ))}
        </dl>
      </div>
    </section>
  );
}

The code uses the Taste Tailwind preset. Make yours on the Taste page with Export my system.