ganbatte-os 0.2.1
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/AGENTS.md +46 -0
- package/CLAUDE.md +31 -0
- package/GEMINI.md +17 -0
- package/LICENSE +21 -0
- package/README.md +141 -0
- package/agents/profiles/architect.md +13 -0
- package/agents/profiles/dev.md +13 -0
- package/agents/profiles/devops.md +12 -0
- package/agents/profiles/ganbatte-os-master.md +444 -0
- package/agents/profiles/index.json +14 -0
- package/agents/profiles/po.md +7 -0
- package/agents/profiles/qa.md +456 -0
- package/agents/profiles/sm.md +7 -0
- package/agents/profiles/squad-creator.md +7 -0
- package/agents/profiles/ux-design-expert.md +14 -0
- package/config.json +15 -0
- package/docs/curation.md +60 -0
- package/docs/gos_installation_guide.md +114 -0
- package/docs/ide-compatibility.md +20 -0
- package/docs/plan/plan-git-operations.md +51 -0
- package/docs/plan-distribuicao-publica.md +360 -0
- package/docs/stacks/stack-git-operations.md +154 -0
- package/docs/toolchain-map.md +18 -0
- package/integrations/README.md +42 -0
- package/integrations/antigravity/README.md +29 -0
- package/integrations/antigravity/command-map.json +29 -0
- package/integrations/claude/README.md +35 -0
- package/integrations/claude/agent-map.json +46 -0
- package/integrations/claude/command-map.json +32 -0
- package/integrations/claude/litellm-proxy.md +93 -0
- package/integrations/claude/mcp-specifics.md +121 -0
- package/integrations/codex/README.md +29 -0
- package/integrations/codex/command-map.json +29 -0
- package/integrations/cursor/README.md +8 -0
- package/integrations/cursor/command-map.json +11 -0
- package/integrations/gemini/README.md +13 -0
- package/integrations/gemini/command-map.json +11 -0
- package/integrations/kilo-code/README.md +7 -0
- package/integrations/kilo-code/command-map.json +11 -0
- package/integrations/opencode/README.md +91 -0
- package/integrations/opencode/command-map.json +46 -0
- package/integrations/registry.json +20 -0
- package/manifests/g-os-runtime-manifest.json +39 -0
- package/manifests/gos-install-manifest.json +46 -0
- package/opencode.json +7 -0
- package/package.json +51 -0
- package/playbooks/feature-development-playbook.md +239 -0
- package/playbooks/sprint-planner-playbook.md +127 -0
- package/playbooks/squad-pipeline-runner.md +196 -0
- package/playbooks/ssh-multi-account-setup.md +185 -0
- package/prompts/01-search.md +18 -0
- package/prompts/02-spec.md +19 -0
- package/prompts/03-tasks.md +15 -0
- package/prompts/04-code.md +10 -0
- package/prompts/05-reviews.md +11 -0
- package/rules/plan-mode.md +60 -0
- package/scripts/cli/gos-cli.js +679 -0
- package/scripts/hooks/pre-commit-validate.js +201 -0
- package/scripts/integrations/check-ide-compat.js +44 -0
- package/scripts/integrations/setup-ide-adapters.js +87 -0
- package/scripts/tools/clickup-preprocess.js +218 -0
- package/scripts/tools/clickup.js +1058 -0
- package/skills/agent-teams/SKILL.md +78 -0
- package/skills/agent-teams/presets/team-all.yaml +14 -0
- package/skills/agent-teams/presets/team-fullstack.yaml +17 -0
- package/skills/agent-teams/presets/team-ide-minimal.yaml +9 -0
- package/skills/agent-teams/presets/team-no-ui.yaml +12 -0
- package/skills/agent-teams/presets/team-qa-focused.yaml +83 -0
- package/skills/clickup/SKILL.md +151 -0
- package/skills/component-dedup/SKILL.md +101 -0
- package/skills/design-to-code/SKILL.md +255 -0
- package/skills/figma-implement-design/SKILL.md +227 -0
- package/skills/figma-make-analyzer/SKILL.md +140 -0
- package/skills/frontend-dev/SKILL.md +271 -0
- package/skills/git-ssh-setup/SKILL.md +164 -0
- package/skills/interface-design/SKILL.md +350 -0
- package/skills/interface-design/references/audit.md +76 -0
- package/skills/interface-design/references/craft-examples.md +134 -0
- package/skills/interface-design/references/critique.md +92 -0
- package/skills/interface-design/references/extract.md +92 -0
- package/skills/interface-design/references/principles.md +348 -0
- package/skills/interface-design/references/templates/system-precision.md +73 -0
- package/skills/interface-design/references/templates/system-warmth.md +67 -0
- package/skills/interface-design/references/validation.md +137 -0
- package/skills/make-code-triage/SKILL.md +135 -0
- package/skills/make-version-diff/SKILL.md +87 -0
- package/skills/plan-to-tasks/SKILL.md +136 -0
- package/skills/react-best-practices/AGENTS.md +2975 -0
- package/skills/react-best-practices/SKILL.md +151 -0
- package/skills/react-best-practices/metadata.json +15 -0
- package/skills/react-best-practices/rules/_sections.md +46 -0
- package/skills/react-best-practices/rules/_template.md +28 -0
- package/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/skills/react-best-practices/rules/advanced-init-once.md +42 -0
- package/skills/react-best-practices/rules/advanced-use-latest.md +39 -0
- package/skills/react-best-practices/rules/async-api-routes.md +38 -0
- package/skills/react-best-practices/rules/async-defer-await.md +80 -0
- package/skills/react-best-practices/rules/async-dependencies.md +51 -0
- package/skills/react-best-practices/rules/async-parallel.md +28 -0
- package/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/skills/react-best-practices/rules/bundle-conditional.md +31 -0
- package/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/skills/react-best-practices/rules/bundle-preload.md +50 -0
- package/skills/react-best-practices/rules/client-event-listeners.md +74 -0
- package/skills/react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/skills/react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
- package/skills/react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
- package/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
- package/skills/react-best-practices/rules/js-cache-storage.md +70 -0
- package/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
- package/skills/react-best-practices/rules/js-early-exit.md +50 -0
- package/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/skills/react-best-practices/rules/js-index-maps.md +37 -0
- package/skills/react-best-practices/rules/js-length-check-first.md +49 -0
- package/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
- package/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/skills/react-best-practices/rules/rendering-activity.md +26 -0
- package/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/skills/react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/skills/react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
- package/skills/react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
- package/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/skills/react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/skills/react-best-practices/rules/rerender-memo.md +44 -0
- package/skills/react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/skills/react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/skills/react-best-practices/rules/rerender-transitions.md +40 -0
- package/skills/react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/skills/react-best-practices/rules/server-auth-actions.md +96 -0
- package/skills/react-best-practices/rules/server-cache-lru.md +41 -0
- package/skills/react-best-practices/rules/server-cache-react.md +76 -0
- package/skills/react-best-practices/rules/server-dedup-props.md +65 -0
- package/skills/react-best-practices/rules/server-hoist-static-io.md +142 -0
- package/skills/react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/skills/react-best-practices/rules/server-serialization.md +38 -0
- package/skills/react-doctor/SKILL.md +74 -0
- package/skills/registry.json +21 -0
- package/skills/sprint-planner/SKILL.md +434 -0
- package/squads/design-delivery/README.md +10 -0
- package/squads/design-delivery/squad.yaml +30 -0
- package/squads/design-delivery/workflows/wf-design-delivery.yaml +27 -0
- package/squads/design-squad/README.md +31 -0
- package/squads/design-squad/agents/brad-frost.md +185 -0
- package/squads/design-squad/agents/dan-mall.md +178 -0
- package/squads/design-squad/agents/dave-malouf.md +198 -0
- package/squads/design-squad/agents/design-chief.md +109 -0
- package/squads/design-squad/agents/design-system-architect.md +109 -0
- package/squads/design-squad/agents/ui-engineer.md +102 -0
- package/squads/design-squad/agents/ux-designer.md +105 -0
- package/squads/design-squad/agents/visual-generator.md +108 -0
- package/squads/design-squad/checklists/output-quality.md +76 -0
- package/squads/design-squad/config/config.yaml +65 -0
- package/squads/design-squad/data/design-patterns-catalog.yaml +276 -0
- package/squads/design-squad/data/routing-catalog.yaml +95 -0
- package/squads/design-squad/squad.yaml +88 -0
- package/squads/design-squad/tasks/audit-design.md +174 -0
- package/squads/design-squad/tasks/create-component-spec.md +185 -0
- package/squads/design-squad/tasks/create-design-system.md +179 -0
- package/squads/design-squad/tasks/design-ux-flow.md +184 -0
- package/squads/design-squad/tasks/diagnose.md +138 -0
- package/squads/design-squad/tasks/generate-handoff.md +186 -0
- package/squads/design-squad/tasks/review.md +133 -0
- package/squads/design-squad/tasks/setup-design-ops.md +177 -0
- package/squads/design-squad/workflows/wf-design-system-creation.yaml +131 -0
- package/squads/design-squad/workflows/wf-feature-design.yaml +114 -0
- package/squads/git-operations/README.md +30 -0
- package/squads/git-operations/squad.yaml +27 -0
- package/squads/git-operations/workflows/wf-safe-commit.yaml +27 -0
- package/squads/git-operations/workflows/wf-ssh-setup.yaml +27 -0
- package/squads/sprint-planning/agents/sprint-chief.md +47 -0
- package/squads/sprint-planning/agents/sprint-planner-agent.md +43 -0
- package/squads/sprint-planning/agents/sprint-tracker.md +43 -0
- package/squads/sprint-planning/agents/task-importer.md +44 -0
- package/squads/sprint-planning/checklists/sprint-readiness.md +27 -0
- package/squads/sprint-planning/config/config.yaml +65 -0
- package/squads/sprint-planning/data/clickup-field-mapping.yaml +94 -0
- package/squads/sprint-planning/squad.yaml +52 -0
- package/squads/sprint-planning/tasks/close-sprint.md +43 -0
- package/squads/sprint-planning/tasks/create-sprint.md +42 -0
- package/squads/sprint-planning/tasks/import-tasks.md +39 -0
- package/squads/sprint-planning/tasks/sync-status.md +31 -0
- package/squads/sprint-planning/workflows/wf-sprint-creation.yaml +59 -0
- package/squads/sprint-planning/workflows/wf-sprint-sync.yaml +35 -0
- package/templates/adr-tmpl.yaml +76 -0
- package/templates/sprint-clickup.template.md +80 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Extract Patterns
|
|
2
|
+
|
|
3
|
+
Extract design patterns from existing code to create a `.interface-design/system.md` file.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Usage
|
|
8
|
+
|
|
9
|
+
Extract from common UI paths or a specific directory.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## What to Extract
|
|
14
|
+
|
|
15
|
+
Scan UI files (tsx, jsx, vue, svelte, css, scss) for:
|
|
16
|
+
|
|
17
|
+
### 1. Repeated spacing values
|
|
18
|
+
```
|
|
19
|
+
Found: 4px (12x), 8px (23x), 12px (18x), 16px (31x), 24px (8x)
|
|
20
|
+
Suggests: Base 4px, Scale: 4, 8, 12, 16, 24
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### 2. Repeated radius values
|
|
24
|
+
```
|
|
25
|
+
Found: 6px (28x), 8px (5x)
|
|
26
|
+
Suggests: Radius scale: 6px, 8px
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### 3. Button patterns
|
|
30
|
+
```
|
|
31
|
+
Found 8 buttons:
|
|
32
|
+
- Height: 36px (7/8), 40px (1/8)
|
|
33
|
+
- Padding: 12px 16px (6/8), 16px (2/8)
|
|
34
|
+
Suggests: Button pattern: 36px h, 12px 16px padding
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### 4. Card patterns
|
|
38
|
+
```
|
|
39
|
+
Found 12 cards:
|
|
40
|
+
- Border: 1px solid (10/12), none (2/12)
|
|
41
|
+
- Padding: 16px (9/12), 20px (3/12)
|
|
42
|
+
Suggests: Card pattern: 1px border, 16px padding
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### 5. Depth strategy
|
|
46
|
+
```
|
|
47
|
+
box-shadow found: 2x
|
|
48
|
+
border found: 34x
|
|
49
|
+
Suggests: Borders-only depth
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 6. Color palette
|
|
53
|
+
```
|
|
54
|
+
Colors found:
|
|
55
|
+
- Gray family: slate-100 through slate-900 (dominant)
|
|
56
|
+
- Accent: blue-600 (12x), blue-500 (3x)
|
|
57
|
+
- Semantic: red-500 (4x), green-500 (3x), amber-500 (2x)
|
|
58
|
+
Suggests: Slate foundation, blue accent
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Output Prompt
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
Extracted patterns:
|
|
67
|
+
|
|
68
|
+
Spacing:
|
|
69
|
+
Base: 4px
|
|
70
|
+
Scale: 4, 8, 12, 16, 24, 32
|
|
71
|
+
|
|
72
|
+
Depth: Borders-only (34 borders, 2 shadows)
|
|
73
|
+
|
|
74
|
+
Radius: 6px, 8px
|
|
75
|
+
|
|
76
|
+
Patterns:
|
|
77
|
+
Button: 36px h, 12px 16px pad, 6px radius
|
|
78
|
+
Card: 1px border, 16px pad
|
|
79
|
+
|
|
80
|
+
Create .interface-design/system.md with these? (y/n/customize)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Implementation Steps
|
|
86
|
+
|
|
87
|
+
1. Glob for UI files in target path
|
|
88
|
+
2. Parse for repeated spacing, radius, shadow, border, and color values
|
|
89
|
+
3. Identify dominant patterns by frequency
|
|
90
|
+
4. Suggest system based on most common values
|
|
91
|
+
5. Present to user for confirmation
|
|
92
|
+
6. Offer customization before saving to `.interface-design/system.md`
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
# Design Principles — Technical Reference
|
|
2
|
+
|
|
3
|
+
Deep reference for token architecture, CSS patterns, spacing systems, and implementation details.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Token Architecture
|
|
8
|
+
|
|
9
|
+
Every color in your interface should trace back to a small set of primitives:
|
|
10
|
+
|
|
11
|
+
- **Foreground** — text colors (primary, secondary, tertiary, muted)
|
|
12
|
+
- **Background** — surface colors (base, elevated, overlay)
|
|
13
|
+
- **Border** — edge colors (default, subtle, strong, stronger)
|
|
14
|
+
- **Brand** — your primary accent
|
|
15
|
+
- **Semantic** — functional colors (destructive, warning, success, info)
|
|
16
|
+
|
|
17
|
+
No random hex values. Everything maps to primitives.
|
|
18
|
+
|
|
19
|
+
### The Primitive Foundation
|
|
20
|
+
|
|
21
|
+
```css
|
|
22
|
+
/* Dark mode example — slate family */
|
|
23
|
+
:root {
|
|
24
|
+
/* Foreground (text hierarchy) */
|
|
25
|
+
--fg-primary: hsl(210 11% 93%); /* ~#e8eaed */
|
|
26
|
+
--fg-secondary: hsl(215 8% 62%); /* ~#959ba5 */
|
|
27
|
+
--fg-tertiary: hsl(215 8% 46%); /* ~#6b7280 */
|
|
28
|
+
--fg-muted: hsl(215 8% 34%); /* ~#4e545e */
|
|
29
|
+
|
|
30
|
+
/* Background (surface elevation) */
|
|
31
|
+
--bg-base: hsl(220 13% 9%); /* ~#141518 */
|
|
32
|
+
--bg-surface-1: hsl(220 13% 11%); /* ~#191b1f */
|
|
33
|
+
--bg-surface-2: hsl(220 13% 13%); /* ~#1e2025 */
|
|
34
|
+
--bg-surface-3: hsl(220 13% 16%); /* ~#262830 */
|
|
35
|
+
--bg-inset: hsl(220 13% 7%); /* ~#101114 */
|
|
36
|
+
|
|
37
|
+
/* Border (separation hierarchy) */
|
|
38
|
+
--border-default: rgba(255, 255, 255, 0.08);
|
|
39
|
+
--border-subtle: rgba(255, 255, 255, 0.05);
|
|
40
|
+
--border-strong: rgba(255, 255, 255, 0.12);
|
|
41
|
+
--border-stronger: rgba(255, 255, 255, 0.20);
|
|
42
|
+
|
|
43
|
+
/* Brand */
|
|
44
|
+
--accent: hsl(217 91% 60%); /* blue-500 */
|
|
45
|
+
--accent-hover: hsl(217 91% 55%);
|
|
46
|
+
|
|
47
|
+
/* Semantic */
|
|
48
|
+
--destructive: hsl(0 72% 51%);
|
|
49
|
+
--warning: hsl(38 92% 50%);
|
|
50
|
+
--success: hsl(142 71% 45%);
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Light Mode Equivalent
|
|
55
|
+
|
|
56
|
+
```css
|
|
57
|
+
:root[data-theme="light"] {
|
|
58
|
+
--fg-primary: hsl(220 13% 13%);
|
|
59
|
+
--fg-secondary: hsl(215 16% 47%);
|
|
60
|
+
--fg-tertiary: hsl(215 14% 62%);
|
|
61
|
+
--fg-muted: hsl(215 12% 77%);
|
|
62
|
+
|
|
63
|
+
--bg-base: hsl(0 0% 100%);
|
|
64
|
+
--bg-surface-1: hsl(210 20% 98%);
|
|
65
|
+
--bg-surface-2: hsl(210 17% 95%);
|
|
66
|
+
--bg-surface-3: hsl(210 14% 92%);
|
|
67
|
+
--bg-inset: hsl(210 20% 96%);
|
|
68
|
+
|
|
69
|
+
--border-default: rgba(0, 0, 0, 0.08);
|
|
70
|
+
--border-subtle: rgba(0, 0, 0, 0.05);
|
|
71
|
+
--border-strong: rgba(0, 0, 0, 0.12);
|
|
72
|
+
--border-stronger: rgba(0, 0, 0, 0.20);
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Text Hierarchy
|
|
79
|
+
|
|
80
|
+
Four levels, each with a distinct role:
|
|
81
|
+
|
|
82
|
+
| Level | Role | Example |
|
|
83
|
+
|-------|------|---------|
|
|
84
|
+
| **Primary** | Default text, highest contrast | Page titles, body text, labels |
|
|
85
|
+
| **Secondary** | Supporting text, slightly muted | Descriptions, helper text |
|
|
86
|
+
| **Tertiary** | Metadata, timestamps | "Updated 2 hours ago", table headers |
|
|
87
|
+
| **Muted** | Disabled, placeholder | Input placeholders, disabled labels |
|
|
88
|
+
|
|
89
|
+
Use all four consistently. Two-level hierarchy (text + gray text) is too flat.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Border Progression
|
|
94
|
+
|
|
95
|
+
Four levels matching intensity to importance:
|
|
96
|
+
|
|
97
|
+
| Level | Opacity (dark) | Use |
|
|
98
|
+
|-------|---------------|-----|
|
|
99
|
+
| **Subtle** | 0.05 | Softest separation, visual grouping |
|
|
100
|
+
| **Default** | 0.08 | Standard card/panel borders |
|
|
101
|
+
| **Strong** | 0.12 | Emphasis, hover states, section dividers |
|
|
102
|
+
| **Stronger** | 0.20 | Focus rings, maximum emphasis |
|
|
103
|
+
|
|
104
|
+
Use `rgba()` not solid hex. Low-opacity borders blend with backgrounds — they define edges without demanding attention.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Control Tokens
|
|
109
|
+
|
|
110
|
+
Form controls need dedicated tokens, not reused surface tokens:
|
|
111
|
+
|
|
112
|
+
```css
|
|
113
|
+
--control-bg: hsl(220 13% 7%); /* Slightly darker than surface (inset) */
|
|
114
|
+
--control-border: rgba(255, 255, 255, 0.10);
|
|
115
|
+
--control-border-hover: rgba(255, 255, 255, 0.15);
|
|
116
|
+
--control-border-focus: var(--accent);
|
|
117
|
+
--control-ring: 0 0 0 2px rgba(59, 130, 246, 0.3);
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
This separation lets you tune interactive elements independently from layout surfaces.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Spacing System
|
|
125
|
+
|
|
126
|
+
Pick a base unit (4px is standard) and use only multiples:
|
|
127
|
+
|
|
128
|
+
| Context | Values | Use |
|
|
129
|
+
|---------|--------|-----|
|
|
130
|
+
| **Micro** | 2px, 4px | Icon gaps, tight element pairs |
|
|
131
|
+
| **Component** | 6px, 8px, 12px | Within buttons, inputs, badges |
|
|
132
|
+
| **Section** | 16px, 20px, 24px | Card padding, group spacing |
|
|
133
|
+
| **Major** | 32px, 48px, 64px | Page sections, layout gaps |
|
|
134
|
+
|
|
135
|
+
```css
|
|
136
|
+
--space-1: 4px;
|
|
137
|
+
--space-2: 8px;
|
|
138
|
+
--space-3: 12px;
|
|
139
|
+
--space-4: 16px;
|
|
140
|
+
--space-6: 24px;
|
|
141
|
+
--space-8: 32px;
|
|
142
|
+
--space-12: 48px;
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Random values (14px, 17px, 22px) signal no system.
|
|
146
|
+
|
|
147
|
+
### Padding Symmetry
|
|
148
|
+
|
|
149
|
+
Keep it symmetrical. TLBR must match unless content naturally requires asymmetry.
|
|
150
|
+
|
|
151
|
+
```css
|
|
152
|
+
/* Good */
|
|
153
|
+
padding: 16px;
|
|
154
|
+
padding: 12px 16px; /* Only when horizontal needs more room */
|
|
155
|
+
|
|
156
|
+
/* Bad — no system */
|
|
157
|
+
padding: 24px 16px 12px 16px;
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Depth & Elevation Strategy
|
|
163
|
+
|
|
164
|
+
Choose ONE approach and commit:
|
|
165
|
+
|
|
166
|
+
### Borders-only (flat)
|
|
167
|
+
Clean, technical, dense. For utility-focused tools where information density matters.
|
|
168
|
+
|
|
169
|
+
```css
|
|
170
|
+
--border: rgba(0, 0, 0, 0.08);
|
|
171
|
+
--border-subtle: rgba(0, 0, 0, 0.05);
|
|
172
|
+
border: 0.5px solid var(--border);
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Linear, Raycast, and developer tools use this approach.
|
|
176
|
+
|
|
177
|
+
### Subtle single shadows
|
|
178
|
+
Soft lift without complexity. For approachable products that want gentle depth.
|
|
179
|
+
|
|
180
|
+
```css
|
|
181
|
+
--shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Layered shadows
|
|
185
|
+
Rich, premium, dimensional. For cards that need to feel like physical objects.
|
|
186
|
+
|
|
187
|
+
```css
|
|
188
|
+
--shadow-layered:
|
|
189
|
+
0 0 0 0.5px rgba(0, 0, 0, 0.05),
|
|
190
|
+
0 1px 2px rgba(0, 0, 0, 0.04),
|
|
191
|
+
0 2px 4px rgba(0, 0, 0, 0.03),
|
|
192
|
+
0 4px 8px rgba(0, 0, 0, 0.02);
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Stripe and Mercury use layered shadows.
|
|
196
|
+
|
|
197
|
+
### Surface color shifts
|
|
198
|
+
Background tints establish hierarchy without any shadows.
|
|
199
|
+
|
|
200
|
+
```css
|
|
201
|
+
/* Card on page */
|
|
202
|
+
background: #fff; /* card */
|
|
203
|
+
/* sits on */
|
|
204
|
+
background: #f8fafc; /* page - already feels elevated */
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
**Never mix approaches.** Shadows + dramatic borders = visual confusion.
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## Border Radius
|
|
212
|
+
|
|
213
|
+
Build a scale matching product personality:
|
|
214
|
+
|
|
215
|
+
| Product feel | Small | Medium | Large |
|
|
216
|
+
|-------------|-------|--------|-------|
|
|
217
|
+
| **Technical** | 2px | 4px | 6px |
|
|
218
|
+
| **Balanced** | 4px | 6px | 8px |
|
|
219
|
+
| **Friendly** | 6px | 8px | 12px |
|
|
220
|
+
| **Soft** | 8px | 12px | 16px |
|
|
221
|
+
|
|
222
|
+
Small for inputs/buttons, medium for cards, large for modals. Don't mix sharp and soft randomly.
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## Typography Hierarchy
|
|
227
|
+
|
|
228
|
+
Distinct levels distinguishable at a glance:
|
|
229
|
+
|
|
230
|
+
| Level | Size | Weight | Tracking | Use |
|
|
231
|
+
|-------|------|--------|----------|-----|
|
|
232
|
+
| **Display** | 24-32px | 600-700 | -0.02em | Page hero, main title |
|
|
233
|
+
| **Heading** | 18-20px | 600 | -0.01em | Section headers |
|
|
234
|
+
| **Body** | 14-16px | 400 | normal | Content, descriptions |
|
|
235
|
+
| **Label** | 12-13px | 500 | 0.01em | UI labels, badges |
|
|
236
|
+
| **Data** | 13-14px mono | 400 | 0 | Numbers, IDs, timestamps |
|
|
237
|
+
|
|
238
|
+
Don't rely on size alone — combine size, weight, and letter-spacing.
|
|
239
|
+
|
|
240
|
+
### Monospace for Data
|
|
241
|
+
|
|
242
|
+
Numbers, IDs, codes, timestamps belong in monospace. Use `font-variant-numeric: tabular-nums` for columnar alignment.
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## Card Layouts
|
|
247
|
+
|
|
248
|
+
Design each card's internal structure for its specific content — but keep the surface treatment consistent:
|
|
249
|
+
|
|
250
|
+
- Same border weight across all cards
|
|
251
|
+
- Same shadow depth (or none)
|
|
252
|
+
- Same corner radius
|
|
253
|
+
- Same padding scale
|
|
254
|
+
|
|
255
|
+
A metric card doesn't have to look like a settings card. Internal structure varies; surface treatment stays consistent.
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## Controls
|
|
260
|
+
|
|
261
|
+
Never use native form elements for styled UI:
|
|
262
|
+
- `<select>` renders OS-native dropdown — build custom trigger + positioned dropdown
|
|
263
|
+
- `<input type="date">` renders OS-native calendar — build custom input + calendar popover
|
|
264
|
+
- Custom checkbox/radio: styled div with state management
|
|
265
|
+
|
|
266
|
+
Custom select triggers must use `display: inline-flex` with `white-space: nowrap`.
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## Iconography
|
|
271
|
+
|
|
272
|
+
Icons clarify, not decorate. If removing an icon loses no meaning, remove it.
|
|
273
|
+
|
|
274
|
+
- Choose one icon set (e.g., Lucide) and use it consistently
|
|
275
|
+
- Standalone icons: give presence with subtle background containers
|
|
276
|
+
- Icons next to text: align optically, not mathematically
|
|
277
|
+
- Icon-only buttons: always include `aria-label`
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## Animation
|
|
282
|
+
|
|
283
|
+
| Context | Duration | Easing |
|
|
284
|
+
|---------|----------|--------|
|
|
285
|
+
| Hover, focus | ~150ms | ease-out |
|
|
286
|
+
| Dropdowns, panels | 200-250ms | ease-out |
|
|
287
|
+
| Page transitions | 250-350ms | ease-in-out |
|
|
288
|
+
|
|
289
|
+
Avoid spring/bounce effects in professional interfaces. They feel playful, not serious.
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
## Interactive States
|
|
294
|
+
|
|
295
|
+
Every interactive element needs all states:
|
|
296
|
+
|
|
297
|
+
| State | Visual treatment |
|
|
298
|
+
|-------|-----------------|
|
|
299
|
+
| **Default** | Base appearance |
|
|
300
|
+
| **Hover** | Subtle bg shift or border emphasis |
|
|
301
|
+
| **Active/Pressed** | Slightly darker than hover |
|
|
302
|
+
| **Focus** | Focus ring (border-stronger or accent ring) |
|
|
303
|
+
| **Disabled** | Reduced opacity (0.5), no pointer events |
|
|
304
|
+
|
|
305
|
+
Data elements need additional states: **loading** (skeleton/spinner), **empty** (illustration + action), **error** (message + retry).
|
|
306
|
+
|
|
307
|
+
Missing states make an interface feel like a photograph of software.
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
## Navigation Context
|
|
312
|
+
|
|
313
|
+
Screens need grounding — a data table floating in space feels like a component demo.
|
|
314
|
+
|
|
315
|
+
Include:
|
|
316
|
+
- **Navigation** — sidebar or top nav showing position in the app
|
|
317
|
+
- **Location indicator** — breadcrumbs, page title, or active nav state
|
|
318
|
+
- **User context** — who's logged in, what workspace/org
|
|
319
|
+
|
|
320
|
+
**Sidebar approach:** Same background as main content with border separation. Different colors fragment the visual space.
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## Dark Mode
|
|
325
|
+
|
|
326
|
+
Dark interfaces have different needs:
|
|
327
|
+
|
|
328
|
+
- **Borders over shadows** — shadows are less visible on dark backgrounds; lean on borders for definition
|
|
329
|
+
- **Desaturate semantics** — success/warning/error colors often need slight desaturation for dark surfaces
|
|
330
|
+
- **Same hierarchy, inverted values** — higher elevation = slightly lighter (opposite of light mode)
|
|
331
|
+
- **Surface shifts stay subtle** — a few percentage points of lightness between levels, not dramatic jumps
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## Avoid
|
|
336
|
+
|
|
337
|
+
- **Harsh borders** — if borders are the first thing you see, they're too strong
|
|
338
|
+
- **Dramatic surface jumps** — elevation changes should be whisper-quiet
|
|
339
|
+
- **Inconsistent spacing** — the clearest sign of no system
|
|
340
|
+
- **Mixed depth strategies** — pick one approach and commit
|
|
341
|
+
- **Missing interaction states** — hover, focus, disabled, loading, error
|
|
342
|
+
- **Dramatic drop shadows** — shadows should be subtle, not attention-grabbing
|
|
343
|
+
- **Large radius on small elements**
|
|
344
|
+
- **Pure white cards on colored backgrounds**
|
|
345
|
+
- **Thick decorative borders**
|
|
346
|
+
- **Gradients and color for decoration** — color should mean something
|
|
347
|
+
- **Multiple accent colors** — dilutes focus
|
|
348
|
+
- **Different hues for different surfaces** — keep the same hue, shift only lightness
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Design System — Precision & Density
|
|
2
|
+
|
|
3
|
+
Starter template for dashboard, admin, and data-heavy interfaces. Adapt values to your product's world — this is a starting point, not a prescription.
|
|
4
|
+
|
|
5
|
+
## Direction
|
|
6
|
+
|
|
7
|
+
**Personality:** Precision & Density
|
|
8
|
+
**Foundation:** Cool (slate)
|
|
9
|
+
**Depth:** Borders-only
|
|
10
|
+
|
|
11
|
+
## Tokens
|
|
12
|
+
|
|
13
|
+
### Spacing
|
|
14
|
+
Base: 4px
|
|
15
|
+
Scale: 4, 8, 12, 16, 24, 32
|
|
16
|
+
|
|
17
|
+
### Colors
|
|
18
|
+
```
|
|
19
|
+
--fg-primary: slate-900
|
|
20
|
+
--fg-secondary: slate-600
|
|
21
|
+
--fg-tertiary: slate-400
|
|
22
|
+
--fg-muted: slate-200
|
|
23
|
+
--border-default: rgba(0, 0, 0, 0.08)
|
|
24
|
+
--border-subtle: rgba(0, 0, 0, 0.05)
|
|
25
|
+
--accent: blue-600
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Radius
|
|
29
|
+
Scale: 4px, 6px, 8px (sharp, technical)
|
|
30
|
+
|
|
31
|
+
### Typography
|
|
32
|
+
Font: system-ui (fast, native feel)
|
|
33
|
+
Scale: 11, 12, 13, 14 (base), 16, 18
|
|
34
|
+
Weights: 400, 500, 600
|
|
35
|
+
Mono: SF Mono, Consolas (for data)
|
|
36
|
+
|
|
37
|
+
## Patterns
|
|
38
|
+
|
|
39
|
+
### Button
|
|
40
|
+
- Height: 32px (compact)
|
|
41
|
+
- Padding: 8px 12px
|
|
42
|
+
- Radius: 4px
|
|
43
|
+
- Font: 13px, 500 weight
|
|
44
|
+
- Border: 1px solid
|
|
45
|
+
- Usage: Actions in dense layouts
|
|
46
|
+
|
|
47
|
+
### Card
|
|
48
|
+
- Border: 0.5px solid (subtle)
|
|
49
|
+
- Padding: 12px
|
|
50
|
+
- Radius: 6px
|
|
51
|
+
- Shadow: none
|
|
52
|
+
- Usage: Data containers, metric displays
|
|
53
|
+
|
|
54
|
+
### Table Cell
|
|
55
|
+
- Padding: 8px 12px
|
|
56
|
+
- Font: 13px tabular-nums
|
|
57
|
+
- Border-bottom: 1px solid (subtle)
|
|
58
|
+
|
|
59
|
+
### Input
|
|
60
|
+
- Height: 32px
|
|
61
|
+
- Padding: 6px 8px
|
|
62
|
+
- Radius: 4px
|
|
63
|
+
- Background: inset (slightly darker)
|
|
64
|
+
- Border: 1px solid (default)
|
|
65
|
+
|
|
66
|
+
## Decisions
|
|
67
|
+
|
|
68
|
+
| Decision | Rationale |
|
|
69
|
+
|----------|-----------|
|
|
70
|
+
| Borders-only | Information density matters more than lift |
|
|
71
|
+
| Compact sizing | Power users, high information density |
|
|
72
|
+
| System fonts | Performance, native feel |
|
|
73
|
+
| Sharp radius | Technical, precise personality |
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Design System — Warmth & Approachability
|
|
2
|
+
|
|
3
|
+
Starter template for collaborative, creative, and consumer-facing apps. Adapt values to your product's world — this is a starting point, not a prescription.
|
|
4
|
+
|
|
5
|
+
## Direction
|
|
6
|
+
|
|
7
|
+
**Personality:** Warmth & Approachability
|
|
8
|
+
**Foundation:** Warm (stone)
|
|
9
|
+
**Depth:** Subtle shadows
|
|
10
|
+
|
|
11
|
+
## Tokens
|
|
12
|
+
|
|
13
|
+
### Spacing
|
|
14
|
+
Base: 4px
|
|
15
|
+
Scale: 8, 12, 16, 24, 32, 48 (generous)
|
|
16
|
+
|
|
17
|
+
### Colors
|
|
18
|
+
```
|
|
19
|
+
--fg-primary: stone-900
|
|
20
|
+
--fg-secondary: stone-600
|
|
21
|
+
--fg-tertiary: stone-400
|
|
22
|
+
--fg-muted: stone-200
|
|
23
|
+
--accent: orange-500
|
|
24
|
+
--shadow: 0 1px 3px rgba(0, 0, 0, 0.08)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Radius
|
|
28
|
+
Scale: 8px, 12px, 16px (soft, friendly)
|
|
29
|
+
|
|
30
|
+
### Typography
|
|
31
|
+
Font: Inter (approachable, readable)
|
|
32
|
+
Scale: 13, 14, 15, 16 (base), 18, 20, 24
|
|
33
|
+
Weights: 400, 500, 600
|
|
34
|
+
|
|
35
|
+
## Patterns
|
|
36
|
+
|
|
37
|
+
### Button
|
|
38
|
+
- Height: 40px (comfortable)
|
|
39
|
+
- Padding: 12px 20px
|
|
40
|
+
- Radius: 8px
|
|
41
|
+
- Font: 15px, 500 weight
|
|
42
|
+
- Shadow: subtle
|
|
43
|
+
- Usage: Primary actions, comfortable click targets
|
|
44
|
+
|
|
45
|
+
### Card
|
|
46
|
+
- Border: none
|
|
47
|
+
- Padding: 20px
|
|
48
|
+
- Radius: 12px
|
|
49
|
+
- Shadow: 0 1px 3px rgba(0,0,0,0.08)
|
|
50
|
+
- Background: white on stone-50
|
|
51
|
+
- Usage: Content containers, feature cards
|
|
52
|
+
|
|
53
|
+
### Input
|
|
54
|
+
- Height: 44px
|
|
55
|
+
- Padding: 12px 16px
|
|
56
|
+
- Radius: 8px
|
|
57
|
+
- Border: 1.5px solid (subtle)
|
|
58
|
+
- Usage: Form fields, generous touch targets
|
|
59
|
+
|
|
60
|
+
## Decisions
|
|
61
|
+
|
|
62
|
+
| Decision | Rationale |
|
|
63
|
+
|----------|-----------|
|
|
64
|
+
| Subtle shadows | Gentle depth, approachable feel |
|
|
65
|
+
| Generous spacing | Focused tasks, not cramming information |
|
|
66
|
+
| Warm foundation | Human, comfortable, inviting |
|
|
67
|
+
| Soft radius | Friendly, organic personality |
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# Validation & Memory Management
|
|
2
|
+
|
|
3
|
+
When and how to update `.interface-design/system.md`. Rules for pattern persistence and consistency verification.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## When to Add Patterns
|
|
8
|
+
|
|
9
|
+
Add to system.md when:
|
|
10
|
+
- Component used **2+ times** in the project
|
|
11
|
+
- Pattern is **reusable** across different contexts
|
|
12
|
+
- Has **specific measurements** worth remembering (height, padding, radius, shadow)
|
|
13
|
+
|
|
14
|
+
## When NOT to Add
|
|
15
|
+
|
|
16
|
+
- **One-off components** — unique to a single page/context
|
|
17
|
+
- **Temporary experiments** — still iterating on the design
|
|
18
|
+
- **Variations better handled with props** — a Button with size variants doesn't need separate patterns per size
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Pattern Format
|
|
23
|
+
|
|
24
|
+
Keep patterns concise and scannable:
|
|
25
|
+
|
|
26
|
+
```markdown
|
|
27
|
+
### Button Primary
|
|
28
|
+
- Height: 36px
|
|
29
|
+
- Padding: 12px 16px
|
|
30
|
+
- Radius: 6px
|
|
31
|
+
- Font: 14px, 500 weight
|
|
32
|
+
- Usage: Primary actions, form submits
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Include:
|
|
36
|
+
- Name (component + variant)
|
|
37
|
+
- Key measurements (height, padding, radius)
|
|
38
|
+
- Typography if specific (size, weight)
|
|
39
|
+
- Usage context (when to use this pattern)
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Pattern Reuse Rules
|
|
44
|
+
|
|
45
|
+
Before creating any component, **check system.md first:**
|
|
46
|
+
|
|
47
|
+
1. **Pattern exists?** Use it exactly. Don't reinvent.
|
|
48
|
+
2. **Need a variation?** Extend the existing pattern, don't create a new one from scratch.
|
|
49
|
+
3. **New pattern type?** Build it, then add to system.md after first use.
|
|
50
|
+
4. **Pattern outdated?** Update the system.md entry, don't just override silently.
|
|
51
|
+
|
|
52
|
+
Memory compounds: each pattern saved makes future work faster and more consistent.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## system.md Structure
|
|
57
|
+
|
|
58
|
+
```markdown
|
|
59
|
+
# Design System
|
|
60
|
+
|
|
61
|
+
## Direction
|
|
62
|
+
Personality: [Precision & Density / Warmth / etc]
|
|
63
|
+
Foundation: [Cool slate / Warm stone / etc]
|
|
64
|
+
Depth: [Borders-only / Subtle shadows / Layered]
|
|
65
|
+
|
|
66
|
+
## Tokens
|
|
67
|
+
### Spacing
|
|
68
|
+
Base: 4px
|
|
69
|
+
Scale: 4, 8, 12, 16, 24, 32
|
|
70
|
+
|
|
71
|
+
### Colors
|
|
72
|
+
--foreground: [value]
|
|
73
|
+
--secondary: [value]
|
|
74
|
+
--accent: [value]
|
|
75
|
+
|
|
76
|
+
### Radius
|
|
77
|
+
Scale: [values]
|
|
78
|
+
|
|
79
|
+
### Typography
|
|
80
|
+
Font: [family]
|
|
81
|
+
Scale: [sizes]
|
|
82
|
+
Weights: [values]
|
|
83
|
+
|
|
84
|
+
## Patterns
|
|
85
|
+
### [Component Name]
|
|
86
|
+
- [Key properties]
|
|
87
|
+
- Usage: [when to use]
|
|
88
|
+
|
|
89
|
+
## Decisions
|
|
90
|
+
| Decision | Rationale | Date |
|
|
91
|
+
|----------|-----------|------|
|
|
92
|
+
| [choice] | [why] | [when] |
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Consistency Checks
|
|
98
|
+
|
|
99
|
+
If system.md defines values, verify against them:
|
|
100
|
+
|
|
101
|
+
| Check | Rule |
|
|
102
|
+
|-------|------|
|
|
103
|
+
| **Spacing** | All values multiples of defined base unit |
|
|
104
|
+
| **Depth** | Using declared strategy throughout (borders-only = no shadows) |
|
|
105
|
+
| **Colors** | Using defined palette, no random hex codes |
|
|
106
|
+
| **Patterns** | Reusing documented patterns instead of creating new |
|
|
107
|
+
| **Radius** | Using defined scale, not ad-hoc values |
|
|
108
|
+
| **Typography** | Using defined font stack and size scale |
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## When to Update system.md
|
|
113
|
+
|
|
114
|
+
| Trigger | Action |
|
|
115
|
+
|---------|--------|
|
|
116
|
+
| New reusable component built | Add pattern after confirmation |
|
|
117
|
+
| Existing pattern modified | Update pattern entry |
|
|
118
|
+
| Direction change | Update Direction section, verify cascading consistency |
|
|
119
|
+
| New token added | Add to Tokens section |
|
|
120
|
+
| Design decision made | Add to Decisions table with rationale |
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Offering to Save
|
|
125
|
+
|
|
126
|
+
After completing any UI building task, always offer:
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
"Want me to save these patterns for future sessions?"
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
If yes, write or update `.interface-design/system.md` with:
|
|
133
|
+
- Direction and feel (if new project)
|
|
134
|
+
- Depth strategy
|
|
135
|
+
- Spacing base unit
|
|
136
|
+
- Any new component patterns
|
|
137
|
+
- Key decisions with rationale
|