Before And After PairsPRO

A results section stacking each measure on its own hairline row, moving a muted starting figure to an accented result across an arrow, with a soft closing panel that floats a live comparison card.

Stats67: Before And After Pairs

A results section stacking each measure on its own hairline row, moving a muted starting figure to an accented result across an arrow, with a soft closing panel that floats a live comparison card.

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/stats67?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

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

This installs the block to components/beste/block/stats67.tsx, the stats17 comparison piece it floats on the tile (installed to components/beste/piece/stats17.tsx), and the badge23 component it uses for the eyebrow.

Quick start

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

tsx
import { Stats67, stats67Demo } from "@/components/beste/block/stats67";

export default function ResultsPage() {
  return <Stats67 {...stats67Demo} />;
}

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

tsx
import { Stats17 } from "@/components/beste/piece/stats17";
import { Stats67 } from "@/components/beste/block/stats67";

export default function ResultsPage() {
  return (
    <Stats67
      badge={{ label: "Before and after" }}
      heading="The same practice, measured twice"
      description="Counted the month before they moved and the month after they settled."
      beforeLabel="Before"
      afterLabel="After"
      pairs={[
        {
          measure: "Time to first booking",
          before: "9 days",
          after: "4 hours",
          note: "Referral arriving to a confirmed appointment in the member's hand.",
        },
        {
          measure: "Unfilled cancellations per week",
          before: "14",
          after: "1",
          note: "Slots that went unused because nobody had time to ring round.",
        },
      ]}
      media={
        <Stats17
          title="Time to first booking"
          before={{ label: "Before", value: "9 days", caption: "across three systems" }}
          after={{ label: "After", value: "4 hours", caption: "on one workspace" }}
          footnote="Median across eleven practices."
        />
      }
      image={{ src: "/backdrops/blue.jpg", alt: "Soft blue gradient backdrop" }}
      method="Counted from the practice's own records, not from a survey."
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string }Eyebrow above the hairline rule, rendered through Badge23
headingstringSection heading in the left column of the header
descriptionstringSupporting paragraph, right-aligned from md up
beforeLabelstringLabel above every starting figure
afterLabelstringLabel above every result figure
pairsPair[][]The measures, one per hairline row
mediaReactNodeLive asset in the closing panel, stats17 in the demo
image{ src: string; alt: string }Backdrop behind the media tile
methodstringHow the figures were counted
classNamestringExtra classes for the outer section
ts
type Pair = {
  measure: string;
  before: string;
  after: string;
  note: string;
};

type TileImage = {
  src: string;
  alt: string;
};

Behavior notes

More Stats blocks

View all Stats
FREE

stats66

Outcome Metric Rows

A results section that stacks each metric on its own hairline row, pairing an oversized figure with a short label, a sentence of context, and an optional year-over-year delta.

FREE

stats68

Segmented Total Breakdown

A results section that leads on one oversized total, splits it across a segmented accent bar, then legends each segment on a hairline row aligning its value, share, and what it covers.

PRO

stats71

Single Headline Figure

A results section that commits to one enormous light figure, reads it back as a statement under a hairline, qualifies it with three smaller footnotes, and closes on a captioned full-bleed photograph.

PRO

stats70

Annual Report Readings

An annual results section pairing an image tile that floats a live breakdown chart with a light interpretation of it, then four hairline readings that each name their own source, closing on a method panel.

PRO

stats1

Right-Aligned Stats Cards

Right-aligned layout with heading, description, and a 2x2 grid of stat cards. Perfect for showcasing key metrics alongside content.

PRO

stats73

Benchmark Comparison Bars

A benchmarking section that pairs an accent bar for the platform median against a muted bar for the sector median on every metric, with a legend above and a sourcing note below.