name: frontend-build
description: >
Builds the frontend using all prior design documents: brief, IA, tokens, and task list.
Trigger after /brief-to-tasks is complete, or when the user says "build it", "start building",
or wants to generate the actual UI. Never runs without a brief. Produces intentional,
production-grade code - not generic AI output.
Frontend Build - Intentional UI from Design Docs
You are building a UI that already has its design decisions made. You are executing, not deciding. Every visual choice must reference the design brief and tokens. If something is not specified, choose the option most consistent with the aesthetic philosophy - and note the decision.
Step 1 - Load All Context
Read in this order:
.design/<feature-name>/DESIGN_BRIEF.md - brief, philosophy, tone, constraints
.design/<feature-name>/INFORMATION_ARCHITECTURE.md - pages, nav, flows
tokens.css (or existing token system) - all values you must use
.design/<feature-name>/TASKS.md - what to build, in what order
If any of these are missing: stop and tell the user which document is missing and how to generate it.
Step 2 - Codebase Compatibility Check
Before writing any code:
- Confirm the framework (React, Next, Vue, plain HTML)
- Confirm the CSS approach (CSS modules, Tailwind, global CSS, styled-components)
- Confirm routing (React Router, Next App Router, none)
- Confirm any existing component library (shadcn, Radix, Headless UI, etc.)
Build using the patterns already in the codebase. Do not introduce new patterns unless the brief requires something the existing stack cannot support.
Step 3 - Build Constraints (Non-Negotiable)
These apply to every component and every file:
Tokens
- Never hardcode a colour, font size, spacing value, shadow, or duration
- Every value comes from CSS custom properties defined in
tokens.css
- Exception only if the framework has no CSS custom property support (extremely rare)
Mobile-First
- Build every layout starting at 375px
- Scale up with
min-width media queries only
- Touch targets minimum 44×44px
- Test the layout mentally at 375px, 768px, and 1280px before finishing
Dark Mode
- Every component works in both light and dark mode
- Use semantic colour tokens (
--colour-bg-base, --colour-text-primary) - never primitives
- Never use
color: black or background: white directly
Accessibility
- Every interactive element reachable by keyboard (
Tab, Enter, Space, arrow keys for groups)
- Every image has
alt text
- Every form input has a visible label (not just placeholder)
- Focus rings visible and styled - never
outline: none without a replacement
- Colour contrast minimum 4.5:1 for body text, 3:1 for large text
No Generic Output
- Do not use default browser button styles without customisation
- Do not use placeholder lorem ipsum text in shipped UI (use realistic placeholder content)
- Do not produce cookie-cutter layouts - let the aesthetic philosophy drive composition
Step 4 - Aesthetic Philosophy Implementation
Apply the philosophy from the brief consistently across every component:
Dieter Rams
- Remove anything decorative that doesn't serve a function
- Align everything to the grid - no arbitrary positioning
- Use weight and size for hierarchy - not colour
- Micro-interactions only where they communicate state change
Swiss / International Typographic
- Hard grid. Headings set at a dramatically larger size than body
- Black and one colour maximum
- Tight leading on headings. Generous leading on body.
- No rounded corners on structural elements
Japanese Minimalism (Ma)
- Leave space deliberately - padding is content, not waste
- Animate only when the user initiates action
- No decorative borders - use space to separate, not lines
- Typographic scale is small and refined, not dramatic
Brutalist
- Show the structure - don't hide the grid
- Monospaced or rough type is acceptable
- Borders visible. Shadows aggressive or absent.
- Interaction feedback immediate and visible
Scandinavian
- Warmth through rounded corners and warm-neutral backgrounds
- Generous padding - let elements breathe
- Subtle hover states. No abrupt transitions.
- Illustrative icons if the brief allows (not just system icons)
Art Deco
- Symmetry in layout wherever possible
- Gold or jewel-tone accent used sparingly - make it mean something
- Serif display type at large scale. Sans for data and UI.
- Borders used as decorative frames around key elements
Neo-Memphis
- Colour is used aggressively - not timidly
- Elements can overlap. Borders visible. Offset shadows.
- Hierarchy through weight and scale, not through restraint
- Hover states exaggerated - motion is part of the personality
Editorial / Magazine
- Typography is the layout - let headlines dominate
- Long lines of content tolerated (60–80 character line length)
- White space used to pace content, not fill it
- Minimal chrome - let content speak
Step 5 - Build Sequence
Work through TASKS.md in layer order. After each task:
- Mark it
[x] in the task file
- Note any design decision made during build with:
// Design decision: [what] because [why based on brief]
- If you encounter a decision that contradicts the brief: stop and ask before proceeding
Step 6 - Quality Check (Before Calling Done)
Before marking the build complete, verify:
After Build
Tell the user:
- What was built (list of pages/components)
- Any design decisions made during build that weren't specified in the brief
- "Run
/design-review to critique the output against the brief."
1---2name: frontend-build3description: ---4---5---6name: frontend-build7description: >8 Builds the frontend using all prior design documents: brief, IA, tokens, and task list.9 Trigger after /brief-to-tasks is complete, or when the user says "build it", "start building",10 or wants to generate the actual UI. Never runs without a brief. Produces intentional,11 production-grade code - not generic AI output.12---1314# Frontend Build - Intentional UI from Design Docs1516You are building a UI that already has its design decisions made. You are executing, not deciding. Every visual choice must reference the design brief and tokens. If something is not specified, choose the option most consistent with the aesthetic philosophy - and note the decision.1718---1920## Step 1 - Load All Context2122Read in this order:231. `.design/<feature-name>/DESIGN_BRIEF.md` - brief, philosophy, tone, constraints242. `.design/<feature-name>/INFORMATION_ARCHITECTURE.md` - pages, nav, flows253. `tokens.css` (or existing token system) - all values you must use264. `.design/<feature-name>/TASKS.md` - what to build, in what order2728If any of these are missing: stop and tell the user which document is missing and how to generate it.2930---3132## Step 2 - Codebase Compatibility Check3334Before writing any code:35- Confirm the framework (React, Next, Vue, plain HTML)36- Confirm the CSS approach (CSS modules, Tailwind, global CSS, styled-components)37- Confirm routing (React Router, Next App Router, none)38- Confirm any existing component library (shadcn, Radix, Headless UI, etc.)3940Build using the patterns already in the codebase. Do not introduce new patterns unless the brief requires something the existing stack cannot support.4142---4344## Step 3 - Build Constraints (Non-Negotiable)4546These apply to every component and every file:4748### Tokens49- **Never hardcode** a colour, font size, spacing value, shadow, or duration50- Every value comes from CSS custom properties defined in `tokens.css`51- Exception only if the framework has no CSS custom property support (extremely rare)5253### Mobile-First54- Build every layout starting at **375px**55- Scale up with `min-width` media queries only56- Touch targets minimum **44×44px**57- Test the layout mentally at 375px, 768px, and 1280px before finishing5859### Dark Mode60- Every component works in both light and dark mode61- Use semantic colour tokens (`--colour-bg-base`, `--colour-text-primary`) - never primitives62- Never use `color: black` or `background: white` directly6364### Accessibility65- Every interactive element reachable by keyboard (`Tab`, `Enter`, `Space`, arrow keys for groups)66- Every image has `alt` text67- Every form input has a visible label (not just placeholder)68- Focus rings visible and styled - never `outline: none` without a replacement69- Colour contrast minimum 4.5:1 for body text, 3:1 for large text7071### No Generic Output72- Do not use default browser button styles without customisation73- Do not use placeholder lorem ipsum text in shipped UI (use realistic placeholder content)74- Do not produce cookie-cutter layouts - let the aesthetic philosophy drive composition7576---7778## Step 4 - Aesthetic Philosophy Implementation7980Apply the philosophy from the brief consistently across every component:8182### Dieter Rams83- Remove anything decorative that doesn't serve a function84- Align everything to the grid - no arbitrary positioning85- Use weight and size for hierarchy - not colour86- Micro-interactions only where they communicate state change8788### Swiss / International Typographic89- Hard grid. Headings set at a dramatically larger size than body90- Black and one colour maximum91- Tight leading on headings. Generous leading on body.92- No rounded corners on structural elements9394### Japanese Minimalism (Ma)95- Leave space deliberately - padding is content, not waste96- Animate only when the user initiates action97- No decorative borders - use space to separate, not lines98- Typographic scale is small and refined, not dramatic99100### Brutalist101- Show the structure - don't hide the grid102- Monospaced or rough type is acceptable103- Borders visible. Shadows aggressive or absent.104- Interaction feedback immediate and visible105106### Scandinavian107- Warmth through rounded corners and warm-neutral backgrounds108- Generous padding - let elements breathe109- Subtle hover states. No abrupt transitions.110- Illustrative icons if the brief allows (not just system icons)111112### Art Deco113- Symmetry in layout wherever possible114- Gold or jewel-tone accent used sparingly - make it mean something115- Serif display type at large scale. Sans for data and UI.116- Borders used as decorative frames around key elements117118### Neo-Memphis119- Colour is used aggressively - not timidly120- Elements can overlap. Borders visible. Offset shadows.121- Hierarchy through weight and scale, not through restraint122- Hover states exaggerated - motion is part of the personality123124### Editorial / Magazine125- Typography is the layout - let headlines dominate126- Long lines of content tolerated (60–80 character line length)127- White space used to pace content, not fill it128- Minimal chrome - let content speak129130---131132## Step 5 - Build Sequence133134Work through `TASKS.md` in layer order. After each task:135- Mark it `[x]` in the task file136- Note any design decision made during build with: `// Design decision: [what] because [why based on brief]`137- If you encounter a decision that contradicts the brief: stop and ask before proceeding138139---140141## Step 6 - Quality Check (Before Calling Done)142143Before marking the build complete, verify:144145- [ ] All CSS values are token-referenced - no hardcoded colours, sizes, or durations146- [ ] Mobile layout works at 375px147- [ ] Dark mode works without any white or black hardcoding148- [ ] Keyboard navigation works through all interactive elements149- [ ] Empty, loading, and error states are implemented for every data area150- [ ] No placeholder text in the final output151- [ ] The aesthetic philosophy is consistently expressed - not just in one component but across all152153---154155## After Build156157Tell the user:158- What was built (list of pages/components)159- Any design decisions made during build that weren't specified in the brief160- "Run `/design-review` to critique the output against the brief."