Ledger Dashboard
A complete SaaS dashboard: collapsible sidebar, KPIs with sparklines, a revenue chart that morphs between ranges, and a sortable transactions table.
Overview
A finished app shell rather than a mock. The sidebar collapses to icons with a spring-loaded marker that slides between items, and becomes a drawer with a scrim on phones. The top bar has a ⌘K search field and a notification bell; the content opens with a greeting and a 7D / 30D / 90D range switch.
Four KPI cards draw their sparklines in, coloured by whether the movement is good news. The revenue chart tweens between ranges point by point instead of redrawing, and tracking the pointer shows a crosshair, a marker and that day’s figure in the header. Top customers fill their bars in order, the activity feed eases in, and the transactions table sorts by customer, date or amount with real aria-sort.
Everything is driven by props with sensible sample data, uses the page font and the .dark class, and is one CSS file with no chart library. Under prefers-reduced-motion it renders in its final state.
When to use
- Starting a whole site or app from a finished, consistent base.
When not to use
- Adding one section to an existing design.
Installation
pnpm dlx shadcn@latest add https://sundaeui.dev/r/ledger-dashboard.jsonnpx shadcn@latest add https://sundaeui.dev/r/ledger-dashboard.jsonyarn dlx shadcn@latest add https://sundaeui.dev/r/ledger-dashboard.jsonbunx --bun shadcn@latest add https://sundaeui.dev/r/ledger-dashboard.jsonWorks in any React project. Files are written to components/sundae/. Read the source in the stage’s Code view. Pro assets need a personal token. See authenticated installs.
- No dependencies beyond React 18 or later.
- Copy ledger-dashboard.tsx and ledger-dashboard.css into components/sundae/.
- The CSS file is imported by the component, so no extra configuration is needed.
- Import the component and use it as shown below.
Usage
import { LedgerDashboard } from '@/components/sundae/ledger-dashboard'
<LedgerDashboard
workspace="Northwind"
user={{ name: 'Ada Lindqvist', initials: 'AL' }}
greeting="Good morning, Ada"
revenue={dailyRevenue} // number[], oldest first, 90+ points
transactions={recentInvoices} // { id, customer, amount, status, date }[]
/>Props
| Prop | Type | Default |
|---|---|---|
workspaceName in the sidebar header. | string | 'Northwind' |
userSigned-in user in the sidebar footer. | { name: string; initials: string } | — |
greetingPage heading. | string | — |
kpisFour cards read best. up=false marks a bad-news delta. | { label; value; delta; up; series }[] | — |
revenueDaily revenue, oldest first, at least 90 points. | number[] | — |
customersTop customers, largest first. | { name: string; amount: number }[] | — |
activityActivity feed rows. | { who: string; what: string; when: string }[] | — |
transactionsRows for the sortable table. | LedgerTransaction[] | — |
currencyISO currency for all money values. | string | 'USD' |
Accessibility
- Landmarks: aside (navigation), header, main; the current page is marked with aria-current.
- The range switch is a radiogroup; sortable headers expose aria-sort.
- The chart is an image with a text label summarising the total; the figure in the header updates as you hover.
- On phones the sidebar is a drawer with a dismissible scrim.
Customization
- Colours are --ld-* custom properties on .sd-ld; dark values under .dark.
- Sidebar width is --ld-side (236px, 68px collapsed).
- Swap the icon paths in P for your icon set, or render your own.
FAQ
- Is Ledger Dashboard free?
- Ledger Dashboard is part of Sundae Pro. The live preview is open to everyone; the source installs with a Pro account.
- How do I install Ledger Dashboard?
- Run npx shadcn@latest add https://sundaeui.dev/r/ledger-dashboard.json. The files are written to components/sundae/. It has no dependencies beyond React 18 or later.
- Does Ledger Dashboard support keyboard and screen readers?
- Landmarks: aside (navigation), header, main; the current page is marked with aria-current. The range switch is a radiogroup; sortable headers expose aria-sort.
- Does Ledger Dashboard respect reduced motion?
- Yes. With prefers-reduced-motion set, decorative motion is removed and state changes are instant.
More like this
All templates →- Pro
Northwind Landing
Templates · Refined Atelier
Templates · Editorial- Pro
Notification Center
Components · Refined Stacked Bars
Data · RefinedPulse KPI
Data · UnderstatedData Table
Data · Understated