A complete app shell, animated analytics with switchable ranges, KPI grids, an orders table and activity widgets — assemble a full admin in minutes.
Complete App Shell
Revenue
$48.2k
↑ 18.2%
Active users
12,840
↑ 9.4%
Orders
1,204
↑ 4.1%
Churn
1.9%
↓ 0.3%
Revenue trend
Last 12 weeksTop products
Sidebar, topbar, KPI row, chart and table composed into one working dashboard screen.
| 1 | <div "color:#79c0ff">className="flex h-[640px] overflow-hidden bg-[#07070f] text-sm"> |
| 2 | {/* ── Sidebar ── */} |
| 3 | <aside "color:#79c0ff">className="hidden w-56 flex-col border-r border-white/8 bg-white/[0.02] p-3 lg:flex"> |
| 4 | <div "color:#79c0ff">className="flex items-center gap-2.5 px-2 py-2"> |
| 5 | <span "color:#79c0ff">className="flex h-8 w-8 items-center justify-center rounded-xl bg-gradient-to-br from-violet-600 to-indigo-600 text-sm font-black text-white">N</span> |
| 6 | <span "color:#79c0ff">className="font-extrabold text-white">Nebula</span> |
| 7 | </div> |
| 8 | <nav "color:#79c0ff">className="mt-5 space-y-1"> |
| 9 | {nav.map((n, i) => ( |
| 10 | <a "color:#79c0ff">key={n.label} "color:#79c0ff">href="#" |
| 11 | "color:#79c0ff">className={"flex items-center gap-3 rounded-xl px-3 py-2.5 font-medium transition " + |
| 12 | (i === 0 ? "bg-gradient-to-r from-violet-600/90 to-indigo-600/90 text-white shadow-lg shadow-violet-500/20" |
| 13 | : "text-white/45 hover:bg-white/5 hover:text-white")}> |
| 14 | <n.icon "color:#79c0ff">className="h-4 w-4" /> {n.label} |
| 15 | {n.badge && <span "color:#79c0ff">className="ml-auto rounded-full bg-white/15 px-1.5 text-[10px] font-bold">{n.badge}</span>} |
| 16 | </a> |
| 17 | ))} |
| 18 | </nav> |
| 19 | </aside> |
| 20 | |
| 21 | {/* ── Main ── */} |
| 22 | <div "color:#79c0ff">className="flex min-w-0 flex-1 flex-col"> |
| 23 | {/* topbar */} |
| 24 | <header "color:#79c0ff">className="flex items-center gap-4 border-b border-white/8 px-6 py-3.5"> |
| 25 | <h1 "color:#79c0ff">className="font-extrabold text-white">Overview</h1> |
| 26 | <input "color:#79c0ff">placeholder="Search… ⌘K" |
| 27 | "color:#79c0ff">className="ml-auto w-56 rounded-xl border border-white/10 bg-white/[0.04] px-3.5 py-2 text-xs text-white placeholder-white/30 outline-none focus:border-violet-400/50" /> |
| 28 | <span "color:#79c0ff">className="h-8 w-8 rounded-full bg-gradient-to-br from-violet-500 to-indigo-600" /> |
| 29 | </header> |
| 30 | |
| 31 | <main "color:#79c0ff">className="flex-1 space-y-5 overflow-y-auto p-6"> |
| 32 | {/* KPI row */} |
| 33 | <div "color:#79c0ff">className="grid grid-cols-2 gap-4 xl:grid-cols-4"> |
| 34 | {kpis.map((k) => ( |
| 35 | <div "color:#79c0ff">key={k.label} "color:#79c0ff">className="rounded-2xl border border-white/8 bg-white/[0.03] p-4"> |
| 36 | <p "color:#79c0ff">className="text-[11px] uppercase tracking-wider text-white/35">{k.label}</p> |
| 37 | <p "color:#79c0ff">className="mt-1 text-2xl font-extrabold text-white">{k.value}</p> |
| 38 | <p "color:#79c0ff">className={"mt-0.5 text-[11px] font-bold " + (k.up ? "text-emerald-400" : "text-rose-400")}>{k.delta}</p> |
| 39 | </div> |
| 40 | ))} |
| 41 | </div> |
| 42 | {/* chart + activity … */} |
| 43 | </main> |
| 44 | </div> |
| 45 | </div> |
Analytics Chart Block
Revenue
$128,420↑ 18.2%
Switch the range — bars re-animate with new data. Hover a bar for its value tooltip.
| 1 | function AnalyticsChart() { |
| 2 | const ranges = { |
| 3 | "7D": [42, 58, 45, 70, 62, 84, 76], |
| 4 | "30D": [35, 48, 40, 55, 50, 66, 58, 72, 64, 80, 70, 88], |
| 5 | "90D": [30, 42, 38, 52, 46, 60, 55, 68, 62, 76, 70, 85, 78, 92], |
| 6 | }; |
| 7 | const [range, setRange] = useState<"7D" | "30D" | "90D">("30D"); |
| 8 | const data = ranges[range]; |
| 9 | |
| 10 | return ( |
| 11 | <div "color:#79c0ff">className="rounded-2xl border border-white/10 bg-white/[0.02] p-6"> |
| 12 | <div "color:#79c0ff">className="flex flex-wrap items-center justify-between gap-3"> |
| 13 | <div> |
| 14 | <p "color:#79c0ff">className="text-sm font-bold text-white">Revenue</p> |
| 15 | <p "color:#79c0ff">className="mt-0.5 text-2xl font-extrabold text-white">$128,420 |
| 16 | <span "color:#79c0ff">className="ml-2 text-xs font-bold text-emerald-400">↑ 18.2%</span> |
| 17 | </p> |
| 18 | </div> |
| 19 | {/* range tabs */} |
| 20 | <div "color:#79c0ff">className="flex rounded-xl border border-white/10 bg-white/[0.04] p-1"> |
| 21 | {(["7D", "30D", "90D"] as const).map((r) => ( |
| 22 | <button "color:#79c0ff">key={r} "color:#79c0ff">onClick={() => setRange(r)} |
| 23 | "color:#79c0ff">className={"rounded-lg px-3 py-1.5 text-xs font-bold transition " + |
| 24 | (range === r ? "bg-violet-600 text-white" : "text-white/40 hover:text-white")}> |
| 25 | {r} |
| 26 | </button> |
| 27 | ))} |
| 28 | </div> |
| 29 | </div> |
| 30 | |
| 31 | {/* bars re-mount on range change → re-animate */} |
| 32 | <div "color:#79c0ff">key={range} "color:#79c0ff">className="mt-6 flex h-44 items-end gap-2"> |
| 33 | {data.map((h, i) => ( |
| 34 | <div "color:#79c0ff">key={i} "color:#79c0ff">className="group relative flex-1"> |
| 35 | <div "color:#79c0ff">className="origin-bottom rounded-t-lg bg-gradient-to-t from-violet-600 to-fuchsia-500 transition-colors group-hover:from-violet-500 group-hover:to-fuchsia-400" |
| 36 | "color:#79c0ff">style={{ height: h * 1.7 + "px", animation: "barGrow .6s " + i * 0.04 + "s both" }} /> |
| 37 | {/* tooltip */} |
| 38 | <span "color:#79c0ff">className="pointer-events-none absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-md bg-black/85 px-2 py-1 text-[10px] font-bold text-white opacity-0 transition group-hover:opacity-100"> |
| 39 | ${h}k |
| 40 | </span> |
| 41 | </div> |
| 42 | ))} |
| 43 | </div> |
| 44 | </div> |
| 45 | ); |
| 46 | } |
Recent Orders Table
Recent orders
| Order | Product | Customer | Total | Status | |
|---|---|---|---|---|---|
| #4821 | Nebula ANC Pro | Priya S. | $249 | Delivered | |
| #4820 | Pulse Keyboard | Rahul M. | $189 | Processing | |
| #4819 | Orbit Mouse | Sara A. | $79 | Shipped | |
| #4818 | Flux Monitor 27" | Dev K. | $429 | Cancelled |
Order IDs, product cells, animated status pills and row actions — with a live “processing” state.
| 1 | const orders = [ |
| 2 | { id: "#4821", product: "Nebula ANC Pro", customer: "Priya S.", total: "$249", status: "Delivered" }, |
| 3 | { id: "#4820", product: "Pulse Keyboard", customer: "Rahul M.", total: "$189", status: "Processing" }, |
| 4 | { id: "#4819", product: "Orbit Mouse", customer: "Sara A.", total: "$79", status: "Shipped" }, |
| 5 | { id: "#4818", product: "Flux Monitor 27\"", customer: "Dev K.", total: "$429", status: "Cancelled" }, |
| 6 | ]; |
| 7 | |
| 8 | const statusStyle: Record<string, string> = { |
| 9 | Delivered: "bg-emerald-500/10 text-emerald-400 ring-emerald-400/25", |
| 10 | Processing: "bg-violet-500/10 text-violet-300 ring-violet-400/25", |
| 11 | Shipped: "bg-sky-500/10 text-sky-300 ring-sky-400/25", |
| 12 | Cancelled: "bg-rose-500/10 text-rose-300 ring-rose-400/25", |
| 13 | }; |
| 14 | |
| 15 | <table "color:#79c0ff">className="w-full text-sm"> |
| 16 | <thead> |
| 17 | <tr "color:#79c0ff">className="border-b border-white/8 text-left text-[11px] font-semibold uppercase tracking-wider text-white/30"> |
| 18 | <th "color:#79c0ff">className="px-5 py-3">Order</th><th>Product</th><th>Customer</th><th>Total</th><th>Status</th><th /> |
| 19 | </tr> |
| 20 | </thead> |
| 21 | <tbody> |
| 22 | {orders.map((o) => ( |
| 23 | <tr "color:#79c0ff">key={o.id} "color:#79c0ff">className="border-b border-white/5 transition-colors hover:bg-white/[0.03]"> |
| 24 | <td "color:#79c0ff">className="px-5 py-3.5 font-mono text-xs text-violet-300">{o.id}</td> |
| 25 | <td "color:#79c0ff">className="py-3.5 font-semibold text-white">{o.product}</td> |
| 26 | <td "color:#79c0ff">className="py-3.5 text-white/55">{o.customer}</td> |
| 27 | <td "color:#79c0ff">className="py-3.5 font-semibold text-white/80">{o.total}</td> |
| 28 | <td "color:#79c0ff">className="py-3.5"> |
| 29 | <span "color:#79c0ff">className={"inline-flex items-center gap-1.5 rounded-full px-2.5 py-1 text-[11px] font-semibold ring-1 ring-inset " + statusStyle[o.status]}> |
| 30 | {o.status === "Processing" && <span "color:#79c0ff">className="h-1.5 w-1.5 animate-pulse rounded-full bg-violet-400" />} |
| 31 | {o.status} |
| 32 | </span> |
| 33 | </td> |
| 34 | <td "color:#79c0ff">className="py-3.5 pr-5 text-right"> |
| 35 | <button "color:#79c0ff">className="rounded-lg px-2 py-1 text-white/30 hover:bg-white/8 hover:text-white">⋯</button> |
| 36 | </td> |
| 37 | </tr> |
| 38 | ))} |
| 39 | </tbody> |
| 40 | </table> |
Activity Feed & Team Widgets
Activity
LIVEAyush deployed v2.4.0 to production
2 min ago
Lumina Labs upgraded to the Pro plan ($180/yr)
26 min ago
Priya commented on PR #482
1 h ago
System auto-scaled workers 2 → 4
3 h ago
Team
Ayush Kumar
Design engineer
Priya Sharma
Frontend
Rahul Mehta
Backend
Sara Ali
Product
A live activity stream paired with a team-status card — the right-rail duo of every dashboard.
| 1 | {/* activity feed */} |
| 2 | <div "color:#79c0ff">className="rounded-2xl border border-white/10 bg-white/[0.02] p-5"> |
| 3 | <p "color:#79c0ff">className="text-sm font-bold text-white">Activity</p> |
| 4 | <div "color:#79c0ff">className="mt-4 space-y-4"> |
| 5 | {feed.map((f) => ( |
| 6 | <div "color:#79c0ff">key={f.text} "color:#79c0ff">className="flex items-start gap-3"> |
| 7 | <span "color:#79c0ff">className={"mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-xs " + f.chip}> |
| 8 | {f.icon} |
| 9 | </span> |
| 10 | <div "color:#79c0ff">className="min-w-0"> |
| 11 | <p "color:#79c0ff">className="text-xs leading-relaxed text-white/70"> |
| 12 | <b "color:#79c0ff">className="text-white">{f.who}</b> {f.text} |
| 13 | </p> |
| 14 | <p "color:#79c0ff">className="mt-0.5 text-[10px] text-white/30">{f.time}</p> |
| 15 | </div> |
| 16 | </div> |
| 17 | ))} |
| 18 | </div> |
| 19 | </div> |
| 20 | |
| 21 | {/* team status */} |
| 22 | <div "color:#79c0ff">className="rounded-2xl border border-white/10 bg-white/[0.02] p-5"> |
| 23 | <p "color:#79c0ff">className="text-sm font-bold text-white">Team</p> |
| 24 | <div "color:#79c0ff">className="mt-4 space-y-3"> |
| 25 | {team.map((m) => ( |
| 26 | <div "color:#79c0ff">key={m.name} "color:#79c0ff">className="flex items-center gap-3"> |
| 27 | <div "color:#79c0ff">className="relative"> |
| 28 | <span "color:#79c0ff">className={"flex h-9 w-9 items-center justify-center rounded-full bg-gradient-to-br text-[10px] font-black text-white " + m.g}> |
| 29 | {m.initials} |
| 30 | </span> |
| 31 | <span "color:#79c0ff">className={"absolute -bottom-0.5 -right-0.5 h-3 w-3 rounded-full ring-2 ring-[#07070f] " + |
| 32 | (m.online ? "bg-emerald-400" : "bg-white/25")} /> |
| 33 | </div> |
| 34 | <div "color:#79c0ff">className="min-w-0 flex-1"> |
| 35 | <p "color:#79c0ff">className="text-xs font-semibold text-white">{m.name}</p> |
| 36 | <p "color:#79c0ff">className="text-[10px] text-white/35">{m.role}</p> |
| 37 | </div> |
| 38 | <span "color:#79c0ff">className="text-[10px] text-white/30">{m.status}</span> |
| 39 | </div> |
| 40 | ))} |
| 41 | </div> |
| 42 | </div> |