Dashboard / data-dense: UI design prompt
Palette, type rules and a pasteable prompt for dashboard / data-dense. Also called data-dense UI, admin dashboard design, analytics UI, Bloomberg terminal style, dense enterprise UI, Tufte style. 1980s terminals; web 2010 onward (Google Analytics, Datadog, Grafana, Bloomberg).
Traits
- small type (12-13px), tight spacing (4px grid), many rows per screen
- tables with right-aligned tabular numbers, zebra striping or hairlines
- sparklines, small multiples, stat tiles with delta arrows
- muted greys with a strict semantic palette (green up, red down, amber warn, blue info)
- collapsible sidebars, dense toolbars, keyboard shortcuts
- information density is the feature; whitespace is spent carefully
- motion minimal: 100-150ms, only on state changes; live values tick without animation
Palette
#ffffff page (or #0f1117 dark), #f6f7f9 surface, #1f2328 text, #6e7781 muted, #d0d7de line, #1f6feb info, #1a7f37 up, #cf222e down, #9a6700 warn
Type
IBM Plex Sans, Geist or Source Sans 3 at 13px with font-variant-numeric: tabular-nums; JetBrains Mono or IBM Plex Mono for IDs and codes at 12px; headings 600 at 16-20px only
Do
- set every number in tabular figures, right-aligned, with consistent decimals and unit suffixes
- use a 4px spacing grid and 32px row height; sidebars 240px, collapsible to 56px
- reserve colour for meaning: green, red, amber, blue each mean exactly one thing site-wide
Don't
- do not use big hero type or marketing padding inside the product; 20px is the largest heading
- do not animate charts on load beyond 300ms; users wait for data, not for effects
- do not put more than one accent decoration per screen; the data is the decoration
Known for it: Bloomberg Terminal, Grafana, Datadog, Linear (list views), GitHub, Stripe dashboard
CSS seed
:root {
--bg: #ffffff;
--surface: #f6f7f9;
--fg: #1f2328;
--muted: #6e7781;
--line: #d0d7de;
--info: #1f6feb;
--up: #1a7f37;
--down: #cf222e;
--radius: 6px;
--font: 'IBM Plex Sans',sans-serif;
--font-mono: 'JetBrains Mono',monospace
}
Prompt
Build the app as a data-dense dashboard. Background #ffffff, surfaces #f6f7f9, text #1f2328, muted #6e7781, lines #d0d7de, semantic colours only: info #1f6feb, up #1a7f37, down #cf222e, warn #9a6700. Font IBM Plex Sans 13px with font-variant-numeric tabular-nums everywhere, headings 600 at 20/16/14px, JetBrains Mono 12px for IDs. Spacing on a 4px grid; table rows 32px tall with 1px #d0d7de hairlines, numbers right-aligned with fixed decimals, sortable headers 12px uppercase 0.04em in muted. Layout: 240px left sidebar (collapsible to 56px icons), 48px top toolbar with search and a date-range control, main area a grid of stat tiles (6 across, 88px tall, radius 6px, 1px border, value 24px 600, delta with an arrow in up or down colour, 40px sparkline) above a full-width table and two chart panels. Charts: 1.5px lines, no area fills, gridlines #eaeef2, tooltips 12px. Buttons 28px tall, radius 6px. Motion: 120ms on state changes only; values update in place without animation.
For design.md, .cursorrules or AGENTS.md
## Design direction
Build the app as a data-dense dashboard. Background #ffffff, surfaces #f6f7f9, text #1f2328, muted #6e7781, lines #d0d7de, semantic colours only: info #1f6feb, up #1a7f37, down #cf222e, warn #9a6700. Font IBM Plex Sans 13px with font-variant-numeric tabular-nums everywhere, headings 600 at 20/16/14px, JetBrains Mono 12px for IDs. Spacing on a 4px grid; table rows 32px tall with 1px #d0d7de hairlines, numbers right-aligned with fixed decimals, sortable headers 12px uppercase 0.04em in muted. Layout: 240px left sidebar (collapsible to 56px icons), 48px top toolbar with search and a date-range control, main area a grid of stat tiles (6 across, 88px tall, radius 6px, 1px border, value 24px 600, delta with an arrow in up or down colour, 40px sparkline) above a full-width table and two chart panels. Charts: 1.5px lines, no area fills, gridlines #eaeef2, tooltips 12px. Buttons 28px tall, radius 6px. Motion: 120ms on state changes only; values update in place without animation.
## Tokens
:root { --bg:#ffffff; --surface:#f6f7f9; --fg:#1f2328; --muted:#6e7781; --line:#d0d7de; --info:#1f6feb; --up:#1a7f37; --down:#cf222e; --radius:6px; --font:'IBM Plex Sans',sans-serif; --font-mono:'JetBrains Mono',monospace }
Keep hover and focus-visible states on every interactive element. Do not add a CSS framework.