opencodekit 0.16.14 → 0.16.17
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/dist/index.js +1 -1
- package/dist/template/.opencode/AGENTS.md +1 -1
- package/dist/template/.opencode/agent/plan.md +77 -161
- package/dist/template/.opencode/command/create.md +75 -307
- package/dist/template/.opencode/command/design.md +53 -589
- package/dist/template/.opencode/command/handoff.md +76 -180
- package/dist/template/.opencode/command/init.md +45 -211
- package/dist/template/.opencode/command/plan.md +62 -514
- package/dist/template/.opencode/command/pr.md +56 -226
- package/dist/template/.opencode/command/research.md +55 -266
- package/dist/template/.opencode/command/resume.md +33 -138
- package/dist/template/.opencode/command/review-codebase.md +54 -202
- package/dist/template/.opencode/command/ship.md +78 -127
- package/dist/template/.opencode/command/start.md +47 -577
- package/dist/template/.opencode/command/status.md +55 -354
- package/dist/template/.opencode/command/ui-review.md +52 -298
- package/dist/template/.opencode/command/verify.md +36 -250
- package/dist/template/.opencode/dcp.jsonc +10 -9
- package/dist/template/.opencode/memory.db-shm +0 -0
- package/dist/template/.opencode/memory.db-wal +0 -0
- package/dist/template/.opencode/plugin/README.md +8 -4
- package/dist/template/.opencode/plugin/swarm-enforcer.ts +182 -27
- package/dist/template/.opencode/skill/augment-context-engine/SKILL.md +112 -0
- package/dist/template/.opencode/skill/augment-context-engine/mcp.json +6 -0
- package/dist/template/.opencode/skill/core-data-expert/SKILL.md +82 -0
- package/dist/template/.opencode/skill/core-data-expert/references/batch-operations.md +543 -0
- package/dist/template/.opencode/skill/core-data-expert/references/cloudkit-integration.md +259 -0
- package/dist/template/.opencode/skill/core-data-expert/references/concurrency.md +522 -0
- package/dist/template/.opencode/skill/core-data-expert/references/fetch-requests.md +643 -0
- package/dist/template/.opencode/skill/core-data-expert/references/glossary.md +233 -0
- package/dist/template/.opencode/skill/core-data-expert/references/migration.md +393 -0
- package/dist/template/.opencode/skill/core-data-expert/references/model-configuration.md +597 -0
- package/dist/template/.opencode/skill/core-data-expert/references/performance.md +300 -0
- package/dist/template/.opencode/skill/core-data-expert/references/persistent-history.md +553 -0
- package/dist/template/.opencode/skill/core-data-expert/references/project-audit.md +60 -0
- package/dist/template/.opencode/skill/core-data-expert/references/saving.md +574 -0
- package/dist/template/.opencode/skill/core-data-expert/references/stack-setup.md +625 -0
- package/dist/template/.opencode/skill/core-data-expert/references/testing.md +300 -0
- package/dist/template/.opencode/skill/core-data-expert/references/threading.md +589 -0
- package/dist/template/.opencode/skill/swift-concurrency/SKILL.md +246 -0
- package/dist/template/.opencode/skill/swift-concurrency/references/actors.md +640 -0
- package/dist/template/.opencode/skill/swift-concurrency/references/async-algorithms.md +822 -0
- package/dist/template/.opencode/skill/swift-concurrency/references/async-await-basics.md +249 -0
- package/dist/template/.opencode/skill/swift-concurrency/references/async-sequences.md +670 -0
- package/dist/template/.opencode/skill/swift-concurrency/references/core-data.md +533 -0
- package/dist/template/.opencode/skill/swift-concurrency/references/glossary.md +128 -0
- package/dist/template/.opencode/skill/swift-concurrency/references/linting.md +142 -0
- package/dist/template/.opencode/skill/swift-concurrency/references/memory-management.md +542 -0
- package/dist/template/.opencode/skill/swift-concurrency/references/migration.md +1076 -0
- package/dist/template/.opencode/skill/swift-concurrency/references/performance.md +574 -0
- package/dist/template/.opencode/skill/swift-concurrency/references/sendable.md +578 -0
- package/dist/template/.opencode/skill/swift-concurrency/references/tasks.md +604 -0
- package/dist/template/.opencode/skill/swift-concurrency/references/testing.md +565 -0
- package/dist/template/.opencode/skill/swift-concurrency/references/threading.md +452 -0
- package/dist/template/.opencode/skill/swiftui-expert-skill/SKILL.md +290 -0
- package/dist/template/.opencode/skill/swiftui-expert-skill/references/animation-advanced.md +351 -0
- package/dist/template/.opencode/skill/swiftui-expert-skill/references/animation-basics.md +284 -0
- package/dist/template/.opencode/skill/swiftui-expert-skill/references/animation-transitions.md +326 -0
- package/dist/template/.opencode/skill/swiftui-expert-skill/references/image-optimization.md +286 -0
- package/dist/template/.opencode/skill/swiftui-expert-skill/references/layout-best-practices.md +312 -0
- package/dist/template/.opencode/skill/swiftui-expert-skill/references/liquid-glass.md +377 -0
- package/dist/template/.opencode/skill/swiftui-expert-skill/references/list-patterns.md +153 -0
- package/dist/template/.opencode/skill/swiftui-expert-skill/references/modern-apis.md +400 -0
- package/dist/template/.opencode/skill/swiftui-expert-skill/references/performance-patterns.md +377 -0
- package/dist/template/.opencode/skill/swiftui-expert-skill/references/scroll-patterns.md +305 -0
- package/dist/template/.opencode/skill/swiftui-expert-skill/references/sheet-navigation-patterns.md +292 -0
- package/dist/template/.opencode/skill/swiftui-expert-skill/references/state-management.md +447 -0
- package/dist/template/.opencode/skill/swiftui-expert-skill/references/text-formatting.md +285 -0
- package/dist/template/.opencode/skill/swiftui-expert-skill/references/view-structure.md +276 -0
- package/package.json +1 -1
|
@@ -1,648 +1,112 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: UI/UX visual design with aesthetic direction and code output
|
|
3
|
-
argument-hint: "<component|page|system
|
|
3
|
+
argument-hint: "<component|page|system> [topic] [--quick]"
|
|
4
4
|
agent: vision
|
|
5
|
-
subtask: true
|
|
6
5
|
---
|
|
7
6
|
|
|
8
7
|
# Design: $ARGUMENTS
|
|
9
8
|
|
|
10
|
-
|
|
9
|
+
Design a component, page, or design system with a clear aesthetic point of view.
|
|
11
10
|
|
|
12
|
-
|
|
11
|
+
> **Design track (optional):** Not part of the core `/create → /start → /ship` workflow.
|
|
12
|
+
> Use when you need visual design guidance before or during implementation.
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
skill({ name: "development-lifecycle" }); // Phase guidance
|
|
16
|
-
skill({ name: "beads" });
|
|
17
|
-
skill({ name: "frontend-design" }); // Design system guidance
|
|
18
|
-
skill({ name: "memory-system" });
|
|
19
|
-
```
|
|
14
|
+
## Parse Arguments
|
|
20
15
|
|
|
21
|
-
|
|
16
|
+
| Argument | Default | Description |
|
|
17
|
+
| ----------- | -------- | ------------------------------------------- |
|
|
18
|
+
| `component` | — | Design a specific component |
|
|
19
|
+
| `page` | — | Design a page layout |
|
|
20
|
+
| `system` | — | Create or extend a design system |
|
|
21
|
+
| `[topic]` | required | What to design (e.g. "button", "dashboard") |
|
|
22
|
+
| `--quick` | false | High-level direction only, skip code |
|
|
22
23
|
|
|
23
|
-
|
|
24
|
+
## Load Skills
|
|
24
25
|
|
|
25
26
|
```typescript
|
|
26
|
-
//
|
|
27
|
-
memory_search({ query: "[component/page name] design UI", limit: 3 });
|
|
28
|
-
|
|
29
|
-
// Find design system decisions
|
|
30
|
-
memory_search({ query: "design system colors typography", limit: 3 });
|
|
27
|
+
skill({ name: "frontend-design" }); // Design system guidance, anti-patterns, references
|
|
31
28
|
```
|
|
32
29
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
- Existing aesthetic direction decisions
|
|
36
|
-
- Color and typography choices already made
|
|
37
|
-
- UI patterns that worked well
|
|
38
|
-
|
|
39
|
-
## Phase 1: Context Discovery
|
|
40
|
-
|
|
41
|
-
Parse `$ARGUMENTS` to determine design task:
|
|
42
|
-
|
|
43
|
-
| Task Type | Description | Output Focus |
|
|
44
|
-
| ------------------ | ------------------------------ | --------------------------- |
|
|
45
|
-
| `component <name>` | Design a specific component | Component spec + code |
|
|
46
|
-
| `page <name>` | Design a page layout | Layout structure + sections |
|
|
47
|
-
| `system` | Create/extend design system | Tokens + guidelines |
|
|
48
|
-
| `review <path>` | Review existing UI for quality | Findings + recommendations |
|
|
49
|
-
|
|
50
|
-
**Depth** (default: `--deep`):
|
|
51
|
-
|
|
52
|
-
- `--quick` - High-level direction + key decisions only (~5 min)
|
|
53
|
-
- `--deep` - Full design spec with code output (~15-20 min)
|
|
30
|
+
---
|
|
54
31
|
|
|
55
|
-
|
|
32
|
+
## Phase 1: Detect Existing Design System
|
|
56
33
|
|
|
57
34
|
```typescript
|
|
58
35
|
glob({ pattern: "**/tailwind.config.{js,ts,mjs}" });
|
|
59
36
|
glob({ pattern: "**/globals.css" });
|
|
60
37
|
glob({ pattern: "**/components.json" }); // shadcn
|
|
61
|
-
|
|
62
|
-
// Read existing styles
|
|
63
|
-
read({ filePath: "tailwind.config.js" });
|
|
64
|
-
read({ filePath: "src/styles/globals.css" });
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
**Identify component library:**
|
|
68
|
-
|
|
69
|
-
| File/Pattern Found | Library |
|
|
70
|
-
| ------------------------------------ | ---------------- |
|
|
71
|
-
| `components.json` with shadcn schema | shadcn/ui |
|
|
72
|
-
| `@mui/material` in package.json | Material UI |
|
|
73
|
-
| `@chakra-ui/*` | Chakra UI |
|
|
74
|
-
| `@radix-ui/*` only | Radix Primitives |
|
|
75
|
-
| None detected | Custom system |
|
|
76
|
-
|
|
77
|
-
---
|
|
78
|
-
|
|
79
|
-
## Phase 2: Aesthetic Direction (DECISION GATE)
|
|
80
|
-
|
|
81
|
-
> **frontend-design skill already loaded above** - provides detailed design system guidance
|
|
82
|
-
|
|
83
|
-
**BEFORE any design work, you MUST state:**
|
|
84
|
-
|
|
85
|
-
1. **Aesthetic direction** — Which style(s)?
|
|
86
|
-
2. **Why** — How does it fit the context/brand?
|
|
87
|
-
|
|
88
|
-
### Available Directions
|
|
89
|
-
|
|
90
|
-
Pick ONE (or combine 2 max):
|
|
91
|
-
|
|
92
|
-
| Direction | Character | Best For |
|
|
93
|
-
| -------------------- | ----------------------------------------------- | ---------------------------------- |
|
|
94
|
-
| **Neo-Brutalist** | Raw textures, bold type, harsh contrasts | Developer tools, creative agencies |
|
|
95
|
-
| **Soft Minimalism** | Muted palettes, generous whitespace | SaaS, productivity apps |
|
|
96
|
-
| **Retro-Futuristic** | CRT effects, scan lines, neon | Gaming, entertainment |
|
|
97
|
-
| **Editorial** | Dynamic grids, mixed media, bold type | Magazines, portfolios |
|
|
98
|
-
| **Glass Morphism** | Translucent layers, backdrop blur, depth | Dashboards, modern apps |
|
|
99
|
-
| **Dark Academia** | Rich textures, serif type, scholarly | Education, libraries |
|
|
100
|
-
| **Swiss Design** | Grid systems, sans-serif, functional | Enterprise, documentation |
|
|
101
|
-
| **Art Deco** | Geometric patterns, gold accents, luxury | Finance, premium products |
|
|
102
|
-
| **Y2K Revival** | Gradients, metallics, early-web nostalgia | Youth brands, creative |
|
|
103
|
-
| **Organic/Natural** | Flowing shapes, nature palettes, paper textures | Wellness, sustainability |
|
|
104
|
-
|
|
105
|
-
**Override with flag:** `--direction:neo-brutalist` or `--direction:soft-minimalism+swiss`
|
|
106
|
-
|
|
107
|
-
### Direction Declaration
|
|
108
|
-
|
|
109
|
-
```markdown
|
|
110
|
-
## Aesthetic Direction
|
|
111
|
-
|
|
112
|
-
**Selected:** [Direction name(s)]
|
|
113
|
-
|
|
114
|
-
**Rationale:** [1-2 sentences explaining why this fits]
|
|
115
|
-
|
|
116
|
-
**Key characteristics I will apply:**
|
|
117
|
-
|
|
118
|
-
- [Specific element 1]
|
|
119
|
-
- [Specific element 2]
|
|
120
|
-
- [Specific element 3]
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
---
|
|
124
|
-
|
|
125
|
-
## Phase 3: Typography Specification
|
|
126
|
-
|
|
127
|
-
### Font Selection
|
|
128
|
-
|
|
129
|
-
**Recommended fonts by context:**
|
|
130
|
-
|
|
131
|
-
| Context | Primary | Secondary |
|
|
132
|
-
| --------------- | ----------------------------------------------- | -------------------- |
|
|
133
|
-
| Code/Tech | JetBrains Mono, Fira Code, Space Mono | Inter, IBM Plex Sans |
|
|
134
|
-
| Editorial | Playfair Display, Crimson Pro, Instrument Serif | Source Sans 3 |
|
|
135
|
-
| Display/Bold | Bebas Neue, Oswald, Archivo Black | Work Sans |
|
|
136
|
-
| Technical/Clean | IBM Plex, Source Sans 3, Work Sans | JetBrains Mono |
|
|
137
|
-
| Distinctive | Bricolage Grotesque, Syne, Outfit | Space Grotesk |
|
|
138
|
-
|
|
139
|
-
**AVOID without purpose:** Inter, Roboto, Arial, system fonts
|
|
140
|
-
|
|
141
|
-
### Type Scale
|
|
142
|
-
|
|
143
|
-
```css
|
|
144
|
-
/* Type scale - adjust base for your design */
|
|
145
|
-
:root {
|
|
146
|
-
--font-sans: "Outfit", system-ui, sans-serif;
|
|
147
|
-
--font-mono: "JetBrains Mono", monospace;
|
|
148
|
-
|
|
149
|
-
/* Scale: 1.25 ratio (Major Third) */
|
|
150
|
-
--text-xs: 0.64rem; /* 10px */
|
|
151
|
-
--text-sm: 0.8rem; /* 13px */
|
|
152
|
-
--text-base: 1rem; /* 16px */
|
|
153
|
-
--text-lg: 1.25rem; /* 20px */
|
|
154
|
-
--text-xl: 1.563rem; /* 25px */
|
|
155
|
-
--text-2xl: 1.953rem; /* 31px */
|
|
156
|
-
--text-3xl: 2.441rem; /* 39px */
|
|
157
|
-
--text-4xl: 3.052rem; /* 49px */
|
|
158
|
-
|
|
159
|
-
/* Line heights */
|
|
160
|
-
--leading-tight: 1.1;
|
|
161
|
-
--leading-snug: 1.3;
|
|
162
|
-
--leading-normal: 1.5;
|
|
163
|
-
--leading-relaxed: 1.75;
|
|
164
|
-
|
|
165
|
-
/* Font weights - use extremes */
|
|
166
|
-
--font-light: 200;
|
|
167
|
-
--font-normal: 400;
|
|
168
|
-
--font-bold: 700;
|
|
169
|
-
--font-black: 900;
|
|
170
|
-
}
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
### Pairing Rules
|
|
174
|
-
|
|
175
|
-
- **High contrast = interesting**: Display + monospace, serif + geometric sans
|
|
176
|
-
- **Use weight extremes**: 200/300 vs 800/900, NOT 400 vs 600
|
|
177
|
-
- **Limit to 2 families**: One for headings, one for body
|
|
178
|
-
|
|
179
|
-
---
|
|
180
|
-
|
|
181
|
-
## Phase 4: Color Specification
|
|
182
|
-
|
|
183
|
-
### Color Palette Structure
|
|
184
|
-
|
|
185
|
-
```css
|
|
186
|
-
:root {
|
|
187
|
-
/* Primitives - raw color values */
|
|
188
|
-
--color-slate-50: #f8fafc;
|
|
189
|
-
--color-slate-100: #f1f5f9;
|
|
190
|
-
--color-slate-200: #e2e8f0;
|
|
191
|
-
--color-slate-300: #cbd5e1;
|
|
192
|
-
--color-slate-400: #94a3b8;
|
|
193
|
-
--color-slate-500: #64748b;
|
|
194
|
-
--color-slate-600: #475569;
|
|
195
|
-
--color-slate-700: #334155;
|
|
196
|
-
--color-slate-800: #1e293b;
|
|
197
|
-
--color-slate-900: #0f172a;
|
|
198
|
-
--color-slate-950: #020617;
|
|
199
|
-
|
|
200
|
-
/* Brand color (pick ONE dominant) */
|
|
201
|
-
--color-brand: #2563eb;
|
|
202
|
-
--color-brand-light: #3b82f6;
|
|
203
|
-
--color-brand-dark: #1d4ed8;
|
|
204
|
-
|
|
205
|
-
/* Accent (sharp contrast to brand) */
|
|
206
|
-
--color-accent: #f59e0b;
|
|
207
|
-
|
|
208
|
-
/* Semantic - light mode */
|
|
209
|
-
--background: var(--color-slate-50);
|
|
210
|
-
--foreground: var(--color-slate-900);
|
|
211
|
-
--muted: var(--color-slate-100);
|
|
212
|
-
--muted-foreground: var(--color-slate-500);
|
|
213
|
-
--primary: var(--color-brand);
|
|
214
|
-
--primary-foreground: white;
|
|
215
|
-
--secondary: var(--color-slate-100);
|
|
216
|
-
--secondary-foreground: var(--color-slate-900);
|
|
217
|
-
--accent: var(--color-accent);
|
|
218
|
-
--accent-foreground: var(--color-slate-900);
|
|
219
|
-
--destructive: #ef4444;
|
|
220
|
-
--destructive-foreground: white;
|
|
221
|
-
--success: #10b981;
|
|
222
|
-
--warning: #f59e0b;
|
|
223
|
-
--border: var(--color-slate-200);
|
|
224
|
-
--ring: var(--color-brand);
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
.dark {
|
|
228
|
-
--background: var(--color-slate-950);
|
|
229
|
-
--foreground: var(--color-slate-50);
|
|
230
|
-
--muted: var(--color-slate-800);
|
|
231
|
-
--muted-foreground: var(--color-slate-400);
|
|
232
|
-
--secondary: var(--color-slate-800);
|
|
233
|
-
--secondary-foreground: var(--color-slate-50);
|
|
234
|
-
--border: var(--color-slate-800);
|
|
235
|
-
}
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
### Color Anti-Patterns (NEVER DO)
|
|
239
|
-
|
|
240
|
-
| Anti-Pattern | Why It's Bad | Do Instead |
|
|
241
|
-
| --------------------------------- | -------------------------- | --------------------------------------- |
|
|
242
|
-
| Purple/blue gradient backgrounds | Overused AI slop signature | Solid colors or subtle texture |
|
|
243
|
-
| `#6366F1` or `#667eea` as primary | Generic "Tailwind indigo" | Choose distinctive brand color |
|
|
244
|
-
| Flat white `#FFFFFF` backgrounds | Harsh, sterile | Use warm white `#FAFAF9` or subtle gray |
|
|
245
|
-
| Rainbow gradients | Overwhelming, no hierarchy | Limited palette with one accent |
|
|
246
|
-
| Too many colors (>6 semantic) | Confusion, inconsistency | Stick to primary + accent + neutrals |
|
|
247
|
-
|
|
248
|
-
---
|
|
249
|
-
|
|
250
|
-
## Phase 5: Spacing & Layout
|
|
251
|
-
|
|
252
|
-
### Spacing Scale
|
|
253
|
-
|
|
254
|
-
```css
|
|
255
|
-
:root {
|
|
256
|
-
/* Base unit: 4px (or 0.25rem) */
|
|
257
|
-
--space-0: 0;
|
|
258
|
-
--space-1: 0.25rem; /* 4px */
|
|
259
|
-
--space-2: 0.5rem; /* 8px */
|
|
260
|
-
--space-3: 0.75rem; /* 12px */
|
|
261
|
-
--space-4: 1rem; /* 16px */
|
|
262
|
-
--space-5: 1.25rem; /* 20px */
|
|
263
|
-
--space-6: 1.5rem; /* 24px */
|
|
264
|
-
--space-8: 2rem; /* 32px */
|
|
265
|
-
--space-10: 2.5rem; /* 40px */
|
|
266
|
-
--space-12: 3rem; /* 48px */
|
|
267
|
-
--space-16: 4rem; /* 64px */
|
|
268
|
-
--space-20: 5rem; /* 80px */
|
|
269
|
-
--space-24: 6rem; /* 96px */
|
|
270
|
-
}
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
### Layout Patterns
|
|
274
|
-
|
|
275
|
-
```css
|
|
276
|
-
/* Container */
|
|
277
|
-
.container {
|
|
278
|
-
width: 100%;
|
|
279
|
-
max-width: 1280px;
|
|
280
|
-
margin-inline: auto;
|
|
281
|
-
padding-inline: var(--space-4);
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
@media (min-width: 640px) {
|
|
285
|
-
.container {
|
|
286
|
-
padding-inline: var(--space-6);
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
@media (min-width: 1024px) {
|
|
291
|
-
.container {
|
|
292
|
-
padding-inline: var(--space-8);
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
/* Section spacing */
|
|
297
|
-
.section {
|
|
298
|
-
padding-block: var(--space-16);
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
@media (min-width: 768px) {
|
|
302
|
-
.section {
|
|
303
|
-
padding-block: var(--space-24);
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
38
|
```
|
|
307
39
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
| Breakpoint | Width | Typical Use |
|
|
311
|
-
| ---------- | ------ | ---------------- |
|
|
312
|
-
| `sm` | 640px | Mobile landscape |
|
|
313
|
-
| `md` | 768px | Tablets |
|
|
314
|
-
| `lg` | 1024px | Small laptops |
|
|
315
|
-
| `xl` | 1280px | Desktops |
|
|
316
|
-
| `2xl` | 1536px | Large screens |
|
|
40
|
+
Read what exists. Don't design in a vacuum — build on the project's current system.
|
|
317
41
|
|
|
318
42
|
---
|
|
319
43
|
|
|
320
|
-
## Phase
|
|
321
|
-
|
|
322
|
-
### For Component Design Tasks
|
|
323
|
-
|
|
324
|
-
**Component Specification Template:**
|
|
325
|
-
|
|
326
|
-
```markdown
|
|
327
|
-
## Component: [Name]
|
|
328
|
-
|
|
329
|
-
### Purpose
|
|
330
|
-
|
|
331
|
-
[What problem does this solve?]
|
|
332
|
-
|
|
333
|
-
### Variants
|
|
334
|
-
|
|
335
|
-
| Variant | Use Case | Visual Difference |
|
|
336
|
-
| ----------- | ------------------ | ----------------- |
|
|
337
|
-
| default | Standard usage | Base styling |
|
|
338
|
-
| primary | Primary action | Brand color fill |
|
|
339
|
-
| secondary | Secondary action | Muted background |
|
|
340
|
-
| outline | Tertiary action | Border only |
|
|
341
|
-
| ghost | Minimal prominence | No border/bg |
|
|
342
|
-
| destructive | Dangerous action | Red/warning color |
|
|
343
|
-
|
|
344
|
-
### Sizes
|
|
345
|
-
|
|
346
|
-
| Size | Padding | Font Size | Min Height |
|
|
347
|
-
| ---- | --------- | --------- | ---------- |
|
|
348
|
-
| sm | 8px 12px | 14px | 32px |
|
|
349
|
-
| md | 10px 16px | 14px | 40px |
|
|
350
|
-
| lg | 12px 24px | 16px | 48px |
|
|
351
|
-
|
|
352
|
-
### States
|
|
353
|
-
|
|
354
|
-
- Default
|
|
355
|
-
- Hover (subtle lightening/darkening)
|
|
356
|
-
- Focus (ring outline)
|
|
357
|
-
- Active (pressed state)
|
|
358
|
-
- Disabled (reduced opacity, no pointer)
|
|
359
|
-
- Loading (spinner, disabled interaction)
|
|
360
|
-
|
|
361
|
-
### Accessibility
|
|
362
|
-
|
|
363
|
-
- Keyboard: [Tab, Enter, Space behavior]
|
|
364
|
-
- ARIA: [Required attributes]
|
|
365
|
-
- Focus: [Visible ring, logical order]
|
|
366
|
-
- Contrast: [Minimum 4.5:1 for text]
|
|
367
|
-
```
|
|
44
|
+
## Phase 2: Check Memory
|
|
368
45
|
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
import { cva, type VariantProps } from "class-variance-authority";
|
|
373
|
-
import { cn } from "@/lib/utils";
|
|
374
|
-
|
|
375
|
-
const buttonVariants = cva(
|
|
376
|
-
// Base styles
|
|
377
|
-
"inline-flex items-center justify-center gap-2 rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",
|
|
378
|
-
{
|
|
379
|
-
variants: {
|
|
380
|
-
variant: {
|
|
381
|
-
default: "bg-primary text-primary-foreground hover:bg-primary/90",
|
|
382
|
-
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
|
|
383
|
-
outline: "border border-input bg-background hover:bg-accent",
|
|
384
|
-
ghost: "hover:bg-accent hover:text-accent-foreground",
|
|
385
|
-
destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
|
|
386
|
-
},
|
|
387
|
-
size: {
|
|
388
|
-
sm: "h-8 px-3 text-sm",
|
|
389
|
-
md: "h-10 px-4 text-sm",
|
|
390
|
-
lg: "h-12 px-6 text-base",
|
|
391
|
-
},
|
|
392
|
-
},
|
|
393
|
-
defaultVariants: {
|
|
394
|
-
variant: "default",
|
|
395
|
-
size: "md",
|
|
396
|
-
},
|
|
397
|
-
},
|
|
398
|
-
);
|
|
399
|
-
|
|
400
|
-
interface ButtonProps
|
|
401
|
-
extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {}
|
|
402
|
-
|
|
403
|
-
export function Button({ className, variant, size, ...props }: ButtonProps) {
|
|
404
|
-
return <button className={cn(buttonVariants({ variant, size }), className)} {...props} />;
|
|
405
|
-
}
|
|
406
|
-
```
|
|
407
|
-
|
|
408
|
-
---
|
|
409
|
-
|
|
410
|
-
## Phase 7: Animation Approach
|
|
411
|
-
|
|
412
|
-
### Recommended: Orchestrated Entrance
|
|
413
|
-
|
|
414
|
-
One coordinated animation beats scattered effects:
|
|
415
|
-
|
|
416
|
-
```css
|
|
417
|
-
@keyframes revealUp {
|
|
418
|
-
from {
|
|
419
|
-
opacity: 0;
|
|
420
|
-
transform: translateY(20px);
|
|
421
|
-
}
|
|
422
|
-
to {
|
|
423
|
-
opacity: 1;
|
|
424
|
-
transform: translateY(0);
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
.hero > * {
|
|
429
|
-
animation: revealUp 600ms cubic-bezier(0.19, 1, 0.22, 1) both;
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
.hero > *:nth-child(1) {
|
|
433
|
-
animation-delay: 0ms;
|
|
434
|
-
}
|
|
435
|
-
.hero > *:nth-child(2) {
|
|
436
|
-
animation-delay: 80ms;
|
|
437
|
-
}
|
|
438
|
-
.hero > *:nth-child(3) {
|
|
439
|
-
animation-delay: 160ms;
|
|
440
|
-
}
|
|
441
|
-
.hero > *:nth-child(4) {
|
|
442
|
-
animation-delay: 240ms;
|
|
443
|
-
}
|
|
444
|
-
```
|
|
445
|
-
|
|
446
|
-
### Micro-interactions
|
|
447
|
-
|
|
448
|
-
```css
|
|
449
|
-
/* Subtle hover lift */
|
|
450
|
-
.card {
|
|
451
|
-
transition:
|
|
452
|
-
transform 200ms ease,
|
|
453
|
-
box-shadow 200ms ease;
|
|
454
|
-
}
|
|
455
|
-
.card:hover {
|
|
456
|
-
transform: translateY(-2px);
|
|
457
|
-
box-shadow: 0 8px 16px -4px rgb(0 0 0 / 0.1);
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
/* Button press */
|
|
461
|
-
.button:active {
|
|
462
|
-
transform: scale(0.98);
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
/* Focus ring */
|
|
466
|
-
.interactive:focus-visible {
|
|
467
|
-
outline: none;
|
|
468
|
-
ring: 2px solid var(--ring);
|
|
469
|
-
ring-offset: 2px;
|
|
470
|
-
}
|
|
46
|
+
```typescript
|
|
47
|
+
memory_search({ query: "[topic] design UI", limit: 3 });
|
|
48
|
+
memory_search({ query: "design system colors typography", limit: 3 });
|
|
471
49
|
```
|
|
472
50
|
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
## Phase 8: AI Slop Check (MANDATORY)
|
|
476
|
-
|
|
477
|
-
Before finalizing, verify design does NOT have ALL of these together:
|
|
478
|
-
|
|
479
|
-
### AI Slop Signature (NEVER do all together)
|
|
480
|
-
|
|
481
|
-
| Element | Check |
|
|
482
|
-
| ------------------------------------------- | --------------- |
|
|
483
|
-
| Purple/blue gradient background | [ ] NOT present |
|
|
484
|
-
| Inter or system fonts only | [ ] NOT present |
|
|
485
|
-
| Centered hero with generic subheading | [ ] NOT present |
|
|
486
|
-
| 3-column feature cards with icons | [ ] NOT present |
|
|
487
|
-
| 16px rounded corners on everything | [ ] NOT present |
|
|
488
|
-
| Drop shadows on all cards | [ ] NOT present |
|
|
489
|
-
| "Modern, clean, simple" as only descriptors | [ ] NOT present |
|
|
490
|
-
|
|
491
|
-
**Rule:** Having 1-2 is fine. Having 5+ = AI slop. Redesign.
|
|
492
|
-
|
|
493
|
-
### Quality Checklist
|
|
494
|
-
|
|
495
|
-
- [ ] Clear aesthetic point of view? (Can you name it?)
|
|
496
|
-
- [ ] Avoids AI slop signature?
|
|
497
|
-
- [ ] Would someone remember this tomorrow?
|
|
498
|
-
- [ ] Responsive design considered?
|
|
499
|
-
- [ ] Accessible (contrast, focus, keyboard)?
|
|
500
|
-
- [ ] Dark mode supported?
|
|
501
|
-
- [ ] Performance-friendly (minimal JS animations)?
|
|
51
|
+
Reuse existing aesthetic decisions. Don't contradict previous design choices unless the user asks.
|
|
502
52
|
|
|
503
53
|
---
|
|
504
54
|
|
|
505
|
-
## Phase
|
|
506
|
-
|
|
507
|
-
### For Component Design
|
|
508
|
-
|
|
509
|
-
```markdown
|
|
510
|
-
## Component Design: [Name]
|
|
511
|
-
|
|
512
|
-
### Aesthetic Direction
|
|
513
|
-
|
|
514
|
-
[Direction + rationale]
|
|
515
|
-
|
|
516
|
-
### Specification
|
|
517
|
-
|
|
518
|
-
[Variants, sizes, states table]
|
|
519
|
-
|
|
520
|
-
### Code
|
|
521
|
-
|
|
522
|
-
[Full component code with cva/cn pattern]
|
|
523
|
-
|
|
524
|
-
### Usage Examples
|
|
525
|
-
|
|
526
|
-
[3-4 usage examples]
|
|
527
|
-
|
|
528
|
-
### Accessibility Notes
|
|
529
|
-
|
|
530
|
-
[Keyboard, ARIA, contrast requirements]
|
|
531
|
-
```
|
|
532
|
-
|
|
533
|
-
### For Page Design
|
|
534
|
-
|
|
535
|
-
```markdown
|
|
536
|
-
## Page Design: [Name]
|
|
537
|
-
|
|
538
|
-
### Aesthetic Direction
|
|
55
|
+
## Phase 3: Design
|
|
539
56
|
|
|
540
|
-
|
|
57
|
+
The `frontend-design` skill provides all reference material:
|
|
541
58
|
|
|
542
|
-
|
|
59
|
+
- Aesthetic directions and design philosophy
|
|
60
|
+
- Typography and font pairing guidance
|
|
61
|
+
- Color systems (OKLCH)
|
|
62
|
+
- Animation patterns (Motion + Tailwind)
|
|
63
|
+
- Anti-patterns and AI slop avoidance
|
|
64
|
+
- shadcn/ui component patterns
|
|
65
|
+
- Tailwind v4 configuration
|
|
543
66
|
|
|
544
|
-
|
|
67
|
+
**Before designing, state:**
|
|
545
68
|
|
|
546
|
-
|
|
69
|
+
1. **Aesthetic direction** — which style and why
|
|
70
|
+
2. **Key characteristics** — 3 specific elements you'll apply
|
|
547
71
|
|
|
548
|
-
|
|
549
|
-
2. ...
|
|
72
|
+
Then produce the design:
|
|
550
73
|
|
|
551
|
-
|
|
74
|
+
| Task Type | Output |
|
|
75
|
+
| ----------- | ------------------------------------- |
|
|
76
|
+
| `component` | Spec (variants, sizes, states) + code |
|
|
77
|
+
| `page` | Layout structure + section breakdown |
|
|
78
|
+
| `system` | Tokens (CSS variables) + guidelines |
|
|
552
79
|
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
### Code Structure
|
|
556
|
-
|
|
557
|
-
[Component composition, layout CSS]
|
|
558
|
-
```
|
|
559
|
-
|
|
560
|
-
### For System Design
|
|
561
|
-
|
|
562
|
-
```markdown
|
|
563
|
-
## Design System: [Name]
|
|
564
|
-
|
|
565
|
-
### Aesthetic Direction
|
|
566
|
-
|
|
567
|
-
[Direction + rationale]
|
|
568
|
-
|
|
569
|
-
### Tokens
|
|
570
|
-
|
|
571
|
-
[Full CSS variables: colors, typography, spacing]
|
|
572
|
-
|
|
573
|
-
### Component Guidelines
|
|
574
|
-
|
|
575
|
-
[Patterns to follow, anti-patterns to avoid]
|
|
576
|
-
|
|
577
|
-
### Tailwind Config
|
|
578
|
-
|
|
579
|
-
[Full tailwind.config.js extension]
|
|
580
|
-
```
|
|
80
|
+
For `--quick`: Skip code output. Provide direction + key decisions only.
|
|
581
81
|
|
|
582
82
|
---
|
|
583
83
|
|
|
584
|
-
## Phase
|
|
585
|
-
|
|
586
|
-
### Save to Memory
|
|
587
|
-
|
|
588
|
-
**Quick design:** Output inline, no save needed
|
|
589
|
-
**Full design:** Save to `.opencode/memory/design/specs/[YYYY-MM-DD]-[topic].md`
|
|
590
|
-
|
|
591
|
-
### Record Design Decisions
|
|
592
|
-
|
|
593
|
-
For significant design choices, create an observation:
|
|
84
|
+
## Phase 4: Record Decision
|
|
594
85
|
|
|
595
86
|
```typescript
|
|
596
87
|
observation({
|
|
597
88
|
type: "decision",
|
|
598
|
-
title: "Design
|
|
599
|
-
narrative: "Chose [
|
|
600
|
-
|
|
601
|
-
concepts: "design, ui, [component type], [aesthetic]",
|
|
602
|
-
bead_id: "$ARGUMENTS", // if applicable
|
|
89
|
+
title: "Design: [topic]",
|
|
90
|
+
narrative: "Chose [direction] because [rationale]. Key tokens: [colors, fonts].",
|
|
91
|
+
concepts: "design, ui, [topic]",
|
|
603
92
|
confidence: "high",
|
|
604
93
|
});
|
|
605
94
|
```
|
|
606
95
|
|
|
607
|
-
### Create Implementation Tasks
|
|
608
|
-
|
|
609
|
-
For component/page designs:
|
|
610
|
-
|
|
611
|
-
```bash
|
|
612
|
-
br create "Implement [component/page] design" --type task --priority 2
|
|
613
|
-
```
|
|
614
|
-
|
|
615
|
-
### Bead Integration
|
|
616
|
-
|
|
617
|
-
If bead exists in `$ARGUMENTS`, design within `.beads/artifacts/<bead-id>/spec.md` constraints.
|
|
618
|
-
|
|
619
96
|
---
|
|
620
97
|
|
|
621
98
|
## Examples
|
|
622
99
|
|
|
623
100
|
```bash
|
|
624
|
-
#
|
|
625
|
-
/design
|
|
626
|
-
|
|
627
|
-
# Design a page
|
|
628
|
-
/design page landing --direction:soft-minimalism+swiss --deep
|
|
629
|
-
|
|
630
|
-
# Create/extend design system
|
|
631
|
-
/design system --direction:editorial
|
|
632
|
-
|
|
633
|
-
# Review existing UI
|
|
634
|
-
/design review src/components/ --quick
|
|
635
|
-
|
|
636
|
-
# Quick design recommendation
|
|
637
|
-
/design component modal --quick
|
|
101
|
+
/design component button # Full component design with code
|
|
102
|
+
/design page landing --quick # High-level page direction only
|
|
103
|
+
/design system # Create/extend design system tokens
|
|
638
104
|
```
|
|
639
105
|
|
|
640
|
-
---
|
|
641
|
-
|
|
642
106
|
## Related Commands
|
|
643
107
|
|
|
644
|
-
| Need
|
|
645
|
-
|
|
|
646
|
-
| Review existing UI
|
|
647
|
-
| Start
|
|
648
|
-
| Ship
|
|
108
|
+
| Need | Command |
|
|
109
|
+
| ------------------ | --------------- |
|
|
110
|
+
| Review existing UI | `/ui-review` |
|
|
111
|
+
| Start building | `/start <bead>` |
|
|
112
|
+
| Ship it | `/ship <bead>` |
|