Counting Numbers

In numbers

Smallrooms,alonglistofpeoplewhocameback.

0+
Sessions held

Since the first two rooms opened in 2019.

0%
Stay past session five

The point at which most people decide it is worth it.

0
Years of practice

Across the three practitioners who make up the studio.

0
Languages spoken

English, Portuguese and Spanish, in the room or online.

About this block

Counting NumbersPRO

An impact section where a serif heading settles in word by word beside a pill action, then four ruled columns of serif figures count up from zero as they enter the viewport, each with a small-caps label and a line of context, under a slowly drifting soft light.

Stats76: Counting Numbers

Four figures in a ruled row: each counts up from zero when it reaches the viewport, above a small-caps label and a line explaining what the number actually measures.

Upgrade to Pro

Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.

Upgrade Now

Installation

Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.

Radix flavor

bash
npx shadcn add "https://ui.beste.co/r/stats76?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/stats76?email=YOUR_EMAIL&license_key=YOUR_KEY"

This installs the block to components/beste/block/stats76.tsx plus the button22 sliding-marker pill and the text1 word stagger it uses.

Quick start

The installed file exports stats76Demo alongside the block: the exact props behind the preview above. Spread it to get a working stats section in one line.

tsx
import { Stats76, stats76Demo } from "@/components/beste/block/stats76";

export default function Page() {
  return <Stats76 {...stats76Demo} />;
}

Then replace the demo with your own props. Written out, a trimmed setup looks like this:

tsx
import { Stats76 } from "@/components/beste/block/stats76";

export default function Page() {
  return (
    <Stats76
      eyebrow="In numbers"
      heading="Small rooms, a long list of people who came back."
      button={{ label: "Read how we measure", href: "/method", tone: "outline" }}
      stats={[
        { value: 2400, suffix: "+", label: "Sessions held", description: "Since the first two rooms opened in 2019." },
        { value: 91, suffix: "%", label: "Stay past session five", description: "The point at which most people decide it is worth it." },
      ]}
    />
  );
}

Props

PropTypeDefaultDescription
eyebrowstringSmall-caps line above the heading
headingstringSection heading, rendered as an h2 through Text1
buttonActionButtonPill action beside the heading
statsStat[][]Figures, four across from md
classNamestringExtra classes for the outer <section>
ts
type Stat = {
  value: number;
  suffix?: string;
  label: string;
  description: string;
};

type ActionButton = {
  label: string;
  href: string;
  tone?: "primary" | "light" | "dark" | "outline";
};

Behavior notes

  • Each figure counts independently when it personally reaches the viewport, and useInView is set to once, so scrolling back up does not replay it.
  • Numbers are rounded every frame and printed in tabular-nums with US thousands grouping, so 2400 reads as 2,400 and the row does not change width while the count climbs.
  • The dividing rules come from md:border-l on every figure with md:first:border-l-0 unsetting the first, so a four-up row is separated without an outer line on either edge.
  • Those borders apply only from md, so a two-column phone layout does not carry a stray vertical rule.
  • Each figure is a dd with its label as the following dt inside a dl, so the number is the value and the label is the term describing it.
  • The description line is a plain paragraph rather than part of the definition pair, since it explains the measurement rather than naming it.
  • Figures enter with a 0.12s stagger, so the row resolves left to right.

More Stats blocks

View all Stats
PRO

stats77

Photo Figures

A split statistics section: a portrait photograph drifting inside its frame on the left, and on the right a serif heading that settles in word by word, an intro, three ruled serif figures that count up as they enter the viewport, and a pill action.

PRO

stats78

Ink Numbers Band

A dark ink statistics band with film grain: a serif statement that settles in word by word beside a light sliding-marker pill, then four ruled columns of serif figures that count up from zero as they enter the viewport.

PRO

stats27

Editorial Numbered Stats

Magazine-style numbered list layout with large sequence numbers, stat values, and a sticky sidebar heading for an editorial feel.

PRO

stats61

Typographic Stats

Oversized number rows with labels and context, editorial style.

PRO

stats5

Split Layout Stats

Two-column layout with heading and description on the left, 2x2 stats grid on the right. Perfect for pairing narrative with key metrics.

PRO

stats75

Audience Figures With Sourcing Notes

Four publication figures on hairlines, each carrying a label and a short note on how that number was measured rather than leaving the reader to trust it.