Staaarter

Care Overview Dashboard

A clinical overview with an eyebrow over a hairline rule, a two-column heading, and a bordered dashboard panel that composes a journeys stat, a retention ring (static SVG progress ring), and a slim status strip, closing with a big-number outcomes row. Perfect for clinics and care platforms summarizing programme performance.

By Staaarter Team
Health
Docs
Live preview

Docs

Installation

A real shadcn registry command, not a copy-paste stand-in: it fetches this block plus its badge dependencies and any missing npm packages, and installs them straight into your project.

npx shadcn add https://staaarter.com/r/care-overview-dashboard.json

Prefer not to use the CLI? Copy the source from the Code toggle above into src/components/blocks/health/health2.tsx instead.

Usage

The file also exports health2Demo, the exact props behind the preview above. Spread it to get a working section in one line, then replace it with your own data.

import { Health2, health2Demo } from "@/components/blocks/health/health2";

export default function Page() {
  return <Health2 {...health2Demo} />;
}

Props

PropTypeDefaultDescription
eyebrowstringnoneSmall uppercase label above the hairline rule; the rule only renders when eyebrow is set.
headingReactNodenoneLeft column of the two-column heading row.
descriptionstringundefinedRight column of the two-column heading row.
journeysLabelstring"Active care journeys"Label above the big journeys number.
journeysValuestringnoneThe big journeys stat, e.g. "1,248".
journeysHelpTextstringundefinedSmall helper line under the journeys stat.
retentionValuenumbernone0-100 percentage driving the static SVG retention ring's fill.
retentionLabelstring"12-month retention"Label under the retention percentage.
statusLabelstring"All care journeys reporting normally"Text next to the decorative status dot.
statusBadgeLabelstring"Live"Badge label at the end of the status strip.
outcomesOutcomeStat[]noneBig-number outcomes row at the bottom of the panel.
classNamestringnoneExtra classes for the outer section element.

Types

type OutcomeStat = { label: string; value: string };

Behavior notes

  • The eyebrow and the hairline rule beneath it render together or not at all, based only on eyebrow being set.
  • retentionValue is clamped to 0-100 before it drives both the displayed percentage and the ring's strokeDashoffset, so an out-of-range prop can't overshoot the ring.
  • The status strip's dot and "Live" badge are decorative placeholders standing in for a real-time status feed; no data is actually live or polled.
  • The ring is a static SVG (two stacked <circle> elements with a fixed strokeDasharray/strokeDashoffset) computed from retentionValue at render time, not animated or updated after mount.