VAEA UI — Design System Enforcer
Single entry point for all design quality on ACM-AI. Orchestrates existing design skills
through VAEA brand constraints.
Activation Modes
Mode 1: Auto Context Injection (on file touch)
When ANY agent modifies frontend/**/*.tsx, frontend/**/*.ts, or frontend/**/*.css:
- Load
.impeccable.md from project root — this is the design authority
- Load hard rules from
references/acm-patterns.md (read that file now)
- Apply VAEA constraints to all design decisions
- No review, no checklist — just ensure the agent HAS the knowledge
Mode 2: Explicit Sub-Command (on invocation)
Invoke with /vaea-ui <command> or /vaea-ui <command> <file-or-scope>.
Mode 3: Story Completion Gate (on story-complete)
When a UI story is marked complete, run the mandatory checklist from
references/design-checklist.md (read that file now). BLOCK completion if any
critical item fails.
Context Gathering Protocol
Before ANY design work, execute these steps in order:
Step 1: Load Design Context
Read .impeccable.md at the project root. This file contains:
- Users and personas (compliance officers, facility managers, assessors)
- Brand personality: Professional, Transparent, Calm
- Emotional tone: Confidence & Trust
- References: Salesforce + Xero
- Anti-references: generic SaaS, legacy .gov.au, over-designed, dense ERP
- 5 design principles
- Full color system with coral expansion rules
- Typography and font loading requirements
- Responsive strategy (true responsive, card view on mobile for grids)
- Motion direction (invest in framer-motion)
- Accessibility target (WCAG 2.2 AAA aspirational)
If .impeccable.md does not exist, run /teach-impeccable first. STOP and do not
proceed without design context.
Step 2: Load ACM Component Patterns
Read references/acm-patterns.md in THIS skill directory. Contains hard rules with
code examples for:
- AG Grid theming (must use
.ag-theme-custom from globals.css)
- Risk badge dual encoding (icon + color, never color alone)
- Mobile card fallback (card view below md breakpoint)
- Font loading (next/font, not Google Fonts link tags)
- ARIA patterns (specific to ACM components)
- Coral usage (CTAs, badges, notifications — expanded role)
- Government design patterns (12px radius, teal shadows, acknowledgment footer)
Step 3: Load Dependency Skills
Load these skills for their specialized knowledge, filtered through VAEA constraints:
| Skill |
Load When |
VAEA Override |
ui-ux-pro-max |
Creating new components or pages |
Filter palettes to VAEA teal/coral/gold only. Filter fonts to Inter + JetBrains Mono only. Use Next.js 15 + React 19 stack. |
frontend-design |
Any visual design work |
Skip its Context Gathering (we already loaded .impeccable.md). Apply its AI Slop Test. |
baseline-ui |
CSS/Tailwind validation |
Merge its constraints with ACM-specific rules. |
taste-skill |
Creative component work |
Use its anti-AI-slop rules. Override its font bans (Inter IS our font). Set DESIGN_VARIANCE=5, MOTION_INTENSITY=6, VISUAL_DENSITY=7 (data-dense). |
Curated Command Sheet
10 commands tuned for ACM-AI's "Professional, Transparent, Calm" personality.
Evaluation
/vaea-ui critique [file|scope]
Evaluate design effectiveness. Loads critique skill internally.
- Assesses: visual hierarchy, information architecture, emotional resonance, design quality
- ACM lens: Does it inspire confidence? Is data scannable? Does it feel like Salesforce/Xero?
- Leads to:
/vaea-ui polish, /vaea-ui arrange, /vaea-ui typeset
/vaea-ui audit [file|scope]
Comprehensive quality audit. Loads audit skill internally.
- Checks: accessibility (WCAG 2.2 AAA), performance, theming, responsive, anti-patterns
- ACM lens: Dual-encoded risk indicators? AG Grid theme from globals.css? Mobile card fallback?
- Leads to:
/vaea-ui normalize, /vaea-ui harden, /vaea-ui optimize, /vaea-ui adapt
Quality
/vaea-ui polish [file|scope]
Final quality pass before shipping.
- Fixes: alignment, spacing, consistency, detail issues
- ACM lens: Design token usage (no raw hex/px), VAEA shadow system, consistent border-radius
/vaea-ui harden [file|scope]
Improve interface resilience.
- Fixes: error handling, text overflow, edge cases, loading/empty/error states
- ACM lens: ConnectionGuard patterns, ErrorBoundary on every page, Skeleton matching final layout
/vaea-ui normalize [file|scope]
Normalize to match VAEA design system.
- Fixes: inconsistent token usage, off-brand colors, wrong component variants
- ACM lens: oklch tokens only, VAEA teal palette, branded teal-tinted dark mode
/vaea-ui optimize [file|scope]
Improve interface performance.
- Fixes: loading speed, rendering, animations, images, bundle size
- ACM lens: AG Grid lazy loading, React Query staleTime tuning, next/font migration, route prefetching
Adaptation
/vaea-ui adapt [file|scope]
Adapt for different screen sizes and devices.
- Fixes: responsive behavior, touch targets, grid-to-card transitions
- ACM lens: AG Grid to card view below md, Sheet for mobile chat, collapsible sidebar, pinned columns
/vaea-ui clarify [file|scope]
Improve UX copy and microcopy.
- Fixes: labels, error messages, instructions, tooltips, empty states
- ACM lens: Government tone (direct, factual, no jargon), status messages state facts, errors explain next step
Layout & Typography
/vaea-ui arrange [file|scope]
Improve layout, spacing, and visual rhythm.
- Fixes: monotonous grids, inconsistent spacing, weak visual hierarchy
- ACM lens: 4px spacing grid, BentoGrid for dashboards, data density over whitespace in grids
/vaea-ui typeset [file|scope]
Improve typography.
- Fixes: font choices, hierarchy, sizing, weight consistency, readability
- ACM lens: Inter for body, JetBrains Mono for data, Text component variants, tabular-nums for numbers
Hard Rules (Non-Negotiable)
These rules MUST be followed. Violations block story completion.
1. Design Tokens Only
NEVER: className="text-[#53A69D]" or style={{ color: '#53A69D' }}
ALWAYS: className="text-primary" or className="text-vaea-teal-300"
2. AG Grid Theme from globals.css
NEVER: <style jsx global>{`.ag-theme-alpine { ... }`}</style>
ALWAYS: className="ag-theme-custom" (defined once in globals.css)
3. Risk Indicators Dual Encoded
NEVER: <Badge className="bg-risk-high">High</Badge>
ALWAYS: <Badge className="bg-risk-high"><XCircle className="h-3 w-3 mr-1" />High</Badge>
4. Mobile Card Fallback for Grids
// Below md: card stack. Above md: AG Grid.
{isMobile ? <RecordCardList records={records} /> : <DataGrid ... />}
5. Font Loading via next/font
NEVER: <link href="https://fonts.googleapis.com/css2?family=Inter..." />
ALWAYS: import { Inter } from 'next/font/google'
6. Coral for CTAs and Important Actions
NEVER: Primary CTA using only teal
ALWAYS: Important actions, notification dots, critical badges use vaea-coral
7. ARIA on All Interactive Elements
NEVER: <button /></button>
ALWAYS: <button aria-label="Search records"><Search /></button>
8. Text Component for Typography
NEVER: <h2 className="text-2xl font-bold">Title</h2>
ALWAYS: <Text variant="h2">Title</Text>
9. Teal-Tinted Dark Mode
NEVER: Dark mode backgrounds using neutral grey (oklch(0.15 0 0))
ALWAYS: Dark mode backgrounds with teal tint (oklch(0.175 0.025 170))
10. Aboriginal Acknowledgment in Footer
Victorian government requirement. Always present via branding.ts config.
Story Completion Gate
When a UI story is marked complete, the agent MUST run the mandatory design checklist.
Read references/design-checklist.md for the full checklist.
Quick summary — ALL must pass:
If ANY critical item fails, the story is INCOMPLETE. Fix before marking done.
AI Slop Test
Before submitting any UI work, ask yourself:
"If someone saw this and said 'AI made this,' would they believe it immediately?"
If yes, that's the problem. Check for:
- Generic card-in-card nesting
- Uniform card grids with no visual hierarchy
- Purple/blue gradient text
- Glassmorphism everywhere
- Centered hero metric layout
- Sparklines as decoration
- Bounce/elastic animations
- Dark mode with glowing neon accents
ACM-AI should feel like it was designed by a government UX team that cares deeply about
data quality — not generated by an AI coding assistant.
File Reference
| File |
When to Load |
.impeccable.md (project root) |
Always — design authority |
references/acm-patterns.md |
When implementing components |
references/design-checklist.md |
At story completion |
1---2name: vaea-ui3description: VAEA ACM-AI design system enforcer. Auto-triggers on frontend/**/*.tsx, frontend/**/*.css, .impeccable.md. Loads VAEA design context, enforces government-grade standards, gates UI story completion with mandatory checklist. Use for: frontend components, UI stories, design review (/vaea-ui critique|audit), quality pass (/vaea-ui polish), layout/typography (/vaea-ui arrange|typeset), responsive adaptation (/vaea-ui adapt), accessibility (/vaea-ui harden), AG Grid theming, risk badges, dark mode. Orchestrates: frontend-design, critique, audit, polish, normalize, adapt, clarify, arrange, typeset, harden, optimize, ui-ux-pro-max. Triggers on: React, Tailwind, AG Grid, Radix UI, shadcn/ui, design tokens, WCAG, ARIA, responsive, dark mode, building grid, ACM grid, job card, mobile card view.4---5
6# VAEA UI — Design System Enforcer
7
8Single entry point for all design quality on ACM-AI. Orchestrates existing design skills
9through VAEA brand constraints.
10
11## Activation Modes
12
13### Mode 1: Auto Context Injection (on file touch)
14
15When ANY agent modifies `frontend/**/*.tsx`, `frontend/**/*.ts`, or `frontend/**/*.css`:
16
171. Load `.impeccable.md` from project root — this is the design authority
182. Load hard rules from `references/acm-patterns.md` (read that file now)
193. Apply VAEA constraints to all design decisions
204. No review, no checklist — just ensure the agent HAS the knowledge
21
22### Mode 2: Explicit Sub-Command (on invocation)
23
24Invoke with `/vaea-ui <command>` or `/vaea-ui <command> <file-or-scope>`.
25
26### Mode 3: Story Completion Gate (on story-complete)
27
28When a UI story is marked complete, run the mandatory checklist from
29`references/design-checklist.md` (read that file now). **BLOCK completion if any
30critical item fails.**
31
32---
33
34## Context Gathering Protocol
35
36Before ANY design work, execute these steps in order:
37
38### Step 1: Load Design Context
39
40Read `.impeccable.md` at the project root. This file contains:
41- Users and personas (compliance officers, facility managers, assessors)
42- Brand personality: Professional, Transparent, Calm
43- Emotional tone: Confidence & Trust
44- References: Salesforce + Xero
45- Anti-references: generic SaaS, legacy .gov.au, over-designed, dense ERP
46- 5 design principles
47- Full color system with coral expansion rules
48- Typography and font loading requirements
49- Responsive strategy (true responsive, card view on mobile for grids)
50- Motion direction (invest in framer-motion)
51- Accessibility target (WCAG 2.2 AAA aspirational)
52
53If `.impeccable.md` does not exist, run `/teach-impeccable` first. STOP and do not
54proceed without design context.
55
56### Step 2: Load ACM Component Patterns
57
58Read `references/acm-patterns.md` in THIS skill directory. Contains hard rules with
59code examples for:
60- AG Grid theming (must use `.ag-theme-custom` from globals.css)
61- Risk badge dual encoding (icon + color, never color alone)
62- Mobile card fallback (card view below md breakpoint)
63- Font loading (next/font, not Google Fonts link tags)
64- ARIA patterns (specific to ACM components)
65- Coral usage (CTAs, badges, notifications — expanded role)
66- Government design patterns (12px radius, teal shadows, acknowledgment footer)
67
68### Step 3: Load Dependency Skills
69
70Load these skills for their specialized knowledge, filtered through VAEA constraints:
71
72| Skill | Load When | VAEA Override |
73|-------|-----------|---------------|
74| `ui-ux-pro-max` | Creating new components or pages | Filter palettes to VAEA teal/coral/gold only. Filter fonts to Inter + JetBrains Mono only. Use Next.js 15 + React 19 stack. |
75| `frontend-design` | Any visual design work | Skip its Context Gathering (we already loaded .impeccable.md). Apply its AI Slop Test. |
76| `baseline-ui` | CSS/Tailwind validation | Merge its constraints with ACM-specific rules. |
77| `taste-skill` | Creative component work | Use its anti-AI-slop rules. Override its font bans (Inter IS our font). Set DESIGN_VARIANCE=5, MOTION_INTENSITY=6, VISUAL_DENSITY=7 (data-dense). |
78
79---
80
81## Curated Command Sheet
82
8310 commands tuned for ACM-AI's "Professional, Transparent, Calm" personality.
84
85### Evaluation
86
87#### `/vaea-ui critique [file|scope]`
88Evaluate design effectiveness. Loads `critique` skill internally.
89- Assesses: visual hierarchy, information architecture, emotional resonance, design quality
90- ACM lens: Does it inspire confidence? Is data scannable? Does it feel like Salesforce/Xero?
91- Leads to: `/vaea-ui polish`, `/vaea-ui arrange`, `/vaea-ui typeset`
92
93#### `/vaea-ui audit [file|scope]`
94Comprehensive quality audit. Loads `audit` skill internally.
95- Checks: accessibility (WCAG 2.2 AAA), performance, theming, responsive, anti-patterns
96- ACM lens: Dual-encoded risk indicators? AG Grid theme from globals.css? Mobile card fallback?
97- Leads to: `/vaea-ui normalize`, `/vaea-ui harden`, `/vaea-ui optimize`, `/vaea-ui adapt`
98
99### Quality
100
101#### `/vaea-ui polish [file|scope]`
102Final quality pass before shipping.
103- Fixes: alignment, spacing, consistency, detail issues
104- ACM lens: Design token usage (no raw hex/px), VAEA shadow system, consistent border-radius
105
106#### `/vaea-ui harden [file|scope]`
107Improve interface resilience.
108- Fixes: error handling, text overflow, edge cases, loading/empty/error states
109- ACM lens: ConnectionGuard patterns, ErrorBoundary on every page, Skeleton matching final layout
110
111#### `/vaea-ui normalize [file|scope]`
112Normalize to match VAEA design system.
113- Fixes: inconsistent token usage, off-brand colors, wrong component variants
114- ACM lens: oklch tokens only, VAEA teal palette, branded teal-tinted dark mode
115
116#### `/vaea-ui optimize [file|scope]`
117Improve interface performance.
118- Fixes: loading speed, rendering, animations, images, bundle size
119- ACM lens: AG Grid lazy loading, React Query staleTime tuning, next/font migration, route prefetching
120
121### Adaptation
122
123#### `/vaea-ui adapt [file|scope]`
124Adapt for different screen sizes and devices.
125- Fixes: responsive behavior, touch targets, grid-to-card transitions
126- ACM lens: AG Grid to card view below md, Sheet for mobile chat, collapsible sidebar, pinned columns
127
128#### `/vaea-ui clarify [file|scope]`
129Improve UX copy and microcopy.
130- Fixes: labels, error messages, instructions, tooltips, empty states
131- ACM lens: Government tone (direct, factual, no jargon), status messages state facts, errors explain next step
132
133### Layout & Typography
134
135#### `/vaea-ui arrange [file|scope]`
136Improve layout, spacing, and visual rhythm.
137- Fixes: monotonous grids, inconsistent spacing, weak visual hierarchy
138- ACM lens: 4px spacing grid, BentoGrid for dashboards, data density over whitespace in grids
139
140#### `/vaea-ui typeset [file|scope]`
141Improve typography.
142- Fixes: font choices, hierarchy, sizing, weight consistency, readability
143- ACM lens: Inter for body, JetBrains Mono for data, Text component variants, tabular-nums for numbers
144
145---
146
147## Hard Rules (Non-Negotiable)
148
149These rules MUST be followed. Violations block story completion.
150
151### 1. Design Tokens Only
152```
153NEVER: className="text-[#53A69D]" or style={{ color: '#53A69D' }}
154ALWAYS: className="text-primary" or className="text-vaea-teal-300"
155```
156
157### 2. AG Grid Theme from globals.css
158```
159NEVER: <style jsx global>{`.ag-theme-alpine { ... }`}</style>
160ALWAYS: className="ag-theme-custom" (defined once in globals.css)
161```
162
163### 3. Risk Indicators Dual Encoded
164```
165NEVER: <Badge className="bg-risk-high">High</Badge>
166ALWAYS: <Badge className="bg-risk-high"><XCircle className="h-3 w-3 mr-1" />High</Badge>
167```
168
169### 4. Mobile Card Fallback for Grids
170```tsx
171// Below md: card stack. Above md: AG Grid.
172{isMobile ? <RecordCardList records={records} /> : <DataGrid ... />}
173```
174
175### 5. Font Loading via next/font
176```
177NEVER: <link href="https://fonts.googleapis.com/css2?family=Inter..." />
178ALWAYS: import { Inter } from 'next/font/google'
179```
180
181### 6. Coral for CTAs and Important Actions
182```
183NEVER: Primary CTA using only teal
184ALWAYS: Important actions, notification dots, critical badges use vaea-coral
185```
186
187### 7. ARIA on All Interactive Elements
188```
189NEVER: <button onClick={...}><Search /></button>
190ALWAYS: <button onClick={...} aria-label="Search records"><Search /></button>
191```
192
193### 8. Text Component for Typography
194```
195NEVER: <h2 className="text-2xl font-bold">Title</h2>
196ALWAYS: <Text variant="h2">Title</Text>
197```
198
199### 9. Teal-Tinted Dark Mode
200```
201NEVER: Dark mode backgrounds using neutral grey (oklch(0.15 0 0))
202ALWAYS: Dark mode backgrounds with teal tint (oklch(0.175 0.025 170))
203```
204
205### 10. Aboriginal Acknowledgment in Footer
206Victorian government requirement. Always present via `branding.ts` config.
207
208---
209
210## Story Completion Gate
211
212When a UI story is marked complete, the agent MUST run the mandatory design checklist.
213Read `references/design-checklist.md` for the full checklist.
214
215**Quick summary — ALL must pass:**
216
217- [ ] Design tokens used (no raw hex/px values)
218- [ ] Responsive: tested at mobile (< 640px), tablet (768px), desktop (1280px+)
219- [ ] Dark mode: verified in both light and dark themes
220- [ ] ARIA: all interactive elements have labels, roles, states
221- [ ] Risk indicators: dual encoded (icon + color) if applicable
222- [ ] AG Grid: uses `.ag-theme-custom` from globals.css, no inline styles
223- [ ] Typography: uses `<Text>` component variants, not raw heading tags
224- [ ] Loading states: Skeleton components matching final layout structure
225- [ ] Error states: ErrorBoundary + meaningful fallback on every page/section
226- [ ] Mobile grids: card view fallback below md breakpoint if AG Grid is used
227
228If ANY critical item fails, the story is **INCOMPLETE**. Fix before marking done.
229
230---
231
232## AI Slop Test
233
234Before submitting any UI work, ask yourself:
235
236> "If someone saw this and said 'AI made this,' would they believe it immediately?"
237
238If yes, that's the problem. Check for:
239- Generic card-in-card nesting
240- Uniform card grids with no visual hierarchy
241- Purple/blue gradient text
242- Glassmorphism everywhere
243- Centered hero metric layout
244- Sparklines as decoration
245- Bounce/elastic animations
246- Dark mode with glowing neon accents
247
248ACM-AI should feel like it was designed by a government UX team that cares deeply about
249data quality — not generated by an AI coding assistant.
250
251---
252
253## File Reference
254
255| File | When to Load |
256|------|-------------|
257| `.impeccable.md` (project root) | Always — design authority |
258| `references/acm-patterns.md` | When implementing components |
259| `references/design-checklist.md` | At story completion |