Files
ADS3-Design-System/ARCHITECTURE.md
Richie 2205862c2f Add workflow tooling: claude2figma skills, Storybook addons, Figma permissions
Install @storybook/addon-designs for embedding Figma frames in stories
and claude2figma skills (preflight, component-rules, style-binding,
reference-interpreter) for enforcing design token compliance when
writing to Figma. Add PostToolUse hook for use_figma QA reminders and
pre-allow Figma MCP + Code Connect tools in settings.json.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-21 11:28:15 +10:00

4.9 KiB

ARCHITECTURE.md — SDC-Frontend

This is the living architecture document for the SDC-Frontend design system. All structural decisions are recorded here. Update this document when the architecture evolves — never let the codebase and this document drift apart.


1. Overview

SDC-Frontend is a React component library and design system that will serve as the frontend for the Research Synthesiser. It is built in phases:

  1. Design system — tokens, primitives, composite components
  2. Application screens — the synthesiser UI rebuilt on top of the design system

2. Token Pipeline

Figma (design tool)
  ↓  Figma MCP / get_variable_defs
src/tokens/tokens.css (@theme block)
  ↓  Tailwind CSS v4 reads @theme
  ↓  Generates utility classes + CSS custom properties
Components (use Tailwind utilities or var() references)
  ↓  Rendered in
Storybook (visual verification)

Token Categories

  • Colours: --color-* (bg, surface, border, text, primary, success, warning, error)
  • Radii: --radius-* (sm, default, lg, full)
  • Shadows: --shadow-* (default, md)

How Tailwind v4 @theme Works

Declaring --color-primary: #2563eb inside @theme in tokens.css automatically generates utilities like bg-primary, text-primary, border-primary. No JavaScript config file needed — the CSS file is the config.


3. Component Taxonomy

src/components/ui/ — Primitives

Atomic, reusable building blocks. Each is self-contained with no domain logic.

  • Button, Input, Textarea, Select
  • Card, Badge, Tag
  • Dialog, Tooltip, Popover

src/components/composite/ — Composed Components

Built from primitives, may carry light domain semantics.

  • StatusMessage (success/error/warning/info)
  • TabBar, TabPanel
  • ThemeCard (maps to synthesiser's theme display)

src/components/layout/ — Layout

Page-level structural components.

  • AppShell (header + sidebar + content area)
  • PageHeader

4. Styling Approach

  • Primary: Tailwind utility classes
  • Conditional classes: cn() from @/lib/utils (clsx + tailwind-merge)
  • Token values: Always from src/tokens/tokens.css, never hardcoded
  • No CSS modules, no styled-components, no inline styles (except truly dynamic values)
  • Class ordering: Enforced by prettier-plugin-tailwindcss

5. Storybook Conventions

  • Every component has a co-located .stories.tsx file
  • All stories use tags: ['autodocs'] for auto-generated docs
  • Stories cover: default state, all variants, edge cases, disabled/error states
  • A11y addon runs on all stories — violations should be addressed
  • MCP addon enabled at localhost:6006/mcp for AI-assisted development

6. Project Structure

src/
├── components/
│   ├── ui/               # Primitives
│   ├── composite/        # Composed components
│   └── layout/           # Layout components
├── tokens/
│   └── tokens.css        # Design tokens (@theme block)
├── styles/
│   └── global.css        # Tailwind imports + base styles
├── lib/
│   └── utils.ts          # cn() utility
├── hooks/                # Custom React hooks
├── pages/                # App screens (Phase 2)
├── App.tsx               # Root component
└── main.tsx              # Vite entry point

7. Design Tool Integration

Figma

  • Project file: https://www.figma.com/design/mrabO6AtxN3ektGiTk0I9c/ResearchInsights (file key: mrabO6AtxN3ektGiTk0I9c)
  • MCP server: Official Figma Remote MCP at https://mcp.figma.com/mcp (HTTP transport, OAuth auth)
  • Key tools: get_design_context, get_variable_defs, get_screenshot, search_design_system, use_figma
  • Design tokens extracted via get_variable_defs → mapped to @theme values in tokens.css

Code Connect

  • Links Figma components to their React implementations
  • Once linked, get_design_context returns actual component code instead of generic markup
  • Mapped as we build each component via add_code_connect_map (label: "React")

Storybook MCP

  • Available at localhost:6006/mcp when Storybook dev server is running
  • Provides: component listing, documentation retrieval, story generation, a11y testing
  • @storybook/addon-designs embeds Figma frames in the story panel for side-by-side comparison
  • @storybook/addon-mcp serves the MCP endpoint

claude2figma Skills

  • 4 skills in .claude/skills/ that enforce design system compliance when writing to Figma
  • figma-preflight: Validates MCP connection, audits libraries, builds a Token Map of all styles/variables
  • component-rules: Library-first lookup, Auto Layout conventions, semantic node naming
  • figma-style-binding: All visual values must bind to Figma Styles or Variables, never hardcoded; includes post-write QA
  • reference-interpreter: Converts screenshots/references into structured Design Briefs mapped to design tokens