@jaimevalasek/aioson 1.30.0 → 1.30.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/docs/design-previews/cognitive-core-ui-auth.html +95 -0
- package/docs/design-previews/cognitive-core-ui-kanban.html +231 -0
- package/docs/design-previews/cognitive-core-ui-list-detail.html +174 -0
- package/docs/design-previews/cognitive-core-ui-preview.css +1315 -0
- package/docs/design-previews/cognitive-core-ui-settings.html +142 -0
- package/docs/design-previews/cognitive-core-ui-website.html +190 -1009
- package/docs/design-previews/cognitive-core-ui.html +281 -463
- package/docs/design-previews/index.html +83 -31
- package/package.json +1 -1
- package/src/constants.js +578 -514
- package/template/.aioson/docs/integrations/dashboard-app-form-publish-mapping.md +183 -0
- package/template/.aioson/docs/play/README.md +74 -0
- package/template/.aioson/docs/play/agent-usage-guide.md +112 -0
- package/template/.aioson/docs/play/app-compatibility-guide.md +117 -0
- package/template/.aioson/docs/play/auth-services-and-testing.md +235 -0
- package/template/.aioson/docs/play/llm-data-and-bindings.md +238 -0
- package/template/.aioson/docs/play/manifest-and-runtime.md +267 -0
- package/template/.aioson/docs/play/source-map.md +104 -0
- package/template/.aioson/skills/design/aurora-command-ui/SKILL.md +266 -243
- package/template/.aioson/skills/design/aurora-command-ui/references/art-direction.md +293 -293
- package/template/.aioson/skills/design/aurora-command-ui/references/components.md +827 -827
- package/template/.aioson/skills/design/aurora-command-ui/references/dashboards.md +250 -250
- package/template/.aioson/skills/design/aurora-command-ui/references/design-tokens.md +585 -585
- package/template/.aioson/skills/design/aurora-command-ui/references/motion.md +365 -365
- package/template/.aioson/skills/design/aurora-command-ui/references/patterns.md +485 -482
- package/template/.aioson/skills/design/aurora-command-ui/references/websites.md +386 -387
- package/template/.aioson/skills/design/bold-editorial-ui/SKILL.md +228 -205
- package/template/.aioson/skills/design/bold-editorial-ui/references/art-direction.md +338 -338
- package/template/.aioson/skills/design/bold-editorial-ui/references/components.md +977 -977
- package/template/.aioson/skills/design/bold-editorial-ui/references/dashboards.md +218 -218
- package/template/.aioson/skills/design/bold-editorial-ui/references/design-tokens.md +326 -326
- package/template/.aioson/skills/design/bold-editorial-ui/references/motion.md +461 -461
- package/template/.aioson/skills/design/bold-editorial-ui/references/patterns.md +293 -293
- package/template/.aioson/skills/design/bold-editorial-ui/references/websites.md +352 -352
- package/template/.aioson/skills/design/clean-saas-ui/SKILL.md +233 -210
- package/template/.aioson/skills/design/clean-saas-ui/references/art-direction.md +319 -319
- package/template/.aioson/skills/design/clean-saas-ui/references/components.md +365 -365
- package/template/.aioson/skills/design/clean-saas-ui/references/dashboards.md +196 -196
- package/template/.aioson/skills/design/clean-saas-ui/references/design-tokens.md +244 -244
- package/template/.aioson/skills/design/clean-saas-ui/references/motion.md +235 -235
- package/template/.aioson/skills/design/clean-saas-ui/references/patterns.md +215 -215
- package/template/.aioson/skills/design/clean-saas-ui/references/websites.md +295 -295
- package/template/.aioson/skills/design/cognitive-core-ui/SKILL.md +239 -203
- package/template/.aioson/skills/design/cognitive-core-ui/references/art-direction.md +339 -339
- package/template/.aioson/skills/design/cognitive-core-ui/references/components.md +417 -407
- package/template/.aioson/skills/design/cognitive-core-ui/references/dashboards.md +289 -272
- package/template/.aioson/skills/design/cognitive-core-ui/references/design-tokens.md +525 -524
- package/template/.aioson/skills/design/cognitive-core-ui/references/motion.md +279 -279
- package/template/.aioson/skills/design/cognitive-core-ui/references/patterns.md +355 -289
- package/template/.aioson/skills/design/cognitive-core-ui/references/websites.md +443 -437
- package/template/.aioson/skills/design/glassmorphism-ui/SKILL.md +245 -222
- package/template/.aioson/skills/design/glassmorphism-ui/references/art-direction.md +159 -159
- package/template/.aioson/skills/design/glassmorphism-ui/references/components.md +498 -498
- package/template/.aioson/skills/design/glassmorphism-ui/references/dashboards.md +236 -236
- package/template/.aioson/skills/design/glassmorphism-ui/references/design-tokens.md +274 -274
- package/template/.aioson/skills/design/glassmorphism-ui/references/motion.md +355 -355
- package/template/.aioson/skills/design/glassmorphism-ui/references/patterns.md +198 -198
- package/template/.aioson/skills/design/glassmorphism-ui/references/websites.md +307 -307
- package/template/.aioson/skills/design/interface-design/SKILL.md +68 -47
- package/template/.aioson/skills/design/interface-design/references/components-and-states.md +105 -105
- package/template/.aioson/skills/design/interface-design/references/design-directions.md +101 -101
- package/template/.aioson/skills/design/interface-design/references/handoff-and-quality.md +92 -71
- package/template/.aioson/skills/design/interface-design/references/intent-and-domain.md +74 -74
- package/template/.aioson/skills/design/interface-design/references/tokens-and-depth.md +173 -173
- package/template/.aioson/skills/design/neo-brutalist-ui/SKILL.md +236 -213
- package/template/.aioson/skills/design/neo-brutalist-ui/references/art-direction.md +228 -228
- package/template/.aioson/skills/design/neo-brutalist-ui/references/components.md +855 -855
- package/template/.aioson/skills/design/neo-brutalist-ui/references/dashboards.md +334 -334
- package/template/.aioson/skills/design/neo-brutalist-ui/references/design-tokens.md +342 -342
- package/template/.aioson/skills/design/neo-brutalist-ui/references/motion.md +286 -286
- package/template/.aioson/skills/design/neo-brutalist-ui/references/patterns.md +458 -458
- package/template/.aioson/skills/design/neo-brutalist-ui/references/websites.md +723 -723
- package/template/.aioson/skills/design/premium-command-center-ui/SKILL.md +83 -62
- package/template/.aioson/skills/design/premium-command-center-ui/references/operations.md +74 -74
- package/template/.aioson/skills/design/premium-command-center-ui/references/patterns.md +116 -116
- package/template/.aioson/skills/design/premium-command-center-ui/references/validation.md +47 -47
- package/template/.aioson/skills/design/premium-command-center-ui/references/visual-system.md +215 -215
- package/template/.aioson/skills/design/pt.squarespace.com/.skill-meta.json +31 -31
- package/template/.aioson/skills/design/pt.squarespace.com/SKILL.md +94 -66
- package/template/.aioson/skills/design/pt.squarespace.com/references/components.md +366 -366
- package/template/.aioson/skills/design/pt.squarespace.com/references/design-tokens.md +150 -150
- package/template/.aioson/skills/design/pt.squarespace.com/references/motion.md +270 -270
- package/template/.aioson/skills/design/pt.squarespace.com/references/patterns.md +189 -189
- package/template/.aioson/skills/design/pt.squarespace.com/references/websites.md +161 -161
- package/template/.aioson/skills/design/warm-craft-ui/SKILL.md +232 -209
- package/template/.aioson/skills/design/warm-craft-ui/references/art-direction.md +324 -324
- package/template/.aioson/skills/design/warm-craft-ui/references/components.md +508 -508
- package/template/.aioson/skills/design/warm-craft-ui/references/dashboards.md +223 -223
- package/template/.aioson/skills/design/warm-craft-ui/references/design-tokens.md +374 -374
- package/template/.aioson/skills/design/warm-craft-ui/references/motion.md +356 -356
- package/template/.aioson/skills/design/warm-craft-ui/references/patterns.md +288 -288
- package/template/.aioson/skills/design/warm-craft-ui/references/websites.md +289 -289
|
@@ -1,334 +1,334 @@
|
|
|
1
|
-
# Dashboards — Neo-Brutalist UI
|
|
2
|
-
|
|
3
|
-
Rules and presets for data-heavy interfaces. The dashboard punk expression mode applied in practice.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## General Rules
|
|
8
|
-
|
|
9
|
-
### Stat numbers
|
|
10
|
-
- Always `font-family: var(--font-mono)` — the primary differentiator is mono, not serif or display
|
|
11
|
-
- Large: `var(--text-3xl)` minimum for hero stats, `var(--text-xl)` for secondary
|
|
12
|
-
- No decoration — the number is the visual
|
|
13
|
-
|
|
14
|
-
### Charts
|
|
15
|
-
- No gradient fills — flat colors at fixed opacity (`opacity: 0.3` for area fills)
|
|
16
|
-
- Bar charts: `border: var(--border-subtle)` on each bar, `border-radius: var(--radius-none)`
|
|
17
|
-
- Line charts: `stroke-width: 2.5px` minimum, solid dots (not hollow)
|
|
18
|
-
- Grid lines: `var(--border-subtle)`, full grid visible
|
|
19
|
-
- Axis labels: `font-family: var(--font-mono)`, `font-size: var(--text-xs)`
|
|
20
|
-
- No fancy tooltips — simple border box, mono text
|
|
21
|
-
|
|
22
|
-
### Tables
|
|
23
|
-
- Full grid borders (every cell) — not minimal. This is non-negotiable for brutalist dashboards
|
|
24
|
-
- Header: `bg-elevated`, font-mono uppercase
|
|
25
|
-
- Data cells: mono font for numbers, dates, IDs, statuses
|
|
26
|
-
|
|
27
|
-
### General
|
|
28
|
-
- Background: `bg-base` (cream off-white in light) — dashboards are "printed", not dark by default
|
|
29
|
-
- All cards: `border-thicker`, `shadow-md`, hover → `shadow-lg`
|
|
30
|
-
- Empty states: `[NO DATA]` in mono — no illustrations, no cheerful messages
|
|
31
|
-
- Status indicators: saturated green/amber/red at full strength — never muted
|
|
32
|
-
|
|
33
|
-
---
|
|
34
|
-
|
|
35
|
-
## Chart Color Palette
|
|
36
|
-
|
|
37
|
-
```css
|
|
38
|
-
--chart-1: var(--accent); /* #FACC15 — yellow — primary series */
|
|
39
|
-
--chart-2: var(--accent-red); /* red — negative / error series */
|
|
40
|
-
--chart-3: var(--accent-blue); /* blue — secondary series */
|
|
41
|
-
--chart-4: var(--accent-green); /* green — positive / success */
|
|
42
|
-
--chart-5: var(--accent-orange); /* orange — warning / tertiary */
|
|
43
|
-
--chart-6: var(--border-color); /* black/white — neutral baseline */
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
Usage:
|
|
47
|
-
- Single series: `--chart-1` (yellow)
|
|
48
|
-
- Two series: `--chart-1` + `--chart-3` (yellow + blue)
|
|
49
|
-
- Success/failure: `--chart-4` + `--chart-2` (green + red)
|
|
50
|
-
- Do not use more than 4 colors in a single chart
|
|
51
|
-
|
|
52
|
-
---
|
|
53
|
-
|
|
54
|
-
## Preset 1 — DevOps Dashboard
|
|
55
|
-
|
|
56
|
-
For: CI/CD pipelines, deployment tracking, service health, infrastructure monitoring.
|
|
57
|
-
Expression mode: Dashboard Punk.
|
|
58
|
-
|
|
59
|
-
### Layout
|
|
60
|
-
```
|
|
61
|
-
[STATUS GRID: colored cells (green/amber/red), border-thick each, 4-8 cols]
|
|
62
|
-
|
|
63
|
-
[DEPLOY TIMELINE: horizontal, mono timestamps, status badges]
|
|
64
|
-
|
|
65
|
-
┌────────────────────┐ ┌────────────────────┐ ┌────────────────────┐
|
|
66
|
-
│ ERROR RATE │ │ P95 LATENCY │ │ DEPLOY FREQUENCY │
|
|
67
|
-
│ [line chart, red] │ │ [line chart, blue] │ │ [bar chart, green] │
|
|
68
|
-
│ border-thicker │ │ │ │ │
|
|
69
|
-
└────────────────────┘ └────────────────────┘ └────────────────────┘
|
|
70
|
-
|
|
71
|
-
[SERVICE HEALTH TABLE: full grid, service name | status badge | uptime mono | p99 mono | last incident mono]
|
|
72
|
-
|
|
73
|
-
[UPTIME COUNTERS: 3-4 stats in a strip — mono text-3xl, "99.97%"]
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
### Status grid pattern
|
|
77
|
-
```css
|
|
78
|
-
.status-grid {
|
|
79
|
-
display: grid;
|
|
80
|
-
grid-template-columns: repeat(auto-fill, minmax(80px, 1fr));
|
|
81
|
-
gap: 0;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
.status-cell {
|
|
85
|
-
border: var(--border-subtle);
|
|
86
|
-
padding: var(--space-3);
|
|
87
|
-
text-align: center;
|
|
88
|
-
font-family: var(--font-mono);
|
|
89
|
-
font-size: var(--text-xs);
|
|
90
|
-
font-weight: var(--weight-bold);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
.status-cell--healthy { background: var(--semantic-green-dim); color: var(--semantic-green); }
|
|
94
|
-
.status-cell--warning { background: var(--semantic-amber-dim); color: var(--semantic-amber); }
|
|
95
|
-
.status-cell--down { background: var(--semantic-red-dim); color: var(--semantic-red); }
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
### CLI-style status badges
|
|
99
|
-
```
|
|
100
|
-
[PASS] → bg: semantic-green-dim, text: semantic-green, border: semantic-green
|
|
101
|
-
[FAIL] → bg: semantic-red-dim, text: semantic-red, border: semantic-red
|
|
102
|
-
[RUNNING] → bg: semantic-amber-dim, text: semantic-amber, border: semantic-amber
|
|
103
|
-
[SKIP] → bg: bg-elevated, text: text-muted
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
---
|
|
107
|
-
|
|
108
|
-
## Preset 2 — Indie SaaS Dashboard
|
|
109
|
-
|
|
110
|
-
For: bootstrapped SaaS, side projects, small products. Revenue and growth metrics.
|
|
111
|
-
Expression mode: Indie Product.
|
|
112
|
-
|
|
113
|
-
### Layout
|
|
114
|
-
```
|
|
115
|
-
[MRR HERO CARD: text-4xl mono bold, hard shadow-lg, sticker badge "[THIS MONTH]"]
|
|
116
|
-
|
|
117
|
-
┌────────────────────┐ ┌────────────────────┐ ┌────────────────────┐
|
|
118
|
-
│ NEW SIGNUPS │ │ CHURN RATE │ │ TRIAL → PAID │
|
|
119
|
-
│ mono text-2xl │ │ mono text-2xl │ │ mono text-2xl │
|
|
120
|
-
│ trend badge │ │ trend badge │ │ progress bar thick │
|
|
121
|
-
└────────────────────┘ └────────────────────┘ └────────────────────┘
|
|
122
|
-
|
|
123
|
-
┌───────────────────────────────────────────────────┐
|
|
124
|
-
│ SUBSCRIBER CHART │
|
|
125
|
-
│ Area chart, accent fill 0.3 opacity, no gradient │
|
|
126
|
-
│ brutalist card, border-thicker │
|
|
127
|
-
└───────────────────────────────────────────────────┘
|
|
128
|
-
|
|
129
|
-
[RECENT SIGNUPS TABLE: full grid | avatar (square) | name | email mono | plan badge | date mono]
|
|
130
|
-
|
|
131
|
-
[FUNNEL: horizontal bar chart — trial/active/churned with thick bars]
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
### MRR hero card
|
|
135
|
-
```css
|
|
136
|
-
.mrr-hero {
|
|
137
|
-
background: var(--bg-surface);
|
|
138
|
-
border: var(--border-thickest);
|
|
139
|
-
box-shadow: var(--shadow-lg);
|
|
140
|
-
padding: var(--space-8) var(--space-10);
|
|
141
|
-
position: relative;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
.mrr-hero__label {
|
|
145
|
-
font-family: var(--font-mono);
|
|
146
|
-
font-size: var(--text-xs);
|
|
147
|
-
text-transform: uppercase;
|
|
148
|
-
letter-spacing: var(--tracking-wider);
|
|
149
|
-
color: var(--text-secondary);
|
|
150
|
-
margin-bottom: var(--space-2);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
.mrr-hero__value {
|
|
154
|
-
font-family: var(--font-mono);
|
|
155
|
-
font-size: var(--text-4xl);
|
|
156
|
-
font-weight: var(--weight-extrabold);
|
|
157
|
-
color: var(--text-heading);
|
|
158
|
-
letter-spacing: var(--tracking-tight);
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/* Position sticker badge top-right */
|
|
162
|
-
.mrr-hero__sticker {
|
|
163
|
-
position: absolute;
|
|
164
|
-
top: var(--space-4);
|
|
165
|
-
right: var(--space-4);
|
|
166
|
-
}
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
---
|
|
170
|
-
|
|
171
|
-
## Preset 3 — Project Tracker Dashboard
|
|
172
|
-
|
|
173
|
-
For: task management, sprint tracking, team workload, project status.
|
|
174
|
-
Expression mode: Indie Product or Dashboard Punk.
|
|
175
|
-
|
|
176
|
-
### Layout
|
|
177
|
-
```
|
|
178
|
-
[STATUS BADGES STRIP: "[12 TODO]" "[5 IN PROGRESS]" "[28 DONE]" — mono, bordered, full saturation]
|
|
179
|
-
|
|
180
|
-
┌──────────────────────────┐ ┌────────────────────────────────┐
|
|
181
|
-
│ BURNDOWN CHART │ │ TEAM WORKLOAD │
|
|
182
|
-
│ line chart │ │ horizontal bar per member │
|
|
183
|
-
│ ideal vs actual │ │ thick bars, mono name labels │
|
|
184
|
-
└──────────────────────────┘ └────────────────────────────────┘
|
|
185
|
-
|
|
186
|
-
[TASK TABLE: full grid | priority dot | title | assignee avatar square | due date mono | status badge]
|
|
187
|
-
|
|
188
|
-
[DEADLINE COUNTDOWN: mono bold text-xl "3 DAYS REMAINING" in accent card]
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
### Status count strip
|
|
192
|
-
```css
|
|
193
|
-
.status-strip {
|
|
194
|
-
display: flex;
|
|
195
|
-
gap: 0;
|
|
196
|
-
border: var(--border-thick);
|
|
197
|
-
overflow: hidden;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
.status-strip__item {
|
|
201
|
-
flex: 1;
|
|
202
|
-
padding: var(--space-3) var(--space-4);
|
|
203
|
-
border-right: var(--border-thick);
|
|
204
|
-
font-family: var(--font-mono);
|
|
205
|
-
font-size: var(--text-sm);
|
|
206
|
-
font-weight: var(--weight-bold);
|
|
207
|
-
display: flex;
|
|
208
|
-
align-items: center;
|
|
209
|
-
gap: var(--space-2);
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
.status-strip__item:last-child { border-right: none; }
|
|
213
|
-
.status-strip__item--todo { background: var(--bg-elevated); }
|
|
214
|
-
.status-strip__item--progress { background: var(--semantic-amber-dim); }
|
|
215
|
-
.status-strip__item--done { background: var(--semantic-green-dim); }
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
---
|
|
219
|
-
|
|
220
|
-
## Preset 4 — Content Dashboard
|
|
221
|
-
|
|
222
|
-
For: blogs, newsletters, media products, content teams tracking performance.
|
|
223
|
-
Expression mode: Indie Product.
|
|
224
|
-
|
|
225
|
-
### Layout
|
|
226
|
-
```
|
|
227
|
-
[CONTENT STATUS STRIP: sticker badges — "[12 PUBLISHED]" "[4 DRAFT]" "[2 SCHEDULED]"]
|
|
228
|
-
|
|
229
|
-
┌───────────────────────────────────────────────────────────────┐
|
|
230
|
-
│ CONTENT CALENDAR │
|
|
231
|
-
│ Grid: 7 cols (days), multiple rows (weeks), border all cells │
|
|
232
|
-
│ Status: colored bg fills (published=green, draft=amber, etc.) │
|
|
233
|
-
└───────────────────────────────────────────────────────────────┘
|
|
234
|
-
|
|
235
|
-
┌────────────────────┐ ┌───────────────────────────────────────┐
|
|
236
|
-
│ TOP POSTS (7d) │ │ PERFORMANCE TABLE │
|
|
237
|
-
│ rank | title | │ │ full grid | title mono | views | CTR │
|
|
238
|
-
│ views mono │ │ mono numbers throughout │
|
|
239
|
-
└────────────────────┘ └───────────────────────────────────────┘
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
### Content calendar cell
|
|
243
|
-
```css
|
|
244
|
-
.cal-cell {
|
|
245
|
-
border: var(--border-subtle);
|
|
246
|
-
min-height: 80px;
|
|
247
|
-
padding: var(--space-2);
|
|
248
|
-
vertical-align: top;
|
|
249
|
-
font-family: var(--font-mono);
|
|
250
|
-
font-size: var(--text-xs);
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
.cal-cell__date {
|
|
254
|
-
font-weight: var(--weight-bold);
|
|
255
|
-
color: var(--text-muted);
|
|
256
|
-
margin-bottom: var(--space-1);
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
.cal-item {
|
|
260
|
-
background: var(--accent-dim);
|
|
261
|
-
border: var(--border-subtle);
|
|
262
|
-
padding: 2px var(--space-2);
|
|
263
|
-
font-size: 11px;
|
|
264
|
-
overflow: hidden;
|
|
265
|
-
text-overflow: ellipsis;
|
|
266
|
-
white-space: nowrap;
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
.cal-item--published { background: var(--semantic-green-dim); }
|
|
270
|
-
.cal-item--draft { background: var(--semantic-amber-dim); }
|
|
271
|
-
.cal-item--scheduled { background: var(--semantic-blue-dim); }
|
|
272
|
-
```
|
|
273
|
-
|
|
274
|
-
---
|
|
275
|
-
|
|
276
|
-
## Preset 5 — Monitoring Dashboard
|
|
277
|
-
|
|
278
|
-
For: system uptime, infrastructure health, alert management, ops tooling.
|
|
279
|
-
Expression mode: Dashboard Punk.
|
|
280
|
-
|
|
281
|
-
### Layout
|
|
282
|
-
```
|
|
283
|
-
[TOP BAR: last updated "UPDATED 2m AGO" mono | incident count badge | ack button]
|
|
284
|
-
|
|
285
|
-
[HEALTH BOARD: NxM grid of colored status squares — one per service]
|
|
286
|
-
→ green = healthy, yellow = degraded, red = down
|
|
287
|
-
→ each cell: service name mono text-xs, status dot, p99 mono
|
|
288
|
-
|
|
289
|
-
┌────────────────────┐ ┌────────────────────┐
|
|
290
|
-
│ LATENCY CHART │ │ ERROR RATE CHART │
|
|
291
|
-
│ line, blue │ │ line, red │
|
|
292
|
-
│ threshold line: │ │ thick bars, border │
|
|
293
|
-
│ dashed, red │ │ │
|
|
294
|
-
└────────────────────┘ └────────────────────┘
|
|
295
|
-
|
|
296
|
-
[RESOURCE USAGE: thick progress bars per service — cpu / memory / disk]
|
|
297
|
-
|
|
298
|
-
[ALERT LOG: mono, timestamped, severity badge, scrollable with border]
|
|
299
|
-
```
|
|
300
|
-
|
|
301
|
-
### Alert log
|
|
302
|
-
```css
|
|
303
|
-
.alert-log {
|
|
304
|
-
background: var(--bg-surface);
|
|
305
|
-
border: var(--border-thicker);
|
|
306
|
-
max-height: 320px;
|
|
307
|
-
overflow-y: auto;
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
.alert-item {
|
|
311
|
-
display: grid;
|
|
312
|
-
grid-template-columns: auto 1fr auto;
|
|
313
|
-
gap: var(--space-3);
|
|
314
|
-
padding: var(--space-3) var(--space-4);
|
|
315
|
-
border-bottom: var(--border-subtle);
|
|
316
|
-
align-items: start;
|
|
317
|
-
font-family: var(--font-mono);
|
|
318
|
-
font-size: var(--text-xs);
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
.alert-item__time {
|
|
322
|
-
color: var(--text-muted);
|
|
323
|
-
white-space: nowrap;
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
.alert-item__message {
|
|
327
|
-
color: var(--text-primary);
|
|
328
|
-
line-height: 1.4;
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
.alert-item--critical { border-left: 4px solid var(--semantic-red); }
|
|
332
|
-
.alert-item--warning { border-left: 4px solid var(--semantic-amber); }
|
|
333
|
-
.alert-item--info { border-left: 4px solid var(--semantic-blue); }
|
|
334
|
-
```
|
|
1
|
+
# Dashboards — Neo-Brutalist UI
|
|
2
|
+
|
|
3
|
+
Rules and presets for data-heavy interfaces. The dashboard punk expression mode applied in practice.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## General Rules
|
|
8
|
+
|
|
9
|
+
### Stat numbers
|
|
10
|
+
- Always `font-family: var(--font-mono)` — the primary differentiator is mono, not serif or display
|
|
11
|
+
- Large: `var(--text-3xl)` minimum for hero stats, `var(--text-xl)` for secondary
|
|
12
|
+
- No decoration — the number is the visual
|
|
13
|
+
|
|
14
|
+
### Charts
|
|
15
|
+
- No gradient fills — flat colors at fixed opacity (`opacity: 0.3` for area fills)
|
|
16
|
+
- Bar charts: `border: var(--border-subtle)` on each bar, `border-radius: var(--radius-none)`
|
|
17
|
+
- Line charts: `stroke-width: 2.5px` minimum, solid dots (not hollow)
|
|
18
|
+
- Grid lines: `var(--border-subtle)`, full grid visible
|
|
19
|
+
- Axis labels: `font-family: var(--font-mono)`, `font-size: var(--text-xs)`
|
|
20
|
+
- No fancy tooltips — simple border box, mono text
|
|
21
|
+
|
|
22
|
+
### Tables
|
|
23
|
+
- Full grid borders (every cell) — not minimal. This is non-negotiable for brutalist dashboards
|
|
24
|
+
- Header: `bg-elevated`, font-mono uppercase
|
|
25
|
+
- Data cells: mono font for numbers, dates, IDs, statuses
|
|
26
|
+
|
|
27
|
+
### General
|
|
28
|
+
- Background: `bg-base` (cream off-white in light) — dashboards are "printed", not dark by default
|
|
29
|
+
- All cards: `border-thicker`, `shadow-md`, hover → `shadow-lg`
|
|
30
|
+
- Empty states: `[NO DATA]` in mono — no illustrations, no cheerful messages
|
|
31
|
+
- Status indicators: saturated green/amber/red at full strength — never muted
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Chart Color Palette
|
|
36
|
+
|
|
37
|
+
```css
|
|
38
|
+
--chart-1: var(--accent); /* #FACC15 — yellow — primary series */
|
|
39
|
+
--chart-2: var(--accent-red); /* red — negative / error series */
|
|
40
|
+
--chart-3: var(--accent-blue); /* blue — secondary series */
|
|
41
|
+
--chart-4: var(--accent-green); /* green — positive / success */
|
|
42
|
+
--chart-5: var(--accent-orange); /* orange — warning / tertiary */
|
|
43
|
+
--chart-6: var(--border-color); /* black/white — neutral baseline */
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Usage:
|
|
47
|
+
- Single series: `--chart-1` (yellow)
|
|
48
|
+
- Two series: `--chart-1` + `--chart-3` (yellow + blue)
|
|
49
|
+
- Success/failure: `--chart-4` + `--chart-2` (green + red)
|
|
50
|
+
- Do not use more than 4 colors in a single chart
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Preset 1 — DevOps Dashboard
|
|
55
|
+
|
|
56
|
+
For: CI/CD pipelines, deployment tracking, service health, infrastructure monitoring.
|
|
57
|
+
Expression mode: Dashboard Punk.
|
|
58
|
+
|
|
59
|
+
### Layout
|
|
60
|
+
```
|
|
61
|
+
[STATUS GRID: colored cells (green/amber/red), border-thick each, 4-8 cols]
|
|
62
|
+
|
|
63
|
+
[DEPLOY TIMELINE: horizontal, mono timestamps, status badges]
|
|
64
|
+
|
|
65
|
+
┌────────────────────┐ ┌────────────────────┐ ┌────────────────────┐
|
|
66
|
+
│ ERROR RATE │ │ P95 LATENCY │ │ DEPLOY FREQUENCY │
|
|
67
|
+
│ [line chart, red] │ │ [line chart, blue] │ │ [bar chart, green] │
|
|
68
|
+
│ border-thicker │ │ │ │ │
|
|
69
|
+
└────────────────────┘ └────────────────────┘ └────────────────────┘
|
|
70
|
+
|
|
71
|
+
[SERVICE HEALTH TABLE: full grid, service name | status badge | uptime mono | p99 mono | last incident mono]
|
|
72
|
+
|
|
73
|
+
[UPTIME COUNTERS: 3-4 stats in a strip — mono text-3xl, "99.97%"]
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Status grid pattern
|
|
77
|
+
```css
|
|
78
|
+
.status-grid {
|
|
79
|
+
display: grid;
|
|
80
|
+
grid-template-columns: repeat(auto-fill, minmax(80px, 1fr));
|
|
81
|
+
gap: 0;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.status-cell {
|
|
85
|
+
border: var(--border-subtle);
|
|
86
|
+
padding: var(--space-3);
|
|
87
|
+
text-align: center;
|
|
88
|
+
font-family: var(--font-mono);
|
|
89
|
+
font-size: var(--text-xs);
|
|
90
|
+
font-weight: var(--weight-bold);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.status-cell--healthy { background: var(--semantic-green-dim); color: var(--semantic-green); }
|
|
94
|
+
.status-cell--warning { background: var(--semantic-amber-dim); color: var(--semantic-amber); }
|
|
95
|
+
.status-cell--down { background: var(--semantic-red-dim); color: var(--semantic-red); }
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### CLI-style status badges
|
|
99
|
+
```
|
|
100
|
+
[PASS] → bg: semantic-green-dim, text: semantic-green, border: semantic-green
|
|
101
|
+
[FAIL] → bg: semantic-red-dim, text: semantic-red, border: semantic-red
|
|
102
|
+
[RUNNING] → bg: semantic-amber-dim, text: semantic-amber, border: semantic-amber
|
|
103
|
+
[SKIP] → bg: bg-elevated, text: text-muted
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Preset 2 — Indie SaaS Dashboard
|
|
109
|
+
|
|
110
|
+
For: bootstrapped SaaS, side projects, small products. Revenue and growth metrics.
|
|
111
|
+
Expression mode: Indie Product.
|
|
112
|
+
|
|
113
|
+
### Layout
|
|
114
|
+
```
|
|
115
|
+
[MRR HERO CARD: text-4xl mono bold, hard shadow-lg, sticker badge "[THIS MONTH]"]
|
|
116
|
+
|
|
117
|
+
┌────────────────────┐ ┌────────────────────┐ ┌────────────────────┐
|
|
118
|
+
│ NEW SIGNUPS │ │ CHURN RATE │ │ TRIAL → PAID │
|
|
119
|
+
│ mono text-2xl │ │ mono text-2xl │ │ mono text-2xl │
|
|
120
|
+
│ trend badge │ │ trend badge │ │ progress bar thick │
|
|
121
|
+
└────────────────────┘ └────────────────────┘ └────────────────────┘
|
|
122
|
+
|
|
123
|
+
┌───────────────────────────────────────────────────┐
|
|
124
|
+
│ SUBSCRIBER CHART │
|
|
125
|
+
│ Area chart, accent fill 0.3 opacity, no gradient │
|
|
126
|
+
│ brutalist card, border-thicker │
|
|
127
|
+
└───────────────────────────────────────────────────┘
|
|
128
|
+
|
|
129
|
+
[RECENT SIGNUPS TABLE: full grid | avatar (square) | name | email mono | plan badge | date mono]
|
|
130
|
+
|
|
131
|
+
[FUNNEL: horizontal bar chart — trial/active/churned with thick bars]
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### MRR hero card
|
|
135
|
+
```css
|
|
136
|
+
.mrr-hero {
|
|
137
|
+
background: var(--bg-surface);
|
|
138
|
+
border: var(--border-thickest);
|
|
139
|
+
box-shadow: var(--shadow-lg);
|
|
140
|
+
padding: var(--space-8) var(--space-10);
|
|
141
|
+
position: relative;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.mrr-hero__label {
|
|
145
|
+
font-family: var(--font-mono);
|
|
146
|
+
font-size: var(--text-xs);
|
|
147
|
+
text-transform: uppercase;
|
|
148
|
+
letter-spacing: var(--tracking-wider);
|
|
149
|
+
color: var(--text-secondary);
|
|
150
|
+
margin-bottom: var(--space-2);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.mrr-hero__value {
|
|
154
|
+
font-family: var(--font-mono);
|
|
155
|
+
font-size: var(--text-4xl);
|
|
156
|
+
font-weight: var(--weight-extrabold);
|
|
157
|
+
color: var(--text-heading);
|
|
158
|
+
letter-spacing: var(--tracking-tight);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/* Position sticker badge top-right */
|
|
162
|
+
.mrr-hero__sticker {
|
|
163
|
+
position: absolute;
|
|
164
|
+
top: var(--space-4);
|
|
165
|
+
right: var(--space-4);
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Preset 3 — Project Tracker Dashboard
|
|
172
|
+
|
|
173
|
+
For: task management, sprint tracking, team workload, project status.
|
|
174
|
+
Expression mode: Indie Product or Dashboard Punk.
|
|
175
|
+
|
|
176
|
+
### Layout
|
|
177
|
+
```
|
|
178
|
+
[STATUS BADGES STRIP: "[12 TODO]" "[5 IN PROGRESS]" "[28 DONE]" — mono, bordered, full saturation]
|
|
179
|
+
|
|
180
|
+
┌──────────────────────────┐ ┌────────────────────────────────┐
|
|
181
|
+
│ BURNDOWN CHART │ │ TEAM WORKLOAD │
|
|
182
|
+
│ line chart │ │ horizontal bar per member │
|
|
183
|
+
│ ideal vs actual │ │ thick bars, mono name labels │
|
|
184
|
+
└──────────────────────────┘ └────────────────────────────────┘
|
|
185
|
+
|
|
186
|
+
[TASK TABLE: full grid | priority dot | title | assignee avatar square | due date mono | status badge]
|
|
187
|
+
|
|
188
|
+
[DEADLINE COUNTDOWN: mono bold text-xl "3 DAYS REMAINING" in accent card]
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Status count strip
|
|
192
|
+
```css
|
|
193
|
+
.status-strip {
|
|
194
|
+
display: flex;
|
|
195
|
+
gap: 0;
|
|
196
|
+
border: var(--border-thick);
|
|
197
|
+
overflow: hidden;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.status-strip__item {
|
|
201
|
+
flex: 1;
|
|
202
|
+
padding: var(--space-3) var(--space-4);
|
|
203
|
+
border-right: var(--border-thick);
|
|
204
|
+
font-family: var(--font-mono);
|
|
205
|
+
font-size: var(--text-sm);
|
|
206
|
+
font-weight: var(--weight-bold);
|
|
207
|
+
display: flex;
|
|
208
|
+
align-items: center;
|
|
209
|
+
gap: var(--space-2);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.status-strip__item:last-child { border-right: none; }
|
|
213
|
+
.status-strip__item--todo { background: var(--bg-elevated); }
|
|
214
|
+
.status-strip__item--progress { background: var(--semantic-amber-dim); }
|
|
215
|
+
.status-strip__item--done { background: var(--semantic-green-dim); }
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## Preset 4 — Content Dashboard
|
|
221
|
+
|
|
222
|
+
For: blogs, newsletters, media products, content teams tracking performance.
|
|
223
|
+
Expression mode: Indie Product.
|
|
224
|
+
|
|
225
|
+
### Layout
|
|
226
|
+
```
|
|
227
|
+
[CONTENT STATUS STRIP: sticker badges — "[12 PUBLISHED]" "[4 DRAFT]" "[2 SCHEDULED]"]
|
|
228
|
+
|
|
229
|
+
┌───────────────────────────────────────────────────────────────┐
|
|
230
|
+
│ CONTENT CALENDAR │
|
|
231
|
+
│ Grid: 7 cols (days), multiple rows (weeks), border all cells │
|
|
232
|
+
│ Status: colored bg fills (published=green, draft=amber, etc.) │
|
|
233
|
+
└───────────────────────────────────────────────────────────────┘
|
|
234
|
+
|
|
235
|
+
┌────────────────────┐ ┌───────────────────────────────────────┐
|
|
236
|
+
│ TOP POSTS (7d) │ │ PERFORMANCE TABLE │
|
|
237
|
+
│ rank | title | │ │ full grid | title mono | views | CTR │
|
|
238
|
+
│ views mono │ │ mono numbers throughout │
|
|
239
|
+
└────────────────────┘ └───────────────────────────────────────┘
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Content calendar cell
|
|
243
|
+
```css
|
|
244
|
+
.cal-cell {
|
|
245
|
+
border: var(--border-subtle);
|
|
246
|
+
min-height: 80px;
|
|
247
|
+
padding: var(--space-2);
|
|
248
|
+
vertical-align: top;
|
|
249
|
+
font-family: var(--font-mono);
|
|
250
|
+
font-size: var(--text-xs);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
.cal-cell__date {
|
|
254
|
+
font-weight: var(--weight-bold);
|
|
255
|
+
color: var(--text-muted);
|
|
256
|
+
margin-bottom: var(--space-1);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
.cal-item {
|
|
260
|
+
background: var(--accent-dim);
|
|
261
|
+
border: var(--border-subtle);
|
|
262
|
+
padding: 2px var(--space-2);
|
|
263
|
+
font-size: 11px;
|
|
264
|
+
overflow: hidden;
|
|
265
|
+
text-overflow: ellipsis;
|
|
266
|
+
white-space: nowrap;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
.cal-item--published { background: var(--semantic-green-dim); }
|
|
270
|
+
.cal-item--draft { background: var(--semantic-amber-dim); }
|
|
271
|
+
.cal-item--scheduled { background: var(--semantic-blue-dim); }
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## Preset 5 — Monitoring Dashboard
|
|
277
|
+
|
|
278
|
+
For: system uptime, infrastructure health, alert management, ops tooling.
|
|
279
|
+
Expression mode: Dashboard Punk.
|
|
280
|
+
|
|
281
|
+
### Layout
|
|
282
|
+
```
|
|
283
|
+
[TOP BAR: last updated "UPDATED 2m AGO" mono | incident count badge | ack button]
|
|
284
|
+
|
|
285
|
+
[HEALTH BOARD: NxM grid of colored status squares — one per service]
|
|
286
|
+
→ green = healthy, yellow = degraded, red = down
|
|
287
|
+
→ each cell: service name mono text-xs, status dot, p99 mono
|
|
288
|
+
|
|
289
|
+
┌────────────────────┐ ┌────────────────────┐
|
|
290
|
+
│ LATENCY CHART │ │ ERROR RATE CHART │
|
|
291
|
+
│ line, blue │ │ line, red │
|
|
292
|
+
│ threshold line: │ │ thick bars, border │
|
|
293
|
+
│ dashed, red │ │ │
|
|
294
|
+
└────────────────────┘ └────────────────────┘
|
|
295
|
+
|
|
296
|
+
[RESOURCE USAGE: thick progress bars per service — cpu / memory / disk]
|
|
297
|
+
|
|
298
|
+
[ALERT LOG: mono, timestamped, severity badge, scrollable with border]
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
### Alert log
|
|
302
|
+
```css
|
|
303
|
+
.alert-log {
|
|
304
|
+
background: var(--bg-surface);
|
|
305
|
+
border: var(--border-thicker);
|
|
306
|
+
max-height: 320px;
|
|
307
|
+
overflow-y: auto;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
.alert-item {
|
|
311
|
+
display: grid;
|
|
312
|
+
grid-template-columns: auto 1fr auto;
|
|
313
|
+
gap: var(--space-3);
|
|
314
|
+
padding: var(--space-3) var(--space-4);
|
|
315
|
+
border-bottom: var(--border-subtle);
|
|
316
|
+
align-items: start;
|
|
317
|
+
font-family: var(--font-mono);
|
|
318
|
+
font-size: var(--text-xs);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
.alert-item__time {
|
|
322
|
+
color: var(--text-muted);
|
|
323
|
+
white-space: nowrap;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
.alert-item__message {
|
|
327
|
+
color: var(--text-primary);
|
|
328
|
+
line-height: 1.4;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
.alert-item--critical { border-left: 4px solid var(--semantic-red); }
|
|
332
|
+
.alert-item--warning { border-left: 4px solid var(--semantic-amber); }
|
|
333
|
+
.alert-item--info { border-left: 4px solid var(--semantic-blue); }
|
|
334
|
+
```
|