arkaos 5.2.0 → 5.4.0
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/README.md +5 -3
- package/THE-ARKAOS-GUIDE.md +2 -2
- package/VERSION +1 -1
- package/arka/SKILL.md +18 -2
- package/config/constitution.yaml +2 -2
- package/config/skills-provenance.yaml +10 -0
- package/core/governance/evidence_checks.py +55 -10
- package/core/hooks/session_start.py +1 -1
- package/departments/brand/skills/colors/SKILL.md +3 -1
- package/departments/brand/skills/design-dna/SKILL.md +191 -0
- package/departments/brand/skills/design-dna/references/design-dna.LICENSE +21 -0
- package/departments/brand/skills/design-dna/references/generation-guide.md +209 -0
- package/departments/brand/skills/design-dna/references/schema.md +366 -0
- package/departments/brand/skills/design-system/SKILL.md +12 -3
- package/departments/dev/SKILL.md +25 -0
- package/departments/dev/skills/adversarial-review/SKILL.md +5 -0
- package/departments/dev/skills/api-design/SKILL.md +8 -0
- package/departments/dev/skills/architecture-design/SKILL.md +6 -0
- package/departments/dev/skills/build-fix/SKILL.md +8 -2
- package/departments/dev/skills/clean-code-review/SKILL.md +8 -0
- package/departments/dev/skills/code-review/SKILL.md +14 -0
- package/departments/dev/skills/dependency-audit/SKILL.md +8 -0
- package/departments/dev/skills/refactor-plan/SKILL.md +7 -0
- package/departments/dev/skills/research/SKILL.md +52 -6
- package/departments/dev/skills/stack-check/SKILL.md +9 -0
- package/harness/codex/AGENTS.md +2 -2
- package/harness/copilot/copilot-instructions.md +2 -2
- package/harness/cursor/rules/arkaos.mdc +3 -3
- package/harness/gemini/GEMINI.md +2 -2
- package/harness/opencode/AGENTS.md +2 -2
- package/harness/opencode/agents/arka-architect-gabriel.md +1 -1
- package/harness/opencode/agents/arka-brand-director-valentina.md +1 -1
- package/harness/opencode/agents/arka-cfo-helena.md +1 -1
- package/harness/opencode/agents/arka-chief-of-staff-afonso.md +1 -1
- package/harness/opencode/agents/arka-community-strategist-beatriz.md +1 -1
- package/harness/opencode/agents/arka-content-strategist-rafael.md +1 -1
- package/harness/opencode/agents/arka-conversion-strategist-ines.md +1 -1
- package/harness/opencode/agents/arka-coo-sofia.md +1 -1
- package/harness/opencode/agents/arka-copy-director-eduardo.md +1 -1
- package/harness/opencode/agents/arka-cqo-marta.md +1 -1
- package/harness/opencode/agents/arka-cto-marco.md +1 -1
- package/harness/opencode/agents/arka-design-ops-lead-iris.md +1 -1
- package/harness/opencode/agents/arka-ecom-director-ricardo.md +1 -1
- package/harness/opencode/agents/arka-knowledge-director-clara.md +1 -1
- package/harness/opencode/agents/arka-leadership-director-rodrigo.md +1 -1
- package/harness/opencode/agents/arka-marketing-director-luna.md +1 -1
- package/harness/opencode/agents/arka-ops-lead-daniel.md +1 -1
- package/harness/opencode/agents/arka-pm-director-carolina.md +1 -1
- package/harness/opencode/agents/arka-revops-lead-vicente.md +1 -1
- package/harness/opencode/agents/arka-saas-strategist-tiago.md +1 -1
- package/harness/opencode/agents/arka-sales-director-miguel.md +1 -1
- package/harness/opencode/agents/arka-strategy-director-tomas.md +1 -1
- package/harness/opencode/agents/arka-tech-director-francisca.md +1 -1
- package/harness/opencode/agents/arka-tech-lead-paulo.md +1 -1
- package/harness/opencode/agents/arka-video-producer-simao.md +1 -1
- package/harness/zed/.rules +2 -2
- package/knowledge/commands-keywords.json +10 -2
- package/knowledge/commands-registry.json +35 -3
- package/knowledge/skills-manifest.json +16 -1
- package/package.json +1 -1
- package/pyproject.toml +1 -1
- package/scripts/skills_catalog_gen.py +15 -6
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# Generation Guide
|
|
2
|
+
|
|
3
|
+
How to use a completed Design DNA JSON to generate designs in Phase 3. Covers all three dimensions.
|
|
4
|
+
|
|
5
|
+
## Priority Order
|
|
6
|
+
|
|
7
|
+
When generating a design from DNA JSON + content:
|
|
8
|
+
|
|
9
|
+
1. **Color & Typography** — define 80% of visual identity
|
|
10
|
+
2. **Spacing & Layout** — structural rhythm
|
|
11
|
+
3. **Shape & Elevation** — surface treatment
|
|
12
|
+
4. **Design Style qualitative fields** — mood, personality, composition approach
|
|
13
|
+
5. **Visual Effects** — special rendering layer (Canvas, WebGL, shaders, etc.)
|
|
14
|
+
6. **Motion & Interaction** — enhance after static layout and effects are solid
|
|
15
|
+
|
|
16
|
+
## Dimension 1: design_system → Code
|
|
17
|
+
|
|
18
|
+
### Tailwind CSS / Utility-First
|
|
19
|
+
```
|
|
20
|
+
color.primary.hex → --color-primary / bg-[hex]
|
|
21
|
+
typography.font_families → font-family config
|
|
22
|
+
spacing.scale → spacing config values
|
|
23
|
+
shape.border_radius → rounded-{sm|md|lg|full}
|
|
24
|
+
elevation.levels → shadow-{sm|md|lg}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Plain CSS / CSS Variables
|
|
28
|
+
Generate a `:root` block with all design tokens:
|
|
29
|
+
```css
|
|
30
|
+
:root {
|
|
31
|
+
--color-primary: {color.primary.hex};
|
|
32
|
+
--color-secondary: {color.secondary.hex};
|
|
33
|
+
--color-accent: {color.accent.hex};
|
|
34
|
+
--font-heading: {typography.font_families.heading};
|
|
35
|
+
--font-body: {typography.font_families.body};
|
|
36
|
+
--radius-sm: {shape.border_radius.small};
|
|
37
|
+
--radius-md: {shape.border_radius.medium};
|
|
38
|
+
--radius-lg: {shape.border_radius.large};
|
|
39
|
+
--shadow-low: {elevation.levels.low};
|
|
40
|
+
--shadow-med: {elevation.levels.medium};
|
|
41
|
+
--shadow-high: {elevation.levels.high};
|
|
42
|
+
--ease: {motion.easing};
|
|
43
|
+
--duration-micro: {motion.duration_scale.micro};
|
|
44
|
+
--duration-normal: {motion.duration_scale.normal};
|
|
45
|
+
--duration-macro: {motion.duration_scale.macro};
|
|
46
|
+
/* ... map all tokens */
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Component Decisions
|
|
51
|
+
- `components.button_style` → button classes and variants
|
|
52
|
+
- `components.card_style` → card container treatment
|
|
53
|
+
- `components.navigation_pattern` → nav component choice
|
|
54
|
+
- `interaction_feel.hover_behavior` → :hover / :focus states
|
|
55
|
+
- `motion.easing` + `motion.duration_scale` → transition properties
|
|
56
|
+
|
|
57
|
+
## Dimension 2: design_style → Subjective Decisions
|
|
58
|
+
|
|
59
|
+
| DNA Field | Guides |
|
|
60
|
+
|---|---|
|
|
61
|
+
| aesthetic.mood | Overall emotional feeling — warm tones, cool precision, etc. |
|
|
62
|
+
| visual_language.whitespace_usage | padding/margin generosity |
|
|
63
|
+
| visual_language.contrast_level | How much elements pop vs. blend |
|
|
64
|
+
| composition.hierarchy_method | What tool to use for emphasis |
|
|
65
|
+
| composition.balance_type | Symmetric layout vs. dynamic asymmetry |
|
|
66
|
+
| imagery.graphic_elements | Decorative SVGs, gradients, patterns |
|
|
67
|
+
| brand_voice_in_ui.tone | Microcopy phrasing |
|
|
68
|
+
| interaction_feel.microinteraction_density | How many hover/click effects |
|
|
69
|
+
|
|
70
|
+
## Dimension 3: visual_effects → Special Rendering
|
|
71
|
+
|
|
72
|
+
### Technology Selection by Performance Tier
|
|
73
|
+
|
|
74
|
+
| Tier | Technologies | When to Use |
|
|
75
|
+
|---|---|---|
|
|
76
|
+
| **lightweight** | CSS animations, SVG SMIL, vanilla JS | `overview.performance_tier` = "lightweight" |
|
|
77
|
+
| **medium** | Canvas 2D, GSAP, Lottie, anime.js | `overview.performance_tier` = "medium" |
|
|
78
|
+
| **heavy** | Three.js, custom GLSL, Pixi.js, WebGL | `overview.performance_tier` = "heavy" |
|
|
79
|
+
|
|
80
|
+
### Implementation Patterns
|
|
81
|
+
|
|
82
|
+
#### Background Effects
|
|
83
|
+
```
|
|
84
|
+
"none" → skip
|
|
85
|
+
"gradient-animation" → CSS @keyframes on linear-gradient or conic-gradient
|
|
86
|
+
"noise-field" → Canvas 2D with Perlin/simplex noise
|
|
87
|
+
"mesh-gradient" → SVG <mesh> or canvas interpolation
|
|
88
|
+
"video-bg" → <video autoplay muted loop> with poster fallback
|
|
89
|
+
"generative-art" → Canvas 2D or WebGL generative algorithms
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
#### Particle Systems
|
|
93
|
+
When `particle_systems.enabled: true`:
|
|
94
|
+
- For `count` < 100 and no complex physics → vanilla JS + Canvas 2D
|
|
95
|
+
- For `count` >= 100 or complex interaction → consider Pixi.js or Three.js Points
|
|
96
|
+
- Map `interaction` ("mouse-repel", "mouse-attract") to pointer event handlers
|
|
97
|
+
- Use `requestAnimationFrame` loop; include destroy/cleanup on unmount
|
|
98
|
+
|
|
99
|
+
#### 3D Elements
|
|
100
|
+
When `3d_elements.enabled: true`:
|
|
101
|
+
- Default to Three.js unless DNA specifies otherwise
|
|
102
|
+
- Apply `lighting`, `camera`, `materials` from params
|
|
103
|
+
- Add `post_processing` effects via EffectComposer
|
|
104
|
+
- Handle resize with `ResizeObserver`
|
|
105
|
+
- Load via CDN: `https://cdn.jsdelivr.net/npm/three@latest/build/three.module.js`
|
|
106
|
+
|
|
107
|
+
#### Shader Effects
|
|
108
|
+
When `shader_effects.enabled: true`:
|
|
109
|
+
- Create vertex/fragment shaders based on `type`
|
|
110
|
+
- Pass `uniforms` from params (time, resolution, mouse position)
|
|
111
|
+
- For "noise-distortion": use noise functions matching `noise_type`
|
|
112
|
+
- Animate via `requestAnimationFrame` updating `u_time` uniform
|
|
113
|
+
|
|
114
|
+
#### Scroll Effects
|
|
115
|
+
- **Parallax**: Use `transform: translateY()` with scroll offset × layer speed
|
|
116
|
+
- **Scroll-triggered**: Use `IntersectionObserver` with `threshold` array
|
|
117
|
+
- **Scrub behavior**: If "scrubbed", animation progress = scroll progress. If "triggered", play once on enter.
|
|
118
|
+
|
|
119
|
+
#### Text Effects
|
|
120
|
+
```
|
|
121
|
+
"split-letter-animate" → Split text into <span> per char/word, stagger CSS animation
|
|
122
|
+
"typewriter" → CSS steps() or JS interval revealing chars
|
|
123
|
+
"glitch" → Layered clip-path + color offset animation
|
|
124
|
+
"gradient-fill" → background-clip: text with animated gradient
|
|
125
|
+
"3d-extrude" → text-shadow stack or WebGL text geometry
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
#### Cursor Effects
|
|
129
|
+
When `cursor_effects.enabled: true`:
|
|
130
|
+
- Hide default cursor: `cursor: none`
|
|
131
|
+
- Create custom cursor element following `pointermove`
|
|
132
|
+
- "magnetic-buttons": Apply transform pull on hover proximity
|
|
133
|
+
- "spotlight": Radial gradient mask following cursor
|
|
134
|
+
- "trail": Spawn fading elements on move
|
|
135
|
+
|
|
136
|
+
#### Glassmorphism / Neumorphism
|
|
137
|
+
```
|
|
138
|
+
"glass" → backdrop-filter: blur({blur_radius}); background: rgba(..., {transparency})
|
|
139
|
+
"neumorphic-light" → Dual box-shadow (light + dark offset) on light bg
|
|
140
|
+
"neumorphic-dark" → Dual box-shadow (inverted) on dark bg
|
|
141
|
+
"frosted-layers" → Stacked blur layers with varying opacity
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
#### Canvas Drawings
|
|
145
|
+
When `canvas_drawings.enabled: true`:
|
|
146
|
+
- Initialize canvas with `width/height` matching container
|
|
147
|
+
- Use `draw_method` to select rendering approach
|
|
148
|
+
- Animate with `requestAnimationFrame`
|
|
149
|
+
- Handle `responsiveness` via ResizeObserver
|
|
150
|
+
|
|
151
|
+
#### SVG Animations
|
|
152
|
+
When `svg_animations.enabled: true`:
|
|
153
|
+
- "path-draw": Animate `stroke-dashoffset` from path length to 0
|
|
154
|
+
- "morph-shapes": Interpolate `d` attribute between two paths
|
|
155
|
+
- "stroke-animation": Animate stroke properties (dasharray, width, color)
|
|
156
|
+
|
|
157
|
+
### Fallback Strategy
|
|
158
|
+
|
|
159
|
+
Always implement the fallback defined in `overview.fallback_strategy`:
|
|
160
|
+
|
|
161
|
+
```js
|
|
162
|
+
// Example: reduce to CSS on low-end devices
|
|
163
|
+
const prefersReduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
164
|
+
const isLowEnd = navigator.hardwareConcurrency <= 2;
|
|
165
|
+
if (prefersReduced || isLowEnd) {
|
|
166
|
+
// Apply fallback: static CSS version, disable canvas/WebGL
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## Output Format
|
|
171
|
+
|
|
172
|
+
Generate output as a single self-contained HTML file with inline CSS and JS (unless user specifies a framework). Include:
|
|
173
|
+
|
|
174
|
+
1. CSS custom properties block from `design_system` tokens
|
|
175
|
+
2. Component styles from `design_system.components` + `design_style`
|
|
176
|
+
3. Layout structure per `design_system.layout`
|
|
177
|
+
4. Content populated from user-provided content
|
|
178
|
+
5. Visual effects implemented per `visual_effects` specification
|
|
179
|
+
6. Animations/transitions if `design_system.motion.philosophy` is not "none"
|
|
180
|
+
7. Fallback handling for effects
|
|
181
|
+
|
|
182
|
+
For heavy effects requiring external libraries, load via CDN `<script>` tags:
|
|
183
|
+
```html
|
|
184
|
+
<!-- Three.js -->
|
|
185
|
+
<script type="importmap">{"imports":{"three":"https://cdn.jsdelivr.net/npm/three@latest/build/three.module.js"}}</script>
|
|
186
|
+
|
|
187
|
+
<!-- GSAP -->
|
|
188
|
+
<script src="https://cdn.jsdelivr.net/npm/gsap@latest/dist/gsap.min.js"></script>
|
|
189
|
+
|
|
190
|
+
<!-- Lottie -->
|
|
191
|
+
<script src="https://cdn.jsdelivr.net/npm/lottie-web@latest/build/player/lottie.min.js"></script>
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Quality Checks
|
|
195
|
+
|
|
196
|
+
Before delivering, verify:
|
|
197
|
+
- [ ] Every color in output traces back to DNA palette
|
|
198
|
+
- [ ] Font families match DNA specification
|
|
199
|
+
- [ ] Spacing rhythm matches DNA scale
|
|
200
|
+
- [ ] Border radius matches DNA shape tokens
|
|
201
|
+
- [ ] Overall mood matches `design_style.aesthetic.mood`
|
|
202
|
+
- [ ] Component patterns match DNA `components` descriptions
|
|
203
|
+
- [ ] Contrast ratios meet WCAG AA minimum (4.5:1 body text, 3:1 large text)
|
|
204
|
+
- [ ] Visual effects match `visual_effects` specification (type, technology, params)
|
|
205
|
+
- [ ] Fallback strategy is implemented for effects
|
|
206
|
+
- [ ] `prefers-reduced-motion` is respected
|
|
207
|
+
- [ ] No effects render when their `enabled` flag is `false`
|
|
208
|
+
- [ ] Canvas/WebGL contexts are properly sized and handle resize
|
|
209
|
+
- [ ] Animation loops use `requestAnimationFrame` (no `setInterval`)
|
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
# Design DNA Schema
|
|
2
|
+
|
|
3
|
+
Three-dimensional design profile:
|
|
4
|
+
- **design_system** — measurable tokens
|
|
5
|
+
- **design_style** — qualitative perception
|
|
6
|
+
- **visual_effects** — special rendering such as Canvas, WebGL, 3D, particles, shaders, scroll effects, cursor effects, SVG animation, and glassmorphism
|
|
7
|
+
|
|
8
|
+
Every field below must appear in the final JSON output.
|
|
9
|
+
|
|
10
|
+
## Top-Level Structure
|
|
11
|
+
|
|
12
|
+
### `meta`
|
|
13
|
+
- `name`
|
|
14
|
+
- `description`
|
|
15
|
+
- `source_references`
|
|
16
|
+
- `created_at`
|
|
17
|
+
|
|
18
|
+
### `design_system`
|
|
19
|
+
The structural and measurable layer.
|
|
20
|
+
|
|
21
|
+
#### `design_system.color`
|
|
22
|
+
- `palette_type`
|
|
23
|
+
- `primary.hex`
|
|
24
|
+
- `primary.role`
|
|
25
|
+
- `secondary.hex`
|
|
26
|
+
- `secondary.role`
|
|
27
|
+
- `accent.hex`
|
|
28
|
+
- `accent.role`
|
|
29
|
+
- `neutral.scale`
|
|
30
|
+
- `neutral.usage`
|
|
31
|
+
- `semantic.success`
|
|
32
|
+
- `semantic.warning`
|
|
33
|
+
- `semantic.error`
|
|
34
|
+
- `semantic.info`
|
|
35
|
+
- `surface.background`
|
|
36
|
+
- `surface.card`
|
|
37
|
+
- `surface.elevated`
|
|
38
|
+
- `contrast_strategy`
|
|
39
|
+
|
|
40
|
+
#### `design_system.typography`
|
|
41
|
+
- `type_scale.display.size`
|
|
42
|
+
- `type_scale.display.weight`
|
|
43
|
+
- `type_scale.display.line_height`
|
|
44
|
+
- `type_scale.display.tracking`
|
|
45
|
+
- `type_scale.heading_1.size`
|
|
46
|
+
- `type_scale.heading_1.weight`
|
|
47
|
+
- `type_scale.heading_1.line_height`
|
|
48
|
+
- `type_scale.heading_1.tracking`
|
|
49
|
+
- `type_scale.heading_2.size`
|
|
50
|
+
- `type_scale.heading_2.weight`
|
|
51
|
+
- `type_scale.heading_2.line_height`
|
|
52
|
+
- `type_scale.heading_2.tracking`
|
|
53
|
+
- `type_scale.heading_3.size`
|
|
54
|
+
- `type_scale.heading_3.weight`
|
|
55
|
+
- `type_scale.heading_3.line_height`
|
|
56
|
+
- `type_scale.heading_3.tracking`
|
|
57
|
+
- `type_scale.body.size`
|
|
58
|
+
- `type_scale.body.weight`
|
|
59
|
+
- `type_scale.body.line_height`
|
|
60
|
+
- `type_scale.body.tracking`
|
|
61
|
+
- `type_scale.body_small.size`
|
|
62
|
+
- `type_scale.body_small.weight`
|
|
63
|
+
- `type_scale.body_small.line_height`
|
|
64
|
+
- `type_scale.body_small.tracking`
|
|
65
|
+
- `type_scale.caption.size`
|
|
66
|
+
- `type_scale.caption.weight`
|
|
67
|
+
- `type_scale.caption.line_height`
|
|
68
|
+
- `type_scale.caption.tracking`
|
|
69
|
+
- `type_scale.overline.size`
|
|
70
|
+
- `type_scale.overline.weight`
|
|
71
|
+
- `type_scale.overline.line_height`
|
|
72
|
+
- `type_scale.overline.tracking`
|
|
73
|
+
- `font_families.heading`
|
|
74
|
+
- `font_families.body`
|
|
75
|
+
- `font_families.mono`
|
|
76
|
+
- `font_style_notes`
|
|
77
|
+
|
|
78
|
+
#### `design_system.spacing`
|
|
79
|
+
- `base_unit`
|
|
80
|
+
- `scale`
|
|
81
|
+
- `content_density`
|
|
82
|
+
- `section_rhythm`
|
|
83
|
+
|
|
84
|
+
#### `design_system.layout`
|
|
85
|
+
- `grid_system`
|
|
86
|
+
- `max_content_width`
|
|
87
|
+
- `columns`
|
|
88
|
+
- `gutter`
|
|
89
|
+
- `breakpoints`
|
|
90
|
+
- `alignment_tendency`
|
|
91
|
+
|
|
92
|
+
#### `design_system.shape`
|
|
93
|
+
- `border_radius.small`
|
|
94
|
+
- `border_radius.medium`
|
|
95
|
+
- `border_radius.large`
|
|
96
|
+
- `border_radius.pill`
|
|
97
|
+
- `border_usage`
|
|
98
|
+
- `divider_style`
|
|
99
|
+
|
|
100
|
+
#### `design_system.elevation`
|
|
101
|
+
- `shadow_style`
|
|
102
|
+
- `levels.low`
|
|
103
|
+
- `levels.medium`
|
|
104
|
+
- `levels.high`
|
|
105
|
+
- `depth_cues`
|
|
106
|
+
|
|
107
|
+
#### `design_system.iconography`
|
|
108
|
+
- `style`
|
|
109
|
+
- `stroke_weight`
|
|
110
|
+
- `size_scale`
|
|
111
|
+
- `preferred_set`
|
|
112
|
+
|
|
113
|
+
#### `design_system.motion`
|
|
114
|
+
- `easing`
|
|
115
|
+
- `duration_scale.micro`
|
|
116
|
+
- `duration_scale.normal`
|
|
117
|
+
- `duration_scale.macro`
|
|
118
|
+
- `entrance_pattern`
|
|
119
|
+
- `exit_pattern`
|
|
120
|
+
- `philosophy`
|
|
121
|
+
|
|
122
|
+
#### `design_system.components`
|
|
123
|
+
- `button_style`
|
|
124
|
+
- `input_style`
|
|
125
|
+
- `card_style`
|
|
126
|
+
- `navigation_pattern`
|
|
127
|
+
- `modal_style`
|
|
128
|
+
- `list_style`
|
|
129
|
+
- `component_notes`
|
|
130
|
+
|
|
131
|
+
### `design_style`
|
|
132
|
+
The qualitative and perceptual layer.
|
|
133
|
+
|
|
134
|
+
#### `design_style.aesthetic`
|
|
135
|
+
- `mood`
|
|
136
|
+
- `visual_metaphor`
|
|
137
|
+
- `era_influence`
|
|
138
|
+
- `genre`
|
|
139
|
+
- `personality_traits`
|
|
140
|
+
- `adjectives`
|
|
141
|
+
|
|
142
|
+
#### `design_style.visual_language`
|
|
143
|
+
- `complexity`
|
|
144
|
+
- `ornamentation`
|
|
145
|
+
- `whitespace_usage`
|
|
146
|
+
- `visual_weight_distribution`
|
|
147
|
+
- `focal_strategy`
|
|
148
|
+
- `contrast_level`
|
|
149
|
+
- `texture_usage`
|
|
150
|
+
|
|
151
|
+
#### `design_style.composition`
|
|
152
|
+
- `hierarchy_method`
|
|
153
|
+
- `balance_type`
|
|
154
|
+
- `flow_direction`
|
|
155
|
+
- `grouping_strategy`
|
|
156
|
+
- `negative_space_role`
|
|
157
|
+
|
|
158
|
+
#### `design_style.imagery`
|
|
159
|
+
- `photo_treatment`
|
|
160
|
+
- `illustration_style`
|
|
161
|
+
- `graphic_elements`
|
|
162
|
+
- `pattern_usage`
|
|
163
|
+
- `image_shape`
|
|
164
|
+
|
|
165
|
+
#### `design_style.interaction_feel`
|
|
166
|
+
- `feedback_style`
|
|
167
|
+
- `hover_behavior`
|
|
168
|
+
- `transition_personality`
|
|
169
|
+
- `loading_style`
|
|
170
|
+
- `microinteraction_density`
|
|
171
|
+
|
|
172
|
+
#### `design_style.brand_voice_in_ui`
|
|
173
|
+
- `tone`
|
|
174
|
+
- `formality`
|
|
175
|
+
- `cta_style`
|
|
176
|
+
- `empty_state_approach`
|
|
177
|
+
- `error_tone`
|
|
178
|
+
|
|
179
|
+
### `visual_effects`
|
|
180
|
+
The special rendering and advanced visual behavior layer.
|
|
181
|
+
|
|
182
|
+
#### `visual_effects.overview`
|
|
183
|
+
- `effect_intensity`
|
|
184
|
+
- `performance_tier`
|
|
185
|
+
- `fallback_strategy`
|
|
186
|
+
- `primary_technology`
|
|
187
|
+
|
|
188
|
+
#### `visual_effects.background_effects`
|
|
189
|
+
- `type`
|
|
190
|
+
- `description`
|
|
191
|
+
- `technology`
|
|
192
|
+
- `params.color_palette`
|
|
193
|
+
- `params.speed`
|
|
194
|
+
- `params.density`
|
|
195
|
+
- `params.opacity`
|
|
196
|
+
- `params.blend_mode`
|
|
197
|
+
|
|
198
|
+
#### `visual_effects.particle_systems`
|
|
199
|
+
- `enabled`
|
|
200
|
+
- `type`
|
|
201
|
+
- `description`
|
|
202
|
+
- `technology`
|
|
203
|
+
- `params.count`
|
|
204
|
+
- `params.shape`
|
|
205
|
+
- `params.size_range`
|
|
206
|
+
- `params.movement_pattern`
|
|
207
|
+
- `params.color_behavior`
|
|
208
|
+
- `params.interaction`
|
|
209
|
+
- `params.spawn_area`
|
|
210
|
+
|
|
211
|
+
#### `visual_effects.3d_elements`
|
|
212
|
+
- `enabled`
|
|
213
|
+
- `type`
|
|
214
|
+
- `description`
|
|
215
|
+
- `technology`
|
|
216
|
+
- `params.renderer`
|
|
217
|
+
- `params.lighting`
|
|
218
|
+
- `params.camera`
|
|
219
|
+
- `params.materials`
|
|
220
|
+
- `params.geometry`
|
|
221
|
+
- `params.post_processing`
|
|
222
|
+
- `params.interaction_model`
|
|
223
|
+
|
|
224
|
+
#### `visual_effects.shader_effects`
|
|
225
|
+
- `enabled`
|
|
226
|
+
- `type`
|
|
227
|
+
- `description`
|
|
228
|
+
- `technology`
|
|
229
|
+
- `params.uniforms`
|
|
230
|
+
- `params.vertex_manipulation`
|
|
231
|
+
- `params.fragment_output`
|
|
232
|
+
- `params.noise_type`
|
|
233
|
+
- `params.distortion`
|
|
234
|
+
|
|
235
|
+
#### `visual_effects.scroll_effects.parallax`
|
|
236
|
+
- `enabled`
|
|
237
|
+
- `layers`
|
|
238
|
+
- `depth_range`
|
|
239
|
+
- `speed_curve`
|
|
240
|
+
|
|
241
|
+
#### `visual_effects.scroll_effects.scroll_triggered_animations`
|
|
242
|
+
- `enabled`
|
|
243
|
+
- `trigger_points`
|
|
244
|
+
- `animation_type`
|
|
245
|
+
- `scrub_behavior`
|
|
246
|
+
|
|
247
|
+
#### `visual_effects.scroll_effects.scroll_morphing`
|
|
248
|
+
- `enabled`
|
|
249
|
+
- `description`
|
|
250
|
+
|
|
251
|
+
#### `visual_effects.text_effects`
|
|
252
|
+
- `type`
|
|
253
|
+
- `description`
|
|
254
|
+
- `technology`
|
|
255
|
+
- `params.split_strategy`
|
|
256
|
+
- `params.animation_per_unit`
|
|
257
|
+
- `params.stagger`
|
|
258
|
+
- `params.effect_style`
|
|
259
|
+
|
|
260
|
+
#### `visual_effects.cursor_effects`
|
|
261
|
+
- `enabled`
|
|
262
|
+
- `type`
|
|
263
|
+
- `description`
|
|
264
|
+
- `params.shape`
|
|
265
|
+
- `params.size`
|
|
266
|
+
- `params.blend_mode`
|
|
267
|
+
- `params.trail`
|
|
268
|
+
- `params.interaction_zone`
|
|
269
|
+
|
|
270
|
+
#### `visual_effects.image_effects`
|
|
271
|
+
- `type`
|
|
272
|
+
- `description`
|
|
273
|
+
- `technology`
|
|
274
|
+
- `params.filter_pipeline`
|
|
275
|
+
- `params.hover_transform`
|
|
276
|
+
- `params.reveal_animation`
|
|
277
|
+
- `params.distortion_type`
|
|
278
|
+
|
|
279
|
+
#### `visual_effects.glassmorphism_neumorphism`
|
|
280
|
+
- `enabled`
|
|
281
|
+
- `style`
|
|
282
|
+
- `params.blur_radius`
|
|
283
|
+
- `params.transparency`
|
|
284
|
+
- `params.border_treatment`
|
|
285
|
+
- `params.shadow_type`
|
|
286
|
+
- `params.light_source_angle`
|
|
287
|
+
|
|
288
|
+
#### `visual_effects.canvas_drawings`
|
|
289
|
+
- `enabled`
|
|
290
|
+
- `type`
|
|
291
|
+
- `description`
|
|
292
|
+
- `technology`
|
|
293
|
+
- `params.draw_method`
|
|
294
|
+
- `params.animation_loop`
|
|
295
|
+
- `params.color_scheme`
|
|
296
|
+
- `params.responsiveness`
|
|
297
|
+
- `params.interaction`
|
|
298
|
+
|
|
299
|
+
#### `visual_effects.svg_animations`
|
|
300
|
+
- `enabled`
|
|
301
|
+
- `type`
|
|
302
|
+
- `description`
|
|
303
|
+
- `params.animation_method`
|
|
304
|
+
- `params.path_morphing`
|
|
305
|
+
- `params.stroke_animation`
|
|
306
|
+
- `params.filter_effects`
|
|
307
|
+
|
|
308
|
+
#### `visual_effects.composite_notes`
|
|
309
|
+
- Free-text notes for layered effects, implementation ambiguity, performance trade-offs, or screenshot-only observations
|
|
310
|
+
|
|
311
|
+
## Field Guidance
|
|
312
|
+
|
|
313
|
+
### `design_system` (Dimension 1: Structural / Measurable)
|
|
314
|
+
Concrete, token-level values. Extract exact values where visible; estimate from visual inspection otherwise.
|
|
315
|
+
|
|
316
|
+
- **`color.palette_type`**: "monochromatic", "complementary", "analogous", "triadic", "split-complementary"
|
|
317
|
+
- **`color.contrast_strategy`**: How text/background contrast is managed — "high contrast", "subtle layers", "dark-on-light dominant"
|
|
318
|
+
- **`typography.font_style_notes`**: e.g. "geometric sans with humanist touches"
|
|
319
|
+
- **`spacing.content_density`**: "compact", "comfortable", "spacious"
|
|
320
|
+
- **`spacing.section_rhythm`**: How vertical spacing varies between sections
|
|
321
|
+
- **`layout.alignment_tendency`**: "strict grid", "centered", "asymmetric", "mixed"
|
|
322
|
+
- **`shape.border_usage`**: "none", "subtle 1px", "bold borders", "only on inputs"
|
|
323
|
+
- **`elevation.shadow_style`**: "none", "soft diffused", "hard drop", "layered"
|
|
324
|
+
- **`elevation.depth_cues`**: "shadows", "overlapping layers", "blur/glass", "color intensity"
|
|
325
|
+
- **`motion.philosophy`**: "minimal functional", "playful bouncy", "cinematic", "none"
|
|
326
|
+
- **`components`**: Describe observed patterns — e.g. "ghost buttons with thick borders, rounded inputs with inner shadow"
|
|
327
|
+
|
|
328
|
+
### `design_style` (Dimension 2: Qualitative / Perceptual)
|
|
329
|
+
Subjective assessments. Use descriptive language.
|
|
330
|
+
|
|
331
|
+
- **`aesthetic.mood`**: Array of 3–5 mood words, e.g. ["calm", "professional", "warm"]
|
|
332
|
+
- **`aesthetic.genre`**: e.g. "corporate SaaS", "indie creative", "luxury editorial", "neo-brutalist"
|
|
333
|
+
- **`aesthetic.personality_traits`**: As if the design were a person, e.g. ["confident", "approachable", "meticulous"]
|
|
334
|
+
- **`visual_language.complexity`**: "minimal", "moderate", "rich", "maximal"
|
|
335
|
+
- **`visual_language.ornamentation`**: "none", "subtle accents", "decorative", "heavily ornamented"
|
|
336
|
+
- **`visual_language.focal_strategy`**: "single hero element", "distributed interest", "progressive reveal"
|
|
337
|
+
- **`composition.hierarchy_method`**: "scale contrast", "color weight", "spatial isolation", "typographic hierarchy"
|
|
338
|
+
- **`composition.balance_type`**: "symmetric", "asymmetric", "radial", "mosaic"
|
|
339
|
+
- **`interaction_feel.transition_personality`**: "snappy", "smooth glide", "bouncy elastic", "fade-subtle"
|
|
340
|
+
- **`brand_voice_in_ui.cta_style`**: "direct imperative", "friendly invitation", "urgent scarcity", "subtle suggestion"
|
|
341
|
+
|
|
342
|
+
### `visual_effects` (Dimension 3: Special Rendering / Visual Wizardry)
|
|
343
|
+
Effects beyond standard CSS. These often require Canvas, WebGL, SVG animation, shader programs, or JS animation libraries. When not directly observable from static code, describe them from screenshots or video.
|
|
344
|
+
|
|
345
|
+
- **`overview.effect_intensity`**: "none", "subtle-accent", "moderate", "heavy-immersive"
|
|
346
|
+
- **`overview.performance_tier`**: "lightweight" (CSS + simple JS), "medium" (Canvas 2D, SVG anim), "heavy" (WebGL, Three.js, shaders)
|
|
347
|
+
- **`overview.fallback_strategy`**: What happens on low-end devices — "disable effects", "reduce to CSS", "static snapshot"
|
|
348
|
+
- **`overview.primary_technology`**: "CSS only", "Canvas 2D", "WebGL/Three.js", "GSAP", "Lottie", "SVG SMIL", "Pixi.js"
|
|
349
|
+
- **`background_effects.type`**: "gradient-animation", "noise-field", "mesh-gradient", "video-bg", "generative-art", "none"
|
|
350
|
+
- **`particle_systems.type`**: "floating-dots", "confetti", "snow", "fireflies", "connected-nodes", "custom"
|
|
351
|
+
- **`particle_systems.params.interaction`**: "mouse-repel", "mouse-attract", "click-burst", "none"
|
|
352
|
+
- **`3d_elements.type`**: "hero-model", "product-viewer", "scene-bg", "text-extrusion", "abstract-geometry"
|
|
353
|
+
- **`3d_elements.params.post_processing`**: e.g. ["bloom", "FXAA", "depth-of-field", "chromatic-aberration"]
|
|
354
|
+
- **`shader_effects.type`**: "noise-distortion", "wave", "morph", "color-shift", "custom-GLSL"
|
|
355
|
+
- **`shader_effects.params.noise_type`**: "perlin", "simplex", "worley", "fbm"
|
|
356
|
+
- **`scroll_effects.parallax.layers`**: Number of depth layers, e.g. "3"
|
|
357
|
+
- **`scroll_effects.scroll_triggered_animations.animation_type`**: "fade-up", "scale-in", "clip-reveal", "counter", "draw-SVG"
|
|
358
|
+
- **`text_effects.type`**: "split-letter-animate", "typewriter", "glitch", "gradient-fill", "3d-extrude", "none"
|
|
359
|
+
- **`text_effects.params.split_strategy`**: "by-char", "by-word", "by-line"
|
|
360
|
+
- **`cursor_effects.type`**: "custom-cursor", "magnetic-buttons", "spotlight", "trail", "none"
|
|
361
|
+
- **`image_effects.type`**: "hover-distortion", "reveal-clip", "parallax-tilt", "rgb-shift", "none"
|
|
362
|
+
- **`image_effects.params.distortion_type`**: "barrel", "wave", "liquid", "glitch"
|
|
363
|
+
- **`glassmorphism_neumorphism.style`**: "glass", "neumorphic-light", "neumorphic-dark", "frosted-layers", "none"
|
|
364
|
+
- **`canvas_drawings.type`**: "generative-lines", "interactive-blobs", "data-visualization", "pattern-fill", "none"
|
|
365
|
+
- **`svg_animations.type`**: "path-draw", "morph-shapes", "logo-reveal", "decorative-loop", "none"
|
|
366
|
+
- **`composite_notes`**: Free-text description of how multiple effects layer together, performance trade-offs, or effects visible only in screenshots that cannot be fully captured in structured fields
|
|
@@ -6,9 +6,11 @@ description: >
|
|
|
6
6
|
pages), WCAG 2.2 AA conformance report, Storybook CSF3 story stubs, and an
|
|
7
7
|
integration guide. TRIGGER: "design system", "cria o design system", "design
|
|
8
8
|
tokens", "component library", "biblioteca de componentes", "/brand
|
|
9
|
-
design-system". SKIP: only a color palette -> brand/colors;
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
design-system". SKIP: only a color palette -> brand/colors; reproducing the
|
|
10
|
+
look of an existing reference (screenshot, image, URL) -> brand/design-dna
|
|
11
|
+
(it reverse-engineers a system; this one specifies a new one); implementing
|
|
12
|
+
the components in application code -> dev frontend workflows (this skill
|
|
13
|
+
specifies the system; it does not build the app); reviewing an existing UI
|
|
12
14
|
against brand guidelines -> brand/design-review.
|
|
13
15
|
allowed-tools: [Read, Write, Edit, Bash, Grep, Glob, Agent, WebFetch, WebSearch]
|
|
14
16
|
metadata:
|
|
@@ -72,6 +74,13 @@ A production design system in 5 deliverables:
|
|
|
72
74
|
|
|
73
75
|
## Study mode (design DNA extraction)
|
|
74
76
|
|
|
77
|
+
> **Entry point:** a request that leads with a reference now routes to
|
|
78
|
+
> `brand/design-dna`, which runs this same protocol with the same
|
|
79
|
+
> guardrails and adds the qualitative and visual-effects dimensions. This
|
|
80
|
+
> section stays because the study still runs *inside* a design-system
|
|
81
|
+
> engagement whenever a reference turns up mid-brief — the protocol below
|
|
82
|
+
> is the one both skills execute.
|
|
83
|
+
|
|
75
84
|
When the operator brings a **reference** — a screenshot or a live URL —
|
|
76
85
|
instead of a brief, run the study protocol in
|
|
77
86
|
`references/design-dna-study.md`: it extracts structural DNA
|
package/departments/dev/SKILL.md
CHANGED
|
@@ -37,6 +37,7 @@ allowed-tools: [Read, Write, Edit, Bash, Grep, Glob, Agent, WebFetch, WebSearch]
|
|
|
37
37
|
| `/dev performance <target>` | Performance audit (CWV, API latency, DB) | Focused |
|
|
38
38
|
| `/dev pipeline <project>` | CI/CD pipeline design and setup | Focused |
|
|
39
39
|
| `/dev clean-review <file>` | Clean Code + SOLID compliance review | Specialist |
|
|
40
|
+
| `/dev research <topic>` | Library evaluation and pattern discovery (KB + Context7 + gh-grep + web) | Specialist |
|
|
40
41
|
| `/dev spec <description>` | Create feature specification (mandatory pre-impl) | Specialist |
|
|
41
42
|
| `/dev scaffold <type> <name>` | Project scaffolding from starter repos | Specialist |
|
|
42
43
|
| `/dev do <description>` | Smart routing to the right dev command | Orchestrator |
|
|
@@ -81,6 +82,30 @@ Diagnose step: `get_architecture` for the structural map,
|
|
|
81
82
|
PRIOR, not ground truth: verify with Read before editing. When the MCP
|
|
82
83
|
is absent the phases run as before (Grep/Read exploration).
|
|
83
84
|
|
|
85
|
+
## Real-world grounding (gh-grep MCP)
|
|
86
|
+
|
|
87
|
+
`codebase-memory` answers "how does OUR code do this". When the question
|
|
88
|
+
is "how does anyone do this", call `mcp__gh-grep__searchGitHub` — literal
|
|
89
|
+
grep with regex over public repositories — in Phase 1 RESEARCH and in
|
|
90
|
+
Diagnose, whenever an external API, library idiom, or error signature is
|
|
91
|
+
unfamiliar or disputed.
|
|
92
|
+
|
|
93
|
+
Query it with **code tokens**: `useSyncExternalStore`, `from
|
|
94
|
+
sqlalchemy.orm import`, `Cannot read properties of undefined`. Filter by
|
|
95
|
+
language and path. A natural-language sentence returns noise, so a first
|
|
96
|
+
attempt that phrases the question in prose will look like the tool failing
|
|
97
|
+
when it is the query that failed.
|
|
98
|
+
|
|
99
|
+
Pair it with Context7, which answers the complementary question: Context7
|
|
100
|
+
gives the documented contract; gh-grep gives the practice N teams actually
|
|
101
|
+
shipped. Where they disagree, the docs win and the divergence itself is
|
|
102
|
+
worth reporting. Treat results as a prior about practice — they carry no
|
|
103
|
+
authority over our own code, which you still read directly.
|
|
104
|
+
|
|
105
|
+
Skip it for private code (it indexes public repositories only — use
|
|
106
|
+
`codebase-memory` or the KB), for documentation lookups (Context7), and for
|
|
107
|
+
anything that is not code (WebSearch, Firecrawl).
|
|
108
|
+
|
|
84
109
|
## Focused Workflow (4 Phases)
|
|
85
110
|
|
|
86
111
|
For `/dev debug`, `/dev refactor`, `/dev db`, `/dev performance`, `/dev pipeline`: Diagnose → Implement with tests → Rita validates → Quality Gate (Marta).
|
|
@@ -85,6 +85,11 @@ allowed-tools: [Read, Bash, Grep, Glob, Agent]
|
|
|
85
85
|
- [ ] Assume every variable could be null/undefined
|
|
86
86
|
- [ ] Assume every external call will fail
|
|
87
87
|
- [ ] Ask: "If I deleted this change, what would break?"
|
|
88
|
+
- [ ] For an abuse vector that depends on how a third-party library
|
|
89
|
+
behaves, confirm the behaviour with `mcp__gh-grep__searchGitHub`
|
|
90
|
+
(real call-sites) plus Context7 (documented contract) before
|
|
91
|
+
raising it as CRITICAL — a hostile persona that invents the
|
|
92
|
+
library's behaviour is refuting itself, not the code
|
|
88
93
|
|
|
89
94
|
## Verdicts
|
|
90
95
|
|
|
@@ -28,6 +28,14 @@ allowed-tools: [Read, Write, Edit, Bash, Grep, Glob, Agent]
|
|
|
28
28
|
7. **Consistent response** — `{ "data": ..., "meta": { "pagination": ... } }`
|
|
29
29
|
8. **Error format** — `{ "error": { "code": "VALIDATION_FAILED", "message": "...", "details": [...] } }`
|
|
30
30
|
|
|
31
|
+
When the contract has to interoperate with something you do not control — a
|
|
32
|
+
partner API, an SDK's expectations, a webhook consumer — check the shape
|
|
33
|
+
that already exists in the wild. `mcp__gh-grep__searchGitHub` on the field
|
|
34
|
+
names or the header (`X-Idempotency-Key`, `"cursor":`) shows what clients
|
|
35
|
+
are already written against. Matching an established shape costs nothing
|
|
36
|
+
and removes a whole class of integration surprise; diverging from one is a
|
|
37
|
+
decision that belongs in the ADR with its reason.
|
|
38
|
+
|
|
31
39
|
## Output: OpenAPI Snippet
|
|
32
40
|
|
|
33
41
|
```yaml
|
|
@@ -35,6 +35,12 @@ allowed-tools: [Read, Write, Edit, Grep, Glob, Agent, WebFetch]
|
|
|
35
35
|
- Ask user: What system/feature needs architecture?
|
|
36
36
|
- Clarify: Scale requirements, team size, tech constraints
|
|
37
37
|
- Identify: Domain boundaries, data flows, external integrations
|
|
38
|
+
- Where the design leans on a specific framework or infrastructure
|
|
39
|
+
primitive, check the precedent with `mcp__gh-grep__searchGitHub`: grep
|
|
40
|
+
the structural tokens (a config key, a base class, a directory
|
|
41
|
+
convention) and read how real systems wired it. Feed what you find into
|
|
42
|
+
Step 4's Alternatives Considered — a pattern that public repos abandoned
|
|
43
|
+
is an alternative you can rule out with evidence instead of taste.
|
|
38
44
|
|
|
39
45
|
### Step 3: Architecture Design
|
|
40
46
|
Apply the appropriate pattern:
|