Account Settings

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.

PRO

Dashboard13: Account Settings

A full-height account settings page for an app or SaaS dashboard: a vertical settings nav that live-switches panels covering an editable profile, security, notifications, billing, and team management. Use it as a drop-in settings dashboard UI, a Next.js / React account settings template built on shadcn/ui, with forms, toggles, and per-member role selects already wired up.

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.

Installation

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

bash
npx shadcn add "https://ui.beste.co/r/dashboard13?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/dashboard13?email=YOUR_EMAIL&license_key=YOUR_KEY"

This installs the block to components/beste/block/dashboard13.tsx, the Beste user-menu component it composes to components/beste/component/user-menu.tsx, and the shadcn/ui dependencies they need (button, badge, avatar, input, label, textarea, switch, select, separator).

Quick start

The installed file exports dashboard13Demo alongside the block: the exact props behind the preview above. Spread it to get the settings page in one line. It fills its parent, so drop it into a full-height layout (or a h-screen wrapper).

tsx
import { Dashboard13, dashboard13Demo } from "@/components/beste/block/dashboard13";

export default function Page() {
  return <Dashboard13 {...dashboard13Demo} />;
}

Props

Every prop is optional. Omit any and the block falls back to its built-in demo data, so <Dashboard13 /> renders a complete, populated settings page out of the box. Pass just the props you want to override.

PropTypeDefaultDescription
brandNamestring"Nimbus"Wordmark shown in the top bar, next to the "· Settings" label
userDashboardUserdemo userSigned-in identity, used in the top-bar menu and as the Profile form's name/email defaults
biostringdemo bioDefault value of the Profile panel's bio textarea
userItemsUserMenuItem[]demo itemsRows in the top-bar account dropdown menu
notifRowsNotifRow[]demo rowsToggle rows in the Notifications panel
sessionsSession[]demo sessionsThe Active sessions list in the Security panel
teamMembersTeamMember[]demo membersThe Team roster, each with a per-member role select
billingBillingInfodemo billingPlan and payment-method summary in the Billing panel; omitted fields keep their demo values
invoicesInvoice[]demo invoicesThe billing-history rows in the Billing panel

The block-local data types:

ts
type DashboardUser = {
  name: string;
  email: string;
  avatar: string; // image URL, rendered with the shadcn Avatar's <img>
};

type NotifRow = {
  key: string; // maps to an entry in the notification switch state
  label: string;
  desc: string;
};

type Session = {
  device: string;
  meta: string;
  icon: LucideIcon;
  current: boolean; // true renders a "Current" badge instead of "Revoke"
};

type TeamMember = {
  name: string;
  email: string;
  avatar: string;
  role: string; // one of the Select options: "owner" | "admin" | "member"
};

type Invoice = { id: string; date: string; amount: string };

type BillingInfo = {
  plan?: string; // "Scale plan"
  priceCaption?: string; // "$49 monthly · renews Apr 1, 2026"
  card?: string; // "Visa ending 4242"
  cardExpires?: string; // "Expires 08 · 2028"
};

The account menu reuses the interface exported by the composed Beste component:

ts
// from user-menu
type UserMenuItem = {
  id: string;
  label: string;
  icon?: LucideIcon;
  destructive?: boolean; // red row with a separator above it
};

Still internal

A few structural and inline bits stay as constants in the installed file — edit them in place:

Components

Behavior notes

Requirements

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.

More Dashboard blocks

View all Dashboard
PRO

dashboard5

Booking Workspace

A split booking dashboard: a left panel with a top nav, functional tab bar, a Manage menu, a bento of revenue/occupancy/metric tiles and an image, toggleable active-booking cards, and a room-availability timeline; a right rail with a real month calendar (selectable days, booked-day dots) and a time-slotted day agenda.

PRO

dashboard8

Finance Overview

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.

PRO

dashboard1

Admin Shell

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.

PRO

dashboard2

Customers Table

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.

PRO

dashboard12

Service Monitoring

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.

PRO

dashboard10

Support Inbox

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).