dashboard pattern
Dashboard overview
Authenticated home — KPIs, recent activity, quick actions.
When to use it
The default landing screen after sign-in.
- User sees status at a glance
- One-tap to most common action
- Recent activity is scannable
Layout regions
- header
- sidebar
- main
- kpis
- activity
- quick-actions
States
- default
- loading
- empty
- error
Example
Next.js — Server Component with parallel data fetch
// app/(app)/dashboard/page.tsx — Server Component
import { Suspense } from 'react'
import { fetchKpis, fetchActivity, fetchPlan } from '@/lib/api.server'
export default async function Dashboard() {
const [kpis, activity, plan] = await Promise.all([
fetchKpis(), fetchActivity({ limit: 10 }), fetchPlan(),
])
return (
<DashboardLayout>
<Stack size="6">
<h1 className="text-largeTitle">Dashboard</h1>
<SubscriptionBanner plan={plan} />
<Grid cols={4}>
{kpis.map((k) => <KPI key={k.id} title={k.label} value={k.value} sparkline={k.series} period="7d" />)}
</Grid>
<Suspense fallback={<Card><CardContent className="h-64 animate-pulse bg-muted" /></Card>}>
<Card><CardHeader><CardTitle>Recent activity</CardTitle></CardHeader><CardContent><List>{activity.map((a) => <ListItem key={a.id} title={a.title} subtitle={relative(a.time)} />)}</List></CardContent></Card>
</Suspense>
</Stack>
</DashboardLayout>
)
}The full Dashboard overview pattern specifies 2 exact microcopy strings, 1 motion spec, 4 composition rules, 2 more code examples — all gated behind the full recipe. Get the full recipe.