Quarterly Metric Matrix

This quarter

The board pack, without the board pack

Six numbers a practice lead is asked about every quarter, counted as the work happens rather than assembled the week before.

Compared with the previous quarter

Appointments booked

3,841

+12.4%

Across four sites, including the two that opened in February.

Room utilisation

81%

+6 pts

Booked hours as a share of hours the rooms were open.

No-show rate

2.1%

-1.4 pts

Reminders that skip anyone who has already confirmed did most of this.

Days to first appointment

6.2

-2.8 days

Median from referral arriving to the member being seen.

Invoices outstanding past 30 days

£4,180

+£620

Up, and almost entirely one insurer we are still chasing.

Support conversations

94

0

Flat while appointment volume grew, which is the shape we wanted.

Every figure links back to the records behind it, so anything that looks wrong can be opened rather than argued about.

About this block

Quarterly Metric MatrixPRO

A quarterly results matrix of hairline cells, each pairing a light figure with a signed change tinted by whether the movement is good or bad rather than by its direction, over a line of context.

Stats69: Quarterly Metric Matrix

A quarterly results matrix of hairline cells, each pairing a light figure with a signed change tinted by whether the movement is good or bad rather than by its direction, over a line of context.

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

Base UI flavor

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

This installs the block to components/beste/block/stats69.tsx plus the badge23 component it uses for the eyebrow.

Quick start

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

tsx
import { Stats69, stats69Demo } from "@/components/beste/block/stats69";

export default function QuarterPage() {
  return <Stats69 {...stats69Demo} />;
}

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

tsx
import { Stats69 } from "@/components/beste/block/stats69";

export default function QuarterPage() {
  return (
    <Stats69
      badge={{ label: "This quarter" }}
      heading="The board pack, without the board pack"
      description="Six numbers a practice lead is asked about every quarter."
      periodLabel="Compared with the previous quarter"
      metrics={[
        {
          label: "Appointments booked",
          value: "3,841",
          delta: "+12.4%",
          direction: "up",
          better: true,
          context: "Across four sites, including the two that opened in February.",
        },
        {
          label: "Invoices outstanding past 30 days",
          value: "£4,180",
          delta: "+£620",
          direction: "up",
          better: false,
          context: "Up, and almost entirely one insurer we are still chasing.",
        },
        {
          label: "Support conversations",
          value: "94",
          delta: "0",
          direction: "flat",
          better: true,
          context: "Flat while appointment volume grew.",
        },
      ]}
      footnote="Every figure links back to the records behind it."
    />
  );
}

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
periodLabelstringWhat the changes are measured against
metricsMetric[][]The figures, three across from lg
footnotestringClosing note under the matrix
classNamestringExtra classes for the outer section
ts
type Metric = {
  label: string;
  value: string;
  delta: string;
  direction: "up" | "down" | "flat";
  better: boolean;
  context: string;
};

Behavior notes

  • direction and better are separate fields on purpose. The arrow follows the direction of movement, the colour follows whether that movement is good. A falling no-show rate points down and is green; a rising overdue balance points up and is red.
  • Conflating the two is the mistake this block is built to avoid, so both fields are required on every metric.
  • direction: "flat" overrides better entirely and renders muted, since a flat number is neither.
  • periodLabel sits in the header rather than on each cell, so the comparison basis is stated once for the whole matrix.
  • context is required and carries its own border-t inside each cell, so no figure is published without a sentence explaining it.
  • Cells are flex flex-col with the context marked flex-1, so all cells in a row end level.
  • The matrix lines are the gap, not borders: gap-px over a bg-border container with bg-card cells, clipped by the container's overflow-hidden.
  • Values and deltas both use tabular-nums, so a currency figure and a percentage still align down the grid.

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.

PRO

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.

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

stats61

Typographic Stats

Oversized number rows with labels and context, editorial style.

PRO

stats14

Trend Indicator Stats

Dashboard-style stat cards with colored trend badges showing up, down, or neutral changes. Perfect for quarterly reports and growth 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.