Dashboard composition

A real-world product page composed of letbe-ds primitives — no app code, no framework, and a local <style> block only for the full-bleed page frame and the section and rail headings. Demonstrates how the Charts suite (Stat, Sparkline, Bar List, Donut, Bar Chart, Line Chart) composes with Card, Table, Resizable, Tree, and Layout primitives into an admin overview.

a11y (built in): no chart here is a silent graphic — Sparkline, Bar Chart, Line Chart and Donut each render a single role="img" node whose aria-label is a generated label/value summary of the series. The nav rail is a real role="tree" (treeitem / group / aria-level / aria-expanded, roving tabindex): ↓↑ move, →← expand and collapse, Home/End jump, Enter selects. The Resizable splitters are focusable role="separator" handles with aria-valuenow/min/max that resize on ←→, PageUp/PageDown and Home/End, and the live-visitor badge drops its pulsing dot under prefers-reduced-motion.

Usage: One script — core js/lb.js — runs this whole page: the Resizable shell, Tree rail, Popover filters, every chart and the Bar Lists auto-init from their data-lb-* attributes on DOMContentLoaded, with no js/components/* modules required. The numbers here are static inline JSON; a live dashboard pushes updates through the chart instances (el._lbLineChart.setData(cfg), el._lbDonut.setData(data), …) and wires navigation off lb-tree-select (bubbles, detail.value / label) plus pane-size persistence off lb-resizable-change (bubbles, detail.sizes). The filter-row popovers ship unwired — bring your own range/comparison state (same rule as the media player's engine). The local <style> block is page furniture (full-bleed frame, rail titles), not part of the DS contract.

Two compositions: the app-frame demo below (Resizable shell + Tree rail), and the Store overview commerce skeleton further down — the KPI strip → time-series → breakdowns → table layout. Pieces in play: Resizable shell, Tree nav rail, Grid KPI strip, Card surfaces, Stat + Sparkline, Line Chart, Bar Chart, Bar List, Donut, Table.


Workspace

  • Insights
    • Overview
    • Customers
    • Revenue
    • Traffic
  • Reports
    • Weekly summary
    • Quarterly review
  • Settings

Overview

MRR
$54,210
8.1% vs last month
Customers
2,184
64 net new
Conversion
4.2%
0.3 pp
Sessions
31.4k
4.8%
Revenue — last 90 days
Free vs Pro vs Enterprise · daily snapshot
Weekly active users
Plan breakdown
Traffic sources
Last 30 days
  • Direct42%
  • Search28%
  • Referral20%
  • Social10%
Top customers
By MRR · last 30 days
Customer MRR Δ
Acme Corp$12,800↑ 4.2%
Globex$8,210↑ 1.8%
Initech$6,540↓ 0.6%
Hooli$5,120↑ 2.1%
Pied Piper$3,840↑ 12.4%
Top pages
By sessions · last 7 days
  • /dashboard2,486
  • /projects1,190
  • /settings864
  • /billing412
  • /integrations208

Live

Online
312
Pending
14
Errors
2
5

API uptime

99.94%
30-day

Activity

  • Sign-ups124
  • Upgrades86
  • Cancellations42

Store overview — the commerce skeleton

The analytics layout: trading, commerce and analytics dashboards converge on KPI strip → big time-series → breakdowns → table, and this page follows that order. Everything here is existing vocabulary: the filter row (Popover dropdowns + the --pulse live badge), KPI Stat cards with sparklines, the revenue chart using the dashed comparison series ("previous period" as context, not competition), a channel donut · top-products bar list · goal ring (Donut center slot), two axis-chart cards, and the canonical recent-customers table.

42 live visitors
Revenue
$128,940
12.4%vs prev. period
Orders
3,214
6.1%vs prev. period
Avg. order value
$40.11
1.8%vs prev. period
Visitors
84.2k
9.3%vs prev. period
Revenue
This period vs previous — the dashed line is context, not competition
Sales by channel
  • Store46%
  • Marketplace27%
  • Social17%
  • Wholesale10%
Top products
  • Signature hoodie$18.4k
  • Field jacket$14.1k
  • Canvas tote$9.8k
  • Wool beanie$7.2k
  • Enamel mug$5.6k
Monthly goal
$150k target
86%
of goal
Orders by country
Orders by day
Recent customers
Customer Status Country Orders Spent
Ines Duarte
RepeatPortugal12$1,486
Tom Novak
NewCzechia1$86
Aya Sato
RepeatJapan7$924
Amir Said
At riskMorocco4$312
Lea Fischer
RepeatGermany9$1,102