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.
A CRM sales-pipeline dashboard built with the App Router: a collapsible sidebar, a ⌘K command 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 sales-rep leaderboard with progress bars. It is a ready-made sales dashboard and CRM pipeline UI for any Next.js / React sales dashboard template, composed entirely from Beste UI blocks on top of 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/dashboard9?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/dashboard9?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/dashboard9.tsx, the Beste components it composes (sidebar-nav, user-menu, notifications-menu, area-chart, radial-chart) next to it, and the shadcn/ui dependencies they need (button, badge, avatar, sheet, command, dialog).
The installed file exports dashboard9Demo alongside the block: the exact props behind the preview above. Spread it to get the full dashboard in one line. The block fills its container's height (h-screen), so render it as the whole page.
import { Dashboard9, dashboard9Demo } from "@/components/beste/block/dashboard9";
export default function Page() {
return <Dashboard9 {...dashboard9Demo} />;
}Every prop is optional. Omit any and the block falls back to its built-in demo data, so <Dashboard9 /> renders a complete, populated sales dashboard out of the box. Pass just the props you want to override.
| Prop | Type | Default | Description |
|---|---|---|---|
brandName | string | "Forge" | Brand label next to the Target icon in the sidebar |
heading | string | "Sales pipeline" | Page heading above the board |
description | string | "Q1 deals across every stage." | Muted line under the heading |
user | DashboardUser | demo user | Identity shown in the topbar account menu |
navGroups | SidebarNavGroup[] | demo groups | Sidebar navigation, rendered in order as labeled groups |
commandGroups | CommandPaletteGroup[] | demo groups | Grouped entries in the ⌘K command palette |
userItems | UserMenuItem[] | demo items | Rows in the account dropdown menu |
notifications | NotificationItem[] | demo items | Entries in the notifications popover |
kpis | Kpi[] | demo cards | The KPI stat cards across the top |
stages | Stage[] | demo stages | Columns of the pipeline kanban board |
revenueData | RevenuePoint[] | demo series | Revenue vs. forecast area chart |
quotaValue | number | 82 | Percentage shown by the Team quota radial gauge |
quotaCaption | string | "$684K of $835K" | Muted caption under the gauge, pre-formatted |
reps | Rep[] | demo rows | Rows of the Rep leaderboard, each bar computed as closed / quota |
The block-local data types:
type Kpi = {
label: string;
value: string; // pre-formatted, e.g. "$1.24M"
};
type Deal = {
company: string;
value: string; // pre-formatted, e.g. "$42,000"
owner: string;
avatar: string; // image URL, rendered with a plain <img>
hot?: boolean; // shows the flame icon on the card
};
type Stage = {
id: string;
name: string;
total: string; // pre-formatted column total, e.g. "$320K"
accent: string; // dot color class, e.g. "bg-emerald-500"
deals: Deal[];
};
type Rep = {
name: string;
avatar: string; // image URL, rendered with a plain <img>
closed: number; // in $K
quota: number; // in $K; bar width is closed / quota
};
type RevenuePoint = { month: string; closed: number; forecast: number };
type DashboardUser = {
name: string;
email: string;
avatar: string; // image URL, rendered with a plain <img>
};The remaining props reuse the interfaces exported by the composed Beste components:
// from sidebar-nav
type SidebarNavGroup = {
label?: string; // muted uppercase group heading (hidden when collapsed)
items: {
id: string;
label: string;
icon?: LucideIcon;
badge?: string | number; // small trailing count/tag, e.g. 32
href?: string; // renders an <a> instead of a <button>
}[];
};
// 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;
};
// block-local
type CommandPaletteGroup = {
heading: string;
items: { id: string; label: string; icon?: LucideIcon }[];
};A few cosmetic bits stay as constants in the installed file — edit them in place:
revenueConfig — series labels and colors for the Revenue vs. forecast area chart (colors reference the --chart-1…--chart-5 theme tokens).This block composes these Beste UI components (installed automatically):
sidebar-nav in place. On screens below md, the sidebar is hidden and the panel icon opens it in a slide-over Sheet; tapping any nav item closes that sheet.closed / quota ratio.quotaValue (default 82%) with the quotaCaption line under it."use client"), so it composes into any App Router page.h-screen and its own internal scroll area, so give it the whole viewport rather than nesting it inside padded page chrome.<img>, so no next.config images.remotePatterns setup is needed for remote hosts.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.
dashboard6
A project detail dashboard for staffing: sidebar + action topbar with a project actions menu, a project header with status pills, a five-up stat strip with project meta, functional pipeline sub-tabs, a search / recently-active toggle / filters-menu toolbar that live-filters the grid, and a responsive grid of nine talent cards with wishlist and invite toggles.
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.
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.
dashboard11
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.