A health dashboard with a top navigation bar (no sidebar): three activity-ring radial gauges, a steps area chart and a heart-rate line chart, and a recent-workouts list. A Today/Week/Month segmented control live-swaps the chart data and totals.
A fitness and health-tracking dashboard with three activity-ring radial gauges, a steps area chart, a heart-rate line chart, and a recent-workouts list under a top navigation bar. A Today/Week/Month range switch live-swaps the chart data and step totals, giving you a ready-made health tracking UI to drop into any project. Built as a Next.js / React fitness dashboard template on shadcn/ui + Recharts.
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.
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
npx shadcn add "https://ui.beste.co/r/dashboard11?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/dashboard11?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/dashboard11.tsx, the Beste chart and menu components it composes (area-chart, line-chart, radial-chart, user-menu, notifications-menu), and the shadcn/ui dependencies they need, including tabs.
The installed file exports dashboard11Demo alongside the block: the exact props behind the preview above. Spread it to get the full dashboard in one line. The block fills the viewport height (h-screen), so render it as the whole page.
import { Dashboard11, dashboard11Demo } from "@/components/beste/block/dashboard11";
export default function Page() {
return <Dashboard11 {...dashboard11Demo} />;
}Then pass your own props:
import { Dashboard11 } from "@/components/beste/block/dashboard11";
export default function Page() {
return <Dashboard11 brandName="Vitals" />;
}Every prop is optional. Omit any and the block falls back to its built-in demo data, so <Dashboard11 /> renders a complete, populated fitness dashboard out of the box. Pass just the props you want to override.
| Prop | Type | Default | Description |
|---|---|---|---|
brandName | string | "Vitals" | Wordmark next to the heart logo in the top navigation bar |
heading | string | "Good evening, Remy" | Page heading above the rings |
description | string | "Here's your week at a glance." | Muted line under the heading |
user | DashboardUser | demo user | Identity shown in the topbar account menu |
nav | string[] | demo links | Top-nav section labels; the first is active by default |
userItems | UserMenuItem[] | demo items | Rows in the account dropdown menu |
notifications | NotificationItem[] | demo items | Entries in the notifications popover |
rings | Ring[] | demo rings | The three activity-ring radial gauges |
stepsData | StepsData | demo series | Steps AreaChart data, keyed by range |
heartData | HeartPoint[] | demo series | Heart rate line chart series |
workouts | Workout[] | demo rows | Rows of the Recent workouts list |
totalBurned | string | "1,035 kcal" | Total burned summary value under the workouts list |
activeTime | string | "1h 45m" | Active time summary value under the workouts list |
restingRate | string | "Resting 58 bpm" | Muted label in the Heart rate card header |
The block-local data types:
type DashboardUser = {
name: string;
email: string;
avatar: string; // image URL, rendered with a plain <img>
};
type Ring = {
label: string;
value: number; // 0–100 percentage the gauge fills to
detail: string; // caption, e.g. "624 of 800 kcal"
color: string; // theme token, e.g. "var(--chart-1)"
};
type StepPoint = { t: string; steps: number };
// keyed by the "Today" | "Week" | "Month" range tabs
type StepsData = Record<"Today" | "Week" | "Month", StepPoint[]>;
type HeartPoint = { t: string; resting: number; active: number };
type Workout = {
name: string;
meta: string; // e.g. "5.2 km · 26 min"
kcal: string; // e.g. "412 kcal"
icon: LucideIcon; // Lucide component, e.g. Footprints
};The remaining props reuse the interfaces exported by the composed Beste components:
// from user-menu
type UserMenuItem = {
id: string;
label: string;
icon?: LucideIcon;
destructive?: boolean; // red row with a separator above it
};
// from notifications-menu
type NotificationItem = {
id: string;
title: string;
description?: string;
time: string;
icon?: LucideIcon;
unread?: boolean;
};A few cosmetic bits stay as constants in the installed file — edit them in place:
stepsConfig / heartConfig — series labels and colors for the steps and heart-rate charts (colors reference the --chart-1…--chart-5 theme tokens).ranges — the ["Today", "Week", "Month"] tab values that key stepsData.Installed alongside the block and composed inside it, each browsable on its own:
radial-chart — the three activity-ring gauges. /components/radial-chartarea-chart — the steps-over-time area chart. /components/area-chartline-chart — the resting/active heart-rate chart, with dots and a legend. /components/line-chartuser-menu — the account dropdown in the top bar (rendered compact). /components/user-menunotifications-menu — the bell dropdown listing recent alerts. /components/notifications-menuTabs control (TabsList + TabsTrigger) in the top bar. Changing it updates local range state, which live-swaps the steps area chart's dataset (from stepsData), recomputes the summed step total, and updates the range word in the "Steps this …" label. It defaults to Week and is hidden below the sm breakpoint.Overview, Activity, Nutrition, Sleep) track an activeLink state to highlight the current section; the whole nav is hidden below md.toLocaleString("en-US") and tabular-nums for stable number widths.main region scrolls (overflow-y-auto). Cards reflow from single-column to sm:grid-cols-3 (rings) and lg:grid-cols-3 (steps + workouts).cursor-pointer. The "View all workouts" button and the workout list are static demo UI with no wired handlers.<img>, so no next.config images.remotePatterns setup is needed for remote hosts."use client"), so it composes into any App Router page.h-screen); render it as the page root rather than nesting it inside padded containers.dashboard8
A personal-finance dashboard: sidebar + search topbar, a dark total-balance hero with account tiles, a budget radial gauge, income/expense/savings KPIs, a cashflow bar chart, a spending-mix donut, and a colored transactions table.
dashboard3
An e-commerce analytics dashboard: sidebar + search topbar, a four-up KPI row with period deltas, a net-profit area chart, a repeat-rate radial gauge, a busiest-weekday bar chart, and a best-selling products data table.
dashboard4
A project-management dashboard: sidebar + search topbar, a four-up project stats row with one highlighted card, a weekly project-analytics bar chart, a reminder card with a start-meeting action, a team-collaboration list, a project-progress radial gauge, and a focus time-tracker card.
dashboard7
A web-analytics console: sidebar + search topbar, a live realtime strip, an hourly sessions area chart, a daily-goal radial gauge, a channel-audience radar chart, a new-vs-returning line chart, and a sortable top-pages table.
dashboard12
An observability console with an icon rail and a live status ribbon: a service-health grid with status dots and latency/uptime, a latency line chart, a request-volume area chart, a 30-day uptime bar strip, and a recent-events feed. A 1h/24h/7d tab control live-swaps the chart data.
dashboard9
A sales-CRM dashboard: sidebar + search topbar, pipeline KPIs, a four-stage kanban board of deal cards with owners and hot-lead flags, a revenue-vs-forecast area chart, a team-quota radial gauge, and a rep leaderboard with progress bars.