A three-pane helpdesk inbox: an icon rail, a searchable ticket list with status filters and unread markers, and a live conversation pane. Clicking a ticket loads its thread, and the composer actually appends replies (⌘/Ctrl+Enter to send).
A customer-support inbox dashboard: a three-pane helpdesk UI with an icon rail, a searchable ticket list filtered by status, and a live conversation panel with a working reply composer. Use it as the shell for a support inbox dashboard, a shared team inbox, or any Next.js / React customer support dashboard built on shadcn/ui.
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/dashboard10?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/dashboard10?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/dashboard10.tsx along with the shadcn/ui dependencies it needs (button, badge, avatar, input, textarea). It composes no separate Beste components, so it is self-contained: the ticket list, conversation view, and composer all live in the one file.
The installed file exports dashboard10Demo alongside the block: the exact props behind the preview above. Spread it to get the full inbox in one line. The block fills the viewport (h-screen), so give it a full-height route rather than nesting it inside a padded container.
import { Dashboard10, dashboard10Demo } from "@/components/beste/block/dashboard10";
export default function Page() {
return <Dashboard10 {...dashboard10Demo} />;
}Every prop is optional. Omit any and the block falls back to its built-in demo data, so <Dashboard10 /> renders a complete, populated support inbox out of the box. Pass just the props you want to override.
| Prop | Type | Default | Description |
|---|---|---|---|
brandName | string | "Relay" | Product name shown in the ticket-list header, above the unread count |
tickets | Ticket[] | demo tickets | Conversations seeding the list; also seeds the live reply state |
The block-local data types:
type Ticket = {
id: string;
name: string;
avatar: string; // image URL, rendered with a plain <img> via Avatar
subject: string;
preview: string; // truncated line under the subject in the list
time: string;
unread: boolean; // shows a primary dot and counts toward the header total
status: "Open" | "Pending" | "Closed";
messages: Message[];
};
type Message = {
id: string;
fromMe: boolean; // right-aligned primary bubble when true
author: string;
avatar?: string; // image URL for the sender (omitted for your own messages)
text: string;
time: string;
};tickets seeds React state: the reply composer appends new fromMe messages to the selected ticket, so passing a new array resets the thread you start from. The first ticket is selected on mount.
A few structural bits stay as constants in the installed file — edit them in place:
railItems — the left icon rail (inbox, starred, sent, archive), each with a Lucide icon, an optional active flag, and an optional numeric badge.statuses — the filter tabs above the list: ["All", "Open", "Pending", "Closed"]. "All" shows everything; the rest match a ticket's status.statusTone — the badge color classes per status (emerald for Open, amber for Pending, muted for Closed).All / Open / Pending / Closed) filter the list in place. All shows every ticket; the others show only matching statuses.unread: true, and each unread ticket shows a small primary dot next to its status badge.fromMe message to the selected ticket's thread. Send with the Send button or with ⌘/Ctrl+Enter; the button is disabled while the draft is empty or whitespace.sm and up, the conversation pane at md and up. Below md the block is the ticket list on its own; the list column widens at sm/lg."use client"), so it composes into any App Router page.h-screen with overflow-hidden). Place it on a dedicated route or a full-height layout rather than inside a scrolling, padded container.<img> (via the Avatar component), so no next.config images.remotePatterns setup is needed for remote hosts.Wiring the form up
This block ships the form markup only; state, validation, and submit are yours to add. Our guide wires the shadcn Field primitives to React Hook Form, TanStack Form, and Formisch on one field system.
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.
dashboard1
A full admin dashboard shell: collapsible icon sidebar, topbar with a ⌘K command palette and account menu, a greeting header, a three-up KPI row with trend badges, and a recent-orders data table. The frame the rest of the dashboard blocks drop into.
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.
dashboard2
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.
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.
dashboard13
A settings dashboard with a vertical section nav that live-switches panels: an editable profile, security with a two-factor toggle and active sessions, notification switches, a billing panel with plan/payment/invoices, and a team list with per-member role selects.