Manage accounts, track plans, and monitor recurring revenue.
| Actions | |||||||
|---|---|---|---|---|---|---|---|
A Amara Okafor[email protected] | Northwind | Active | 24 | $480 | Jan 4, 2026 | ||
D Diego Santos[email protected] | Lumen | Trial | 3 | $0 | Feb 18, 2026 | ||
P Priya Nair[email protected] | Vertex | Active | 12 | $214 | Nov 22, 2025 | ||
T Tom Fischer[email protected] | Basecamp | Churned | 5 | $0 | Aug 9, 2025 | ||
L Lena Björk[email protected] | Aurora | Active | 40 | $639 | Mar 2, 2026 | ||
M Marcus Reed[email protected] | Hexa | Trial | 2 | $0 | Feb 27, 2026 | ||
Y Yuki Tanaka[email protected] | Meshlab | Active | 18 | $311 | Dec 14, 2025 |
10 row(s)
A customers management section powered by the data-table engine: avatar cells, status badges, sortable columns, keyword search, row selection with a live selected count, per-row action menus, pagination, and an export / add-customer toolbar.
A customer-management dashboard page built around a sortable, searchable customers table. Records show avatar cells, status badges, seat counts, and recurring revenue, all rendered by the Beste data-table component. It is a drop-in customers table dashboard for any Next.js / React admin, styled with shadcn/ui primitives for a clean admin table look.
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.
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/dashboard2?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/dashboard2?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/dashboard2.tsx, the reusable data-table engine to components/beste/component/data-table.tsx, and the shadcn/ui dependencies they need (button, badge, avatar, plus the table, checkbox, input, and dropdown-menu primitives the table composes).
The installed file exports dashboard2Demo alongside the block: the exact props behind the preview above, including the ten sample customer rows. Spread it to get a full-page customers table in one line.
import { Dashboard2, dashboard2Demo } from "@/components/beste/block/dashboard2";
export default function Page() {
return <Dashboard2 {...dashboard2Demo} />;
}Dashboard2 renders its own full-width <section> layout (heading, description, and the table), so it drops straight into a page. Replace dashboard2Demo with your own props once you are ready.
| Prop | Type | Default | Description |
|---|---|---|---|
heading | string | "Customers" | Page heading above the table |
description | string | "Manage accounts, track plans, and monitor recurring revenue." | Sub-heading intro text |
customers | Customer[] | built-in demo rows | The records rendered in the table. Omit to keep the ten bundled demo customers |
The block takes no className prop; the outer <section> layout is fixed. Each row is a Customer:
type Customer = {
id: string;
name: string;
email: string;
avatar: string; // image URL for the avatar cell
company: string;
status: "Active" | "Trial" | "Churned";
mrr: number; // monthly recurring revenue, rendered as $-prefixed
seats: number;
joined: string; // pre-formatted date label, e.g. "Jan 4, 2026"
};customers defaults to a built-in set of ten demo rows, so the block renders a full populated table with no props at all.
The columns and table behavior are defined in the block and driven by data-table:
seats, mrr) sort numerically, the rest sort with a locale string compare. Seats and MRR are right-aligned.name is the Customer column value, company, status, seats, mrr, joined). Typing resets to page 1.pageSize={7} with Previous / Next controls and a "Page x of y" indicator; the buttons disable at the first and last page.status renders as a colored Badge: emerald for Active, amber for Trial, muted for Churned, each with a dark-mode variant."use client") because the table manages sort, search, selection, and pagination state.Avatar (a plain <img> under the hood), so no next.config images.remotePatterns setup is needed for remote avatar hosts.