Benchmark Comparison Bars

Against the field

How a practice on Sirius compares with one that is not

The lighter bar is the sector median from published sources. The accent bar is the median across practices on the platform.

On SiriusSector median

Room utilisation

81%
64%

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

Cancellations refilled

84%
38%

The gap here is almost entirely automatic waiting list backfill.

Attendance rate

97.9%
94.2%

A smaller gap than people expect. Reminders help, but only so much.

Invoices settled within 30 days

88%
71%

Raising the invoice from the appointment does most of this.

Admin held in clinical rooms

11%
23%

Lower is better here, which is why this bar is the short one.

Sector medians come from published industry surveys, not from our own customers, and we link every source in the full report. Where a survey and our data disagree, we say so rather than picking the flattering one.

See the sources
About this block

Benchmark Comparison BarsPRO

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.

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.

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

Base UI flavor

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

This installs the block to components/beste/block/stats73.tsx plus the badge23 and button21 components it uses for the eyebrow and the action.

Quick start

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

tsx
import { Stats73, stats73Demo } from "@/components/beste/block/stats73";

export default function BenchmarksPage() {
  return <Stats73 {...stats73Demo} />;
}

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

tsx
import { Stats73 } from "@/components/beste/block/stats73";

export default function BenchmarksPage() {
  return (
    <Stats73
      badge={{ label: "Against the field" }}
      heading="How a practice on the platform compares with one that is not"
      description="The lighter bar is the sector median from published sources."
      yoursLabel="On the platform"
      medianLabel="Sector median"
      benchmarks={[
        {
          metric: "Room utilisation",
          yours: "81%",
          yoursPercent: 81,
          median: "64%",
          medianPercent: 64,
          note: "Booked clinical hours as a share of the hours rooms were open.",
        },
        {
          metric: "Admin held in clinical rooms",
          yours: "11%",
          yoursPercent: 11,
          median: "23%",
          medianPercent: 23,
          note: "Lower is better here, which is why this bar is the short one.",
        },
      ]}
      method="Sector medians come from published industry surveys, not from our own customers."
      button={{ label: "See the sources", href: "/benchmarks" }}
    />
  );
}

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
yoursLabelstringLegend label for the accent bar
medianLabelstringLegend label for the muted bar
benchmarksBenchmark[][]The metrics, one hairline row each
methodstringWhere the comparison figures came from
button{ label: string; href: string }Outline action linking to sources
classNamestringExtra classes for the outer section
ts
type ActionLink = {
  label: string;
  href: string;
};

type Benchmark = {
  metric: string;
  yours: string;
  yoursPercent: number;
  median: string;
  medianPercent: number;
  note: string;
};

Behavior notes

  • Each metric carries a display string and a bar percentage separately, so yours can read "97.9%" while yoursPercent is 98. The bar is an illustration; the text beside it is the figure.
  • Percentages are used directly as inline widths and are not normalised, so both should be on a 0 to 100 scale. A metric measured in another unit needs converting before it is passed.
  • Bars are aria-hidden and every value is printed beside its bar, so the comparison reads without them.
  • The block does not know which direction is better. The demo's last row makes that explicit in its note, since a shorter accent bar is the good result there.
  • note is required on every metric, which is what keeps a bar chart from implying more than the data supports.
  • Value labels sit in a fixed w-16 column with tabular-nums, so the two figures in a row line up under each other.
  • The method row carries its own border-t, closing the list and separating the sourcing note from the metrics.

More Stats blocks

View all Stats
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.

PRO

stats19

Glass Bar over Image

Wide image with a frosted glass stats bar anchored to the bottom. Stats are separated by vertical dividers inside the blur overlay.

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

stats23

Animated Bar Chart Stats

Horizontal progress bars that grow with spring animation on scroll. Each bar shows a label, value, and percentage fill.

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

stats42

Review Distribution Stats

Star rating breakdown with horizontal progress bars for each rating level, overall score, and total review count like Amazon or App Store.