waypoint-skills 1.3.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.
Files changed (132) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +348 -0
  3. package/README.npm.md +56 -0
  4. package/cli/bin/cli.js +127 -0
  5. package/cli/bin/lib/paths.mjs +31 -0
  6. package/cli/bin/postinstall.mjs +25 -0
  7. package/manifest.json +107 -0
  8. package/package.json +44 -0
  9. package/packages/agents/inspiration-scout.md +105 -0
  10. package/packages/agents/orchestrator.md +186 -0
  11. package/packages/agents/scrutiny-validator.md +136 -0
  12. package/packages/agents/user-testing-validator.md +171 -0
  13. package/packages/agents/validator.md +102 -0
  14. package/packages/agents/worker.md +116 -0
  15. package/packages/agents/wp-router.md +69 -0
  16. package/packages/hooks/hooks.json.example +12 -0
  17. package/packages/hooks/templates/mission-worktree-bootstrap.sh +88 -0
  18. package/packages/hooks/templates/run-assertions.sh +48 -0
  19. package/packages/rules/adversarial-context-isolation.mdc +57 -0
  20. package/packages/rules/serial-git-enforcement.mdc +77 -0
  21. package/packages/skills/caveman/SKILL.md +78 -0
  22. package/packages/skills/design-taste-frontend/SKILL.md +1206 -0
  23. package/packages/skills/gpt-taste/SKILL.md +74 -0
  24. package/packages/skills/impeccable/SKILL.md +164 -0
  25. package/packages/skills/impeccable/reference/adapt.md +311 -0
  26. package/packages/skills/impeccable/reference/animate.md +201 -0
  27. package/packages/skills/impeccable/reference/audit.md +133 -0
  28. package/packages/skills/impeccable/reference/bolder.md +120 -0
  29. package/packages/skills/impeccable/reference/brand.md +108 -0
  30. package/packages/skills/impeccable/reference/clarify.md +288 -0
  31. package/packages/skills/impeccable/reference/codex.md +105 -0
  32. package/packages/skills/impeccable/reference/colorize.md +257 -0
  33. package/packages/skills/impeccable/reference/craft.md +123 -0
  34. package/packages/skills/impeccable/reference/critique.md +780 -0
  35. package/packages/skills/impeccable/reference/delight.md +302 -0
  36. package/packages/skills/impeccable/reference/distill.md +111 -0
  37. package/packages/skills/impeccable/reference/document.md +429 -0
  38. package/packages/skills/impeccable/reference/extract.md +69 -0
  39. package/packages/skills/impeccable/reference/harden.md +347 -0
  40. package/packages/skills/impeccable/reference/hooks.md +90 -0
  41. package/packages/skills/impeccable/reference/init.md +172 -0
  42. package/packages/skills/impeccable/reference/interaction-design.md +189 -0
  43. package/packages/skills/impeccable/reference/layout.md +161 -0
  44. package/packages/skills/impeccable/reference/live.md +718 -0
  45. package/packages/skills/impeccable/reference/onboard.md +234 -0
  46. package/packages/skills/impeccable/reference/optimize.md +258 -0
  47. package/packages/skills/impeccable/reference/overdrive.md +130 -0
  48. package/packages/skills/impeccable/reference/polish.md +241 -0
  49. package/packages/skills/impeccable/reference/product.md +60 -0
  50. package/packages/skills/impeccable/reference/quieter.md +99 -0
  51. package/packages/skills/impeccable/reference/shape.md +165 -0
  52. package/packages/skills/impeccable/reference/typeset.md +279 -0
  53. package/packages/skills/impeccable/scripts/command-metadata.json +94 -0
  54. package/packages/skills/impeccable/scripts/context-signals.mjs +225 -0
  55. package/packages/skills/impeccable/scripts/context.mjs +961 -0
  56. package/packages/skills/impeccable/scripts/critique-storage.mjs +242 -0
  57. package/packages/skills/impeccable/scripts/detect-csp.mjs +198 -0
  58. package/packages/skills/impeccable/scripts/detect.mjs +21 -0
  59. package/packages/skills/impeccable/scripts/detector/browser/injected/index.mjs +1937 -0
  60. package/packages/skills/impeccable/scripts/detector/cli/main.mjs +290 -0
  61. package/packages/skills/impeccable/scripts/detector/design-system.mjs +750 -0
  62. package/packages/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +5185 -0
  63. package/packages/skills/impeccable/scripts/detector/detect-antipatterns.mjs +50 -0
  64. package/packages/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +277 -0
  65. package/packages/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +568 -0
  66. package/packages/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +1015 -0
  67. package/packages/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +234 -0
  68. package/packages/skills/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +189 -0
  69. package/packages/skills/impeccable/scripts/detector/findings.mjs +12 -0
  70. package/packages/skills/impeccable/scripts/detector/node/file-system.mjs +198 -0
  71. package/packages/skills/impeccable/scripts/detector/profile/profiler.mjs +166 -0
  72. package/packages/skills/impeccable/scripts/detector/registry/antipatterns.mjs +459 -0
  73. package/packages/skills/impeccable/scripts/detector/rules/checks.mjs +2707 -0
  74. package/packages/skills/impeccable/scripts/detector/shared/color.mjs +124 -0
  75. package/packages/skills/impeccable/scripts/detector/shared/constants.mjs +101 -0
  76. package/packages/skills/impeccable/scripts/detector/shared/inline-ignores.mjs +148 -0
  77. package/packages/skills/impeccable/scripts/detector/shared/page.mjs +7 -0
  78. package/packages/skills/impeccable/scripts/hook-admin.mjs +660 -0
  79. package/packages/skills/impeccable/scripts/hook-before-edit.mjs +476 -0
  80. package/packages/skills/impeccable/scripts/hook-lib.mjs +1632 -0
  81. package/packages/skills/impeccable/scripts/hook.mjs +61 -0
  82. package/packages/skills/impeccable/scripts/lib/design-parser.mjs +842 -0
  83. package/packages/skills/impeccable/scripts/lib/impeccable-config.mjs +638 -0
  84. package/packages/skills/impeccable/scripts/lib/impeccable-paths.mjs +128 -0
  85. package/packages/skills/impeccable/scripts/lib/is-generated.mjs +69 -0
  86. package/packages/skills/impeccable/scripts/lib/target-args.mjs +42 -0
  87. package/packages/skills/impeccable/scripts/live/browser-script-parts.mjs +49 -0
  88. package/packages/skills/impeccable/scripts/live/completion.mjs +19 -0
  89. package/packages/skills/impeccable/scripts/live/event-validation.mjs +137 -0
  90. package/packages/skills/impeccable/scripts/live/insert-ui.mjs +458 -0
  91. package/packages/skills/impeccable/scripts/live/manual-apply.mjs +939 -0
  92. package/packages/skills/impeccable/scripts/live/manual-edit-routes.mjs +357 -0
  93. package/packages/skills/impeccable/scripts/live/manual-edits-buffer.mjs +152 -0
  94. package/packages/skills/impeccable/scripts/live/session-store.mjs +289 -0
  95. package/packages/skills/impeccable/scripts/live/svelte-component.mjs +826 -0
  96. package/packages/skills/impeccable/scripts/live/sveltekit-adapter.mjs +274 -0
  97. package/packages/skills/impeccable/scripts/live/ui-core.mjs +180 -0
  98. package/packages/skills/impeccable/scripts/live/vocabulary.mjs +36 -0
  99. package/packages/skills/impeccable/scripts/live-accept.mjs +812 -0
  100. package/packages/skills/impeccable/scripts/live-browser-dom.js +146 -0
  101. package/packages/skills/impeccable/scripts/live-browser-session.js +123 -0
  102. package/packages/skills/impeccable/scripts/live-browser.js +11173 -0
  103. package/packages/skills/impeccable/scripts/live-commit-manual-edits.mjs +1241 -0
  104. package/packages/skills/impeccable/scripts/live-complete.mjs +75 -0
  105. package/packages/skills/impeccable/scripts/live-copy-edit-agent.mjs +683 -0
  106. package/packages/skills/impeccable/scripts/live-discard-manual-edits.mjs +51 -0
  107. package/packages/skills/impeccable/scripts/live-inject.mjs +583 -0
  108. package/packages/skills/impeccable/scripts/live-insert.mjs +272 -0
  109. package/packages/skills/impeccable/scripts/live-manual-edit-evidence.mjs +363 -0
  110. package/packages/skills/impeccable/scripts/live-poll.mjs +384 -0
  111. package/packages/skills/impeccable/scripts/live-resume.mjs +94 -0
  112. package/packages/skills/impeccable/scripts/live-server.mjs +1135 -0
  113. package/packages/skills/impeccable/scripts/live-status.mjs +61 -0
  114. package/packages/skills/impeccable/scripts/live-target.mjs +30 -0
  115. package/packages/skills/impeccable/scripts/live-wrap.mjs +894 -0
  116. package/packages/skills/impeccable/scripts/live.mjs +297 -0
  117. package/packages/skills/impeccable/scripts/modern-screenshot.umd.js +14 -0
  118. package/packages/skills/impeccable/scripts/palette.mjs +633 -0
  119. package/packages/skills/impeccable/scripts/pin.mjs +214 -0
  120. package/packages/skills/ponytail/SKILL.md +117 -0
  121. package/packages/skills/stitch-design-taste/DESIGN.md +121 -0
  122. package/packages/skills/stitch-design-taste/SKILL.md +184 -0
  123. package/packages/skills/waypoint/SKILL.md +67 -0
  124. package/packages/skills/wp/SKILL.md +330 -0
  125. package/packages/skills/wp/caveman-wire.md +148 -0
  126. package/packages/skills/wp/reference.md +411 -0
  127. package/scripts/detect-platform.sh +32 -0
  128. package/scripts/install.sh +123 -0
  129. package/scripts/lib/common.sh +215 -0
  130. package/scripts/sync-skills.sh +21 -0
  131. package/scripts/uninstall.sh +38 -0
  132. package/scripts/waypoint +281 -0
@@ -0,0 +1,214 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Pin/unpin sub-commands as standalone skill shortcuts.
4
+ *
5
+ * Usage:
6
+ * node <scripts_path>/pin.mjs pin <command>
7
+ * node <scripts_path>/pin.mjs unpin <command>
8
+ *
9
+ * `pin audit` creates a lightweight /audit skill that redirects to /impeccable audit.
10
+ * `unpin audit` removes that shortcut.
11
+ *
12
+ * The script discovers harness directories (.claude/skills, .cursor/skills, etc.)
13
+ * in the project root and creates/removes the pin in all of them.
14
+ */
15
+
16
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, rmSync, readdirSync } from 'node:fs';
17
+ import { join, resolve, dirname } from 'node:path';
18
+ import { fileURLToPath } from 'node:url';
19
+
20
+ const __dirname = dirname(fileURLToPath(import.meta.url));
21
+
22
+ // All known harness directories
23
+ const HARNESS_DIRS = [
24
+ '.claude', '.cursor', '.gemini', '.codex', '.agents',
25
+ '.trae', '.trae-cn', '.pi', '.opencode', '.kiro', '.rovodev',
26
+ ];
27
+
28
+ // Valid sub-command names
29
+ const VALID_COMMANDS = [
30
+ 'craft', 'init', 'extract', 'document', 'shape',
31
+ 'critique', 'audit',
32
+ 'polish', 'bolder', 'quieter', 'distill', 'harden', 'onboard', 'live',
33
+ 'animate', 'colorize', 'typeset', 'layout', 'delight', 'overdrive',
34
+ 'clarify', 'adapt', 'optimize',
35
+ ];
36
+
37
+ // Marker to identify pinned skills (so unpin doesn't delete user skills)
38
+ const PIN_MARKER = '<!-- impeccable-pinned-skill -->';
39
+
40
+ /**
41
+ * Walk up from startDir to find a project root.
42
+ */
43
+ function findProjectRoot(startDir = process.cwd()) {
44
+ let dir = resolve(startDir);
45
+ while (dir !== '/') {
46
+ if (
47
+ existsSync(join(dir, 'package.json')) ||
48
+ existsSync(join(dir, '.git')) ||
49
+ existsSync(join(dir, 'skills-lock.json'))
50
+ ) {
51
+ return dir;
52
+ }
53
+ const parent = resolve(dir, '..');
54
+ if (parent === dir) break;
55
+ dir = parent;
56
+ }
57
+ return resolve(startDir);
58
+ }
59
+
60
+ /**
61
+ * Find harness skill directories that have an impeccable skill installed.
62
+ */
63
+ function findHarnessDirs(projectRoot) {
64
+ const dirs = [];
65
+ for (const harness of HARNESS_DIRS) {
66
+ const skillsDir = join(projectRoot, harness, 'skills');
67
+ // Only pin in harness dirs that already have impeccable installed
68
+ const impeccableDir = join(skillsDir, 'impeccable');
69
+ if (existsSync(impeccableDir) || existsSync(join(skillsDir, 'i-impeccable'))) {
70
+ dirs.push(skillsDir);
71
+ }
72
+ }
73
+ return dirs;
74
+ }
75
+
76
+ /**
77
+ * Load command metadata (descriptions for pinned skills).
78
+ */
79
+ function loadCommandMetadata() {
80
+ const metadataPath = join(__dirname, 'command-metadata.json');
81
+ if (existsSync(metadataPath)) {
82
+ return JSON.parse(readFileSync(metadataPath, 'utf-8'));
83
+ }
84
+ return {};
85
+ }
86
+
87
+ /**
88
+ * Generate a pinned skill's SKILL.md content.
89
+ */
90
+ function generatePinnedSkill(command, metadata) {
91
+ const desc = metadata[command]?.description || `Shortcut for /impeccable ${command}.`;
92
+ const hint = metadata[command]?.argumentHint || '[target]';
93
+
94
+ return `---
95
+ name: ${command}
96
+ description: "${desc}"
97
+ argument-hint: "${hint}"
98
+ user-invocable: true
99
+ ---
100
+
101
+ ${PIN_MARKER}
102
+
103
+ This is a pinned shortcut for \`{{command_prefix}}impeccable ${command}\`.
104
+
105
+ Invoke {{command_prefix}}impeccable ${command}, passing along any arguments provided here, and follow its instructions.
106
+ `;
107
+ }
108
+
109
+ /**
110
+ * Pin a command: create shortcut skill in all harness dirs.
111
+ */
112
+ function pin(command, projectRoot) {
113
+ const metadata = loadCommandMetadata();
114
+ const harnessDirs = findHarnessDirs(projectRoot);
115
+
116
+ if (harnessDirs.length === 0) {
117
+ console.log('No harness directories with impeccable installed found.');
118
+ return false;
119
+ }
120
+
121
+ const content = generatePinnedSkill(command, metadata);
122
+ let created = 0;
123
+
124
+ for (const skillsDir of harnessDirs) {
125
+ // Check if skill already exists (and isn't a pin)
126
+ const skillDir = join(skillsDir, command);
127
+ if (existsSync(skillDir)) {
128
+ const existingMd = join(skillDir, 'SKILL.md');
129
+ if (existsSync(existingMd)) {
130
+ const existing = readFileSync(existingMd, 'utf-8');
131
+ if (!existing.includes(PIN_MARKER)) {
132
+ console.log(` SKIP: ${skillDir} (non-pinned skill already exists)`);
133
+ continue;
134
+ }
135
+ }
136
+ }
137
+
138
+ mkdirSync(skillDir, { recursive: true });
139
+ writeFileSync(join(skillDir, 'SKILL.md'), content, 'utf-8');
140
+ console.log(` + ${skillDir}`);
141
+ created++;
142
+ }
143
+
144
+ if (created > 0) {
145
+ console.log(`\nPinned '${command}' as a standalone shortcut in ${created} location(s).`);
146
+ console.log(`You can now use /${command} directly.`);
147
+ }
148
+
149
+ return created > 0;
150
+ }
151
+
152
+ /**
153
+ * Unpin a command: remove shortcut skill from all harness dirs.
154
+ */
155
+ function unpin(command, projectRoot) {
156
+ const harnessDirs = findHarnessDirs(projectRoot);
157
+ let removed = 0;
158
+
159
+ for (const skillsDir of harnessDirs) {
160
+ const skillDir = join(skillsDir, command);
161
+ if (!existsSync(skillDir)) continue;
162
+
163
+ const skillMd = join(skillDir, 'SKILL.md');
164
+ if (!existsSync(skillMd)) continue;
165
+
166
+ // Safety: only remove if it's a pinned skill
167
+ const content = readFileSync(skillMd, 'utf-8');
168
+ if (!content.includes(PIN_MARKER)) {
169
+ console.log(` SKIP: ${skillDir} (not a pinned skill)`);
170
+ continue;
171
+ }
172
+
173
+ rmSync(skillDir, { recursive: true, force: true });
174
+ console.log(` - ${skillDir}`);
175
+ removed++;
176
+ }
177
+
178
+ if (removed > 0) {
179
+ console.log(`\nUnpinned '${command}' from ${removed} location(s).`);
180
+ console.log(`Use /impeccable ${command} to access it.`);
181
+ } else {
182
+ console.log(`No pinned '${command}' shortcut found.`);
183
+ }
184
+
185
+ return removed > 0;
186
+ }
187
+
188
+ // --- CLI ---
189
+ const [,, action, command] = process.argv;
190
+
191
+ if (!action || !command) {
192
+ console.log('Usage: node pin.mjs <pin|unpin> <command>');
193
+ console.log(`\nAvailable commands: ${VALID_COMMANDS.join(', ')}`);
194
+ process.exit(1);
195
+ }
196
+
197
+ if (action !== 'pin' && action !== 'unpin') {
198
+ console.error(`Unknown action: ${action}. Use 'pin' or 'unpin'.`);
199
+ process.exit(1);
200
+ }
201
+
202
+ if (!VALID_COMMANDS.includes(command)) {
203
+ console.error(`Unknown command: ${command}`);
204
+ console.error(`Available commands: ${VALID_COMMANDS.join(', ')}`);
205
+ process.exit(1);
206
+ }
207
+
208
+ const root = findProjectRoot();
209
+
210
+ if (action === 'pin') {
211
+ pin(command, root);
212
+ } else {
213
+ unpin(command, root);
214
+ }
@@ -0,0 +1,117 @@
1
+ ---
2
+ name: ponytail
3
+ description: >
4
+ Forces the laziest solution that actually works, simplest, shortest, most
5
+ minimal. Channels a senior dev who has seen everything: question whether the
6
+ task needs to exist at all (YAGNI), reach for the standard library before
7
+ custom code, native platform features before dependencies, one line before
8
+ fifty. Supports intensity levels: lite, full (default), ultra. Use whenever
9
+ the user says "ponytail", "be lazy", "lazy mode", "simplest solution",
10
+ "minimal solution", "yagni", "do less", or "shortest path", and whenever
11
+ they complain about over-engineering, bloat, boilerplate, or unnecessary
12
+ dependencies.
13
+ argument-hint: "[lite|full|ultra]"
14
+ license: MIT
15
+ ---
16
+
17
+ # Ponytail
18
+
19
+ You are a lazy senior developer. Lazy means efficient, not careless. You have
20
+ seen every over-engineered codebase and been paged at 3am for one. The best
21
+ code is the code never written.
22
+
23
+ ## Persistence
24
+
25
+ ACTIVE EVERY RESPONSE. No drift back to over-building. Still active if
26
+ unsure. Off only: "stop ponytail" / "normal mode". Default: **full**.
27
+ Switch: `/ponytail lite|full|ultra`.
28
+
29
+ ## The ladder
30
+
31
+ Stop at the first rung that holds:
32
+
33
+ 1. **Does this need to exist at all?** Speculative need = skip it, say so in one line. (YAGNI)
34
+ 2. **Already in this codebase?** A helper, util, type, or pattern that already lives here → reuse it. Look before you write; re-implementing what's a few files over is the most common slop.
35
+ 3. **Stdlib does it?** Use it.
36
+ 4. **Native platform feature covers it?** `<input type="date">` over a picker lib, CSS over JS, DB constraint over app code.
37
+ 5. **Already-installed dependency solves it?** Use it. Never add a new one for what a few lines can do.
38
+ 6. **Can it be one line?** One line.
39
+ 7. **Only then:** the minimum code that works.
40
+
41
+ The ladder is a reflex, not a research project — but it runs *after* you
42
+ understand the problem, not instead of it. Read the task and the code it
43
+ touches first, trace the real flow end to end, then climb. Two rungs work →
44
+ take the higher one and move on. The first lazy solution that works is the
45
+ right one — once you actually know what the change has to touch.
46
+
47
+ **Bug fix = root cause, not symptom.** A report names a symptom. Before you
48
+ edit, grep every caller of the function you're about to touch. The lazy fix IS
49
+ the root-cause fix: one guard in the shared function is a smaller diff than a
50
+ guard in every caller — and patching only the path the ticket names leaves
51
+ every sibling caller still broken. Fix it once, where all callers route through.
52
+
53
+ ## Rules
54
+
55
+ - No unrequested abstractions: no interface with one implementation, no factory for one product, no config for a value that never changes.
56
+ - No boilerplate, no scaffolding "for later", later can scaffold for itself.
57
+ - Deletion over addition. Boring over clever, clever is what someone decodes at 3am.
58
+ - Fewest files possible. Shortest working diff wins — but only once you understand the problem. The smallest change in the wrong place isn't lazy, it's a second bug.
59
+ - Complex request? Ship the lazy version and question it in the same response, "Did X; Y covers it. Need full X? Say so." Never stall on an answer you can default.
60
+ - Two stdlib options, same size? Take the one that's correct on edge cases. Lazy means writing less code, not picking the flimsier algorithm.
61
+ - Mark deliberate simplifications with a `ponytail:` comment (`// ponytail: this exists`), simple reads as intent, not ignorance. Shortcut with a known ceiling (global lock, O(n²) scan, naive heuristic)? The comment names the ceiling and the upgrade path: `# ponytail: global lock, per-account locks if throughput matters`.
62
+
63
+ ## Output
64
+
65
+ Code first. Then at most three short lines: what was skipped, when to add it.
66
+ No essays, no feature tours, no design notes. If the explanation is longer
67
+ than the code, delete the explanation, every paragraph defending a
68
+ simplification is complexity smuggled back in as prose. Explanation the user
69
+ explicitly asked for (a report, a walkthrough, per-phase notes) is not debt,
70
+ give it in full, the rule is only against unrequested prose.
71
+
72
+ Pattern: `[code] → skipped: [X], add when [Y].`
73
+
74
+ ## Intensity
75
+
76
+ | Level | What change |
77
+ |-------|------------|
78
+ | **lite** | Build what's asked, but name the lazier alternative in one line. User picks. |
79
+ | **full** | The ladder enforced. Stdlib and native first. Shortest diff, shortest explanation. Default. |
80
+ | **ultra** | YAGNI extremist. Deletion before addition. Ship the one-liner and challenge the rest of the requirement in the same breath. |
81
+
82
+ Example: "Add a cache for these API responses."
83
+ - lite: "Done, cache added. FYI: `functools.lru_cache` covers this in one line if you'd rather not own a cache class."
84
+ - full: "`@lru_cache(maxsize=1000)` on the fetch function. Skipped custom cache class, add when lru_cache measurably falls short."
85
+ - ultra: "No cache until a profiler says so. When it does: `@lru_cache`. A hand-rolled TTL cache class is a bug farm with a hit rate."
86
+
87
+ ## When NOT to be lazy
88
+
89
+ Never simplify away: input validation at trust boundaries, error handling
90
+ that prevents data loss, security measures, accessibility basics, anything
91
+ explicitly requested. User insists on the full version → build it, no
92
+ re-arguing.
93
+
94
+ Never lazy about understanding the problem. The ladder shortens the
95
+ solution, never the reading. Trace the whole thing first — every file the
96
+ change touches, the actual flow — before picking a rung. Laziness that skips
97
+ comprehension to ship a small diff is the dangerous kind: it dresses up as
98
+ efficiency and ships a confident wrong fix. Read fully, then be lazy.
99
+
100
+ Hardware is never the ideal on paper: a real clock drifts, a real sensor
101
+ reads off, a PCA9685 runs a few percent fast. Leave the calibration knob, not
102
+ just less code, the physical world needs tuning a minimal model can't see.
103
+
104
+ Lazy code without its check is unfinished. Non-trivial logic (a branch, a
105
+ loop, a parser, a money/security path) leaves ONE runnable check behind, the
106
+ smallest thing that fails if the logic breaks: an `assert`-based
107
+ `demo()`/`__main__` self-check or one small `test_*.py`. No frameworks, no
108
+ fixtures, no per-function suites unless asked. Trivial one-liners need no
109
+ test, YAGNI applies to tests too.
110
+
111
+ ## Boundaries
112
+
113
+ Ponytail governs what you build, not how you talk (pair with Caveman for
114
+ terse prose). "stop ponytail" / "normal mode": revert. Level persists until
115
+ changed or session end.
116
+
117
+ The shortest path to done is the right path.
@@ -0,0 +1,121 @@
1
+ # Design System: Taste Standard
2
+ **Skill:** stitch-design-taste
3
+
4
+ ---
5
+
6
+ ## Configuration — Set Your Style
7
+ Adjust these dials before using this design system. They control how creative, dense, and animated the output should be. Pick the level that fits your project.
8
+
9
+ | Dial | Level | Description |
10
+ |------|-------|-------------|
11
+ | **Creativity** | `8` | `1` = Ultra-minimal, Swiss, silent, monochrome. `5` = Balanced, clean but with personality. `10` = Expressive, editorial, bold typography experiments, inline images in headlines, strong asymmetry. Default: `8` |
12
+ | **Density** | `4` | `1` = Gallery-airy, massive whitespace. `5` = Balanced sections. `10` = Cockpit-dense, data-heavy. Default: `4` |
13
+ | **Variance** | `8` | `1` = Predictable, symmetric grids. `5` = Subtle offsets. `10` = Artsy chaotic, no two sections alike. Default: `8` |
14
+ | **Motion Intent** | `6` | `1` = Static, no animation noted. `5` = Subtle hover/entrance cues. `10` = Cinematic orchestration noted in every component. Default: `6` |
15
+
16
+ > **How to use:** Change the numbers above to match your project's vibe. At **Creativity 1–3**, the system produces clean, quiet, Notion-like interfaces. At **Creativity 7–10**, expect inline image typography, dramatic scale contrast, and strong editorial layouts. The rest of the rules below adapt to your chosen levels.
17
+
18
+ ---
19
+
20
+ ## 1. Visual Theme & Atmosphere
21
+ A restrained, gallery-airy interface with confident asymmetric layouts and fluid spring-physics motion. The atmosphere is clinical yet warm — like a well-lit architecture studio where every element earns its place through function. Density is balanced (Level 4), variance runs high (Level 8) to prevent symmetrical boredom, and motion is fluid but never theatrical (Level 6). The overall impression: expensive, intentional, alive.
22
+
23
+ ## 2. Color Palette & Roles
24
+ - **Canvas White** (#F9FAFB) — Primary background surface. Warm-neutral, never clinical blue-white
25
+ - **Pure Surface** (#FFFFFF) — Card and container fill. Used with whisper shadow for elevation
26
+ - **Charcoal Ink** (#18181B) — Primary text. Zinc-950 depth — never pure black
27
+ - **Steel Secondary** (#71717A) — Body text, descriptions, metadata. Zinc-500 warmth
28
+ - **Muted Slate** (#94A3B8) — Tertiary text, timestamps, disabled states
29
+ - **Whisper Border** (rgba(226,232,240,0.5)) — Card borders, structural 1px lines. Semi-transparent for depth
30
+ - **Diffused Shadow** (rgba(0,0,0,0.05)) — Card elevation. Wide-spreading, 40px blur, -15px offset. Never harsh
31
+
32
+ ### Accent Selection (Pick ONE per project)
33
+ - **Emerald Signal** (#10B981) — For growth, success, positive data dashboards
34
+ - **Electric Blue** (#3B82F6) — For productivity, SaaS, developer tools
35
+ - **Deep Rose** (#E11D48) — For creative, editorial, fashion-adjacent projects
36
+ - **Amber Warmth** (#F59E0B) — For community, social, warm-toned products
37
+
38
+ ### Banned Colors
39
+ - Purple/Violet neon gradients — the "AI Purple" aesthetic
40
+ - Pure Black (#000000) — always Off-Black or Zinc-950
41
+ - Oversaturated accents above 80% saturation
42
+ - Mixed warm/cool gray systems within one project
43
+
44
+ ## 3. Typography Rules
45
+ - **Display:** `Geist`, `Satoshi`, `Cabinet Grotesk`, or `Outfit` — Track-tight (`-0.025em`), controlled fluid scale, weight-driven hierarchy (700–900). Not screaming. Leading compressed (`1.1`). Alternatives forced — `Inter` is BANNED for premium contexts
46
+ - **Body:** Same family at weight 400 — Relaxed leading (`1.65`), 65ch max-width, Steel Secondary color (#71717A)
47
+ - **Mono:** `Geist Mono` or `JetBrains Mono` — For code blocks, metadata, timestamps. When density exceeds Level 7, all numbers switch to monospace
48
+ - **Scale:** Display at `clamp(2.25rem, 5vw, 3.75rem)`. Body at `1rem/1.125rem`. Mono metadata at `0.8125rem`
49
+
50
+ ### Banned Fonts
51
+ - `Inter` — banned everywhere in premium/creative contexts
52
+ - Generic serif fonts (`Times New Roman`, `Georgia`, `Garamond`, `Palatino`) — BANNED. If serif is needed for editorial/creative, use only distinctive modern serifs like `Fraunces`, `Gambarino`, `Editorial New`, or `Instrument Serif`. Never use default browser serif stacks. Serif is always BANNED in dashboards or software UIs regardless
53
+
54
+ ## 4. Component Stylings
55
+ * **Buttons:** Flat surface, no outer glow. Primary: accent fill with white text. Secondary: ghost/outline. Active state: `-1px translateY` or `scale(0.98)` for tactile push. Hover: subtle background shift, never glow
56
+ * **Cards/Containers:** Generously rounded corners (`2.5rem`). Pure white fill. Whisper border (`1px`, semi-transparent). Diffused shadow (`0 20px 40px -15px rgba(0,0,0,0.05)`). Internal padding `2rem–2.5rem`. Used ONLY when elevation communicates hierarchy — high-density layouts replace cards with `border-top` dividers or negative space
57
+ * **Inputs/Forms:** Label positioned above input. Helper text optional. Error text below in Deep Rose. Focus ring in accent color, `2px` offset. No floating labels. Standard `0.5rem` gap between label-input-error stack
58
+ * **Navigation:** Sleek, sticky. Icons scale on hover (Dock Magnification optional). No hamburger on desktop. Clean horizontal with generous spacing
59
+ * **Loaders:** Skeletal shimmer matching exact layout dimensions and rounded corners. Shifting light reflection across placeholder shapes. Never circular spinners
60
+ * **Empty States:** Composed illustration or icon composition with guidance text. Never just "No data found"
61
+ * **Error States:** Inline, contextual. Red accent underline or border. Clear recovery action
62
+
63
+ ## 5. Hero Section
64
+ The Hero is the first impression — it must be striking, creative, and never generic.
65
+ - **Inline Image Typography:** Embed small, contextual photos or visuals directly between words or letters in the headline. Example: "We build [photo of hands typing] digital [photo of screen] products" — images sit inline at type-height, rounded, acting as visual punctuation between words. This is the signature creative technique
66
+ - **No Overlapping Elements:** Text must never overlap images or other text. Every element has its own clear spatial zone. No z-index stacking of content layers, no absolute-positioned headlines over images. Clean separation always
67
+ - **No Filler Text:** "Scroll to explore", "Swipe down", scroll arrow icons, bouncing chevrons, and any instructional UI chrome are BANNED. The user knows how to scroll. Let the content pull them in naturally
68
+ - **Asymmetric Structure:** Centered Hero layouts are BANNED at this variance level. Use Split Screen (50/50), Left-Aligned text / Right visual, or Asymmetric Whitespace with large empty zones
69
+ - **CTA Restraint:** Maximum one primary CTA button. No secondary "Learn more" links. No redundant micro-copy below the headline
70
+
71
+ ## 6. Layout Principles
72
+ - **Grid-First:** CSS Grid for all structural layouts. Never flexbox percentage math (`calc(33% - 1rem)` is BANNED)
73
+ - **No Overlapping:** Elements must never overlap each other. No absolute-positioned layers stacking content on content. Every element occupies its own grid cell or flow position. Clean, separated spatial zones
74
+ - **Feature Sections:** The "3 equal cards in a row" pattern is BANNED. Use 2-column Zig-Zag, asymmetric Bento grids (2fr 1fr 1fr), or horizontal scroll galleries
75
+ - **Containment:** All content within `max-width: 1400px`, centered. Generous horizontal padding (`1rem` mobile, `2rem` tablet, `4rem` desktop)
76
+ - **Full-Height:** Use `min-height: 100dvh` — never `height: 100vh` (iOS Safari address bar jump)
77
+ - **Bento Architecture:** For feature grids, use Row 1: 3 columns | Row 2: 2 columns (70/30 split). Each tile contains a perpetual micro-animation
78
+
79
+ ## 7. Responsive Rules
80
+ Every screen must work flawlessly across all viewports. **Responsive is not optional — it is a hard requirement. Every single element must be tested at 375px, 768px, and 1440px.**
81
+ - **Mobile-First Collapse (< 768px):** All multi-column layouts collapse to a strict single column. `width: 100%`, `padding: 1rem`, `gap: 1.5rem`. No exceptions
82
+ - **No Horizontal Scroll:** Horizontal overflow on mobile is a critical failure. All elements must fit within viewport width. If any element causes horizontal scroll, the design is broken
83
+ - **Typography Scaling:** Headlines scale down gracefully via `clamp()`. Body text stays `1rem` minimum. Never shrink body below `14px`. Headlines must remain readable on 375px screens
84
+ - **Touch Targets:** All interactive elements minimum `44px` tap target. Generous spacing between clickable items. Buttons must be full-width on mobile
85
+ - **Image Behavior:** Hero and inline images scale proportionally. Inline typography images (photos between words) stack below the headline on mobile instead of inline
86
+ - **Navigation:** Desktop horizontal nav collapses to a clean mobile menu (slide-in or full-screen overlay). No tiny hamburger icons without labels
87
+ - **Cards & Grids:** Bento grids and asymmetric layouts revert to stacked single-column cards with full-width. Maintain internal padding (`1rem`)
88
+ - **Spacing Consistency:** Vertical section gaps reduce proportionally on mobile (`clamp(3rem, 8vw, 6rem)`). Never cramped, never excessively airy
89
+ - **Testing Viewports:** Designs must be verified at: `375px` (iPhone SE), `390px` (iPhone 14), `768px` (iPad), `1024px` (small laptop), `1440px` (desktop)
90
+
91
+ ## 8. Motion & Interaction (Code-Phase Intent)
92
+ > **Note:** Stitch generates static screens — it does not animate. This section documents the **intended motion behavior** so that the coding agent (Antigravity, Cursor, etc.) knows exactly how to implement animations when building the exported design into a live product.
93
+
94
+ - **Physics Engine:** Spring-based exclusively. `stiffness: 100, damping: 20`. No linear easing anywhere. Premium, weighty feel on all interactive elements
95
+ - **Perpetual Micro-Loops:** Every active dashboard component has an infinite-loop state — Pulse on status dots, Typewriter on search bars, Float on feature icons, Shimmer on loading states
96
+ - **Staggered Orchestration:** Lists and grids mount with cascaded delays (`animation-delay: calc(var(--index) * 100ms)`). Waterfall reveals, never instant mount
97
+ - **Layout Transitions:** Smooth re-ordering via shared element IDs. Items swap positions with physics, simulating real-time intelligence
98
+ - **Hardware Rules:** Animate ONLY `transform` and `opacity`. Never `top`, `left`, `width`, `height`. Grain/noise filters on fixed, pointer-events-none pseudo-elements only
99
+ - **Performance:** CPU-heavy perpetual animations isolated in microscopic leaf components. Never trigger parent re-renders. Target 60fps minimum
100
+
101
+ ## 9. Anti-Patterns (Banned)
102
+ - No emojis — anywhere in UI, code, or alt text
103
+ - No `Inter` font — use `Geist`, `Outfit`, `Cabinet Grotesk`, `Satoshi`
104
+ - No generic serif fonts (`Times New Roman`, `Georgia`, `Garamond`) — if serif is needed, use distinctive modern serifs only (`Fraunces`, `Instrument Serif`)
105
+ - No pure black (`#000000`) — Off-Black or Zinc-950 only
106
+ - No neon outer glows or default box-shadow glows
107
+ - No oversaturated accent colors above 80%
108
+ - No excessive gradient text on large headers
109
+ - No custom mouse cursors
110
+ - No overlapping elements — text never overlaps images or other content. Clean spatial separation always
111
+ - No 3-column equal card layouts for features
112
+ - No centered Hero sections (at this variance level)
113
+ - No filler UI text: "Scroll to explore", "Swipe down", "Discover more below", scroll arrows, bouncing chevrons — all BANNED
114
+ - No generic names: "John Doe", "Sarah Chan", "Acme", "Nexus", "SmartFlow"
115
+ - No fake round numbers: `99.99%`, `50%`, `1234567` — use organic data: `47.2%`, `+1 (312) 847-1928`
116
+ - No AI copywriting clichés: "Elevate", "Seamless", "Unleash", "Next-Gen", "Revolutionize"
117
+ - No broken Unsplash links — use `picsum.photos/seed/{id}/800/600` or SVG UI Avatars
118
+ - No generic `shadcn/ui` defaults — customize radii, colors, shadows to match this system
119
+ - No `z-index` spam — use only for Navbar, Modal, Overlay layer contexts
120
+ - No `h-screen` — always `min-h-[100dvh]`
121
+ - No circular loading spinners — skeletal shimmer only
@@ -0,0 +1,184 @@
1
+ ---
2
+ name: stitch-design-taste
3
+ description: Semantic Design System Skill for Google Stitch. Generates agent-friendly DESIGN.md files that enforce premium, anti-generic UI standards — strict typography, calibrated color, asymmetric layouts, perpetual micro-motion, and hardware-accelerated performance.
4
+ ---
5
+
6
+ # Stitch Design Taste — Semantic Design System Skill
7
+
8
+ ## Overview
9
+ This skill generates `DESIGN.md` files optimized for Google Stitch screen generation. It translates the battle-tested anti-slop frontend engineering directives into Stitch's native semantic design language — descriptive, natural-language rules paired with precise values that Stitch's AI agent can interpret to produce premium, non-generic interfaces.
10
+
11
+ The generated `DESIGN.md` serves as the **single source of truth** for prompting Stitch to generate new screens that align with a curated, high-agency design language. Stitch interprets design through **"Visual Descriptions"** supported by specific color values, typography specs, and component behaviors.
12
+
13
+ ## Prerequisites
14
+ - Access to Google Stitch via [labs.google/stitch](https://labs.google/stitch)
15
+ - Optionally: Stitch MCP Server for programmatic integration with Cursor, Antigravity, or Gemini CLI
16
+
17
+ ## The Goal
18
+ Generate a `DESIGN.md` file that encodes:
19
+ 1. **Visual atmosphere** — the mood, density, and design philosophy
20
+ 2. **Color calibration** — neutrals, accents, and banned patterns with hex codes
21
+ 3. **Typographic architecture** — font stacks, scale hierarchy, and anti-patterns
22
+ 4. **Component behaviors** — buttons, cards, inputs with interaction states
23
+ 5. **Layout principles** — grid systems, spacing philosophy, responsive strategy
24
+ 6. **Motion philosophy** — animation engine specs, spring physics, perpetual micro-interactions
25
+ 7. **Anti-patterns** — explicit list of banned AI design clichés
26
+
27
+ ## Analysis & Synthesis Instructions
28
+
29
+ ### 1. Define the Atmosphere
30
+ Evaluate the target project's intent. Use evocative adjectives from the taste spectrum:
31
+ - **Density:** "Art Gallery Airy" (1–3) → "Daily App Balanced" (4–7) → "Cockpit Dense" (8–10)
32
+ - **Variance:** "Predictable Symmetric" (1–3) → "Offset Asymmetric" (4–7) → "Artsy Chaotic" (8–10)
33
+ - **Motion:** "Static Restrained" (1–3) → "Fluid CSS" (4–7) → "Cinematic Choreography" (8–10)
34
+
35
+ Default baseline: Variance 8, Motion 6, Density 4. Adapt dynamically based on user's vibe description.
36
+
37
+ ### 2. Map the Color Palette
38
+ For each color provide: **Descriptive Name** + **Hex Code** + **Functional Role**.
39
+
40
+ **Mandatory constraints:**
41
+ - Maximum 1 accent color. Saturation below 80%
42
+ - The "AI Purple/Blue Neon" aesthetic is strictly BANNED — no purple button glows, no neon gradients
43
+ - Use absolute neutral bases (Zinc/Slate) with high-contrast singular accents
44
+ - Stick to one palette for the entire output — no warm/cool gray fluctuation
45
+ - Never use pure black (`#000000`) — use Off-Black, Zinc-950, or Charcoal
46
+
47
+ ### 3. Establish Typography Rules
48
+ - **Display/Headlines:** Track-tight, controlled scale. Not screaming. Hierarchy through weight and color, not just massive size
49
+ - **Body:** Relaxed leading, max 65 characters per line
50
+ - **Font Selection:** `Inter` is BANNED for premium/creative contexts. Force unique character: `Geist`, `Outfit`, `Cabinet Grotesk`, or `Satoshi`
51
+ - **Serif Ban:** Generic serif fonts (`Times New Roman`, `Georgia`, `Garamond`, `Palatino`) are BANNED. If serif is needed for editorial/creative contexts, use only distinctive modern serifs: `Fraunces`, `Gambarino`, `Editorial New`, or `Instrument Serif`. Serif is always BANNED in dashboards or software UIs
52
+ - **Dashboard Constraint:** Use Sans-Serif pairings exclusively (`Geist` + `Geist Mono` or `Satoshi` + `JetBrains Mono`)
53
+ - **High-Density Override:** When density exceeds 7, all numbers must use Monospace
54
+
55
+ ### 4. Define the Hero Section
56
+ The Hero is the first impression and must be creative, striking, and never generic:
57
+ - **Inline Image Typography:** Embed small, contextual photos or visuals directly between words or letters in the headline. Images sit inline at type-height, rounded, acting as visual punctuation. This is the signature creative technique
58
+ - **No Overlapping:** Text must never overlap images or other text. Every element occupies its own clean spatial zone
59
+ - **No Filler Text:** "Scroll to explore", "Swipe down", scroll arrow icons, bouncing chevrons are BANNED. The content should pull users in naturally
60
+ - **Asymmetric Structure:** Centered Hero layouts BANNED when variance exceeds 4
61
+ - **CTA Restraint:** Maximum one primary CTA. No secondary "Learn more" links
62
+
63
+ ### 5. Describe Component Stylings
64
+ For each component type, describe shape, color, shadow depth, and interaction behavior:
65
+ - **Buttons:** Tactile push feedback on active state. No neon outer glows. No custom mouse cursors
66
+ - **Cards:** Use ONLY when elevation communicates hierarchy. Tint shadows to background hue. For high-density layouts, replace cards with border-top dividers or negative space
67
+ - **Inputs/Forms:** Label above input, helper text optional, error text below. Standard gap spacing
68
+ - **Loading States:** Skeletal loaders matching layout dimensions — no generic circular spinners
69
+ - **Empty States:** Composed compositions indicating how to populate data
70
+ - **Error States:** Clear, inline error reporting
71
+
72
+ ### 6. Define Layout Principles
73
+ - No overlapping elements — every element occupies its own clear spatial zone. No absolute-positioned content stacking
74
+ - Centered Hero sections are BANNED when variance exceeds 4 — force Split Screen, Left-Aligned, or Asymmetric Whitespace
75
+ - The generic "3 equal cards horizontally" feature row is BANNED — use 2-column Zig-Zag, asymmetric grid, or horizontal scroll
76
+ - CSS Grid over Flexbox math — never use `calc()` percentage hacks
77
+ - Contain layouts using max-width constraints (e.g., 1400px centered)
78
+ - Full-height sections must use `min-h-[100dvh]` — never `h-screen` (iOS Safari catastrophic jump)
79
+
80
+ ### 7. Define Responsive Rules
81
+ Every design must work across all viewports:
82
+ - **Mobile-First Collapse (< 768px):** All multi-column layouts collapse to single column. No exceptions
83
+ - **No Horizontal Scroll:** Horizontal overflow on mobile is a critical failure
84
+ - **Typography Scaling:** Headlines scale via `clamp()`. Body text minimum `1rem`/`14px`
85
+ - **Touch Targets:** All interactive elements minimum `44px` tap target
86
+ - **Image Behavior:** Inline typography images (photos between words) stack below headline on mobile
87
+ - **Navigation:** Desktop horizontal nav collapses to clean mobile menu
88
+ - **Spacing:** Vertical section gaps reduce proportionally (`clamp(3rem, 8vw, 6rem)`)
89
+
90
+ ### 8. Encode Motion Philosophy
91
+ - **Spring Physics default:** `stiffness: 100, damping: 20` — premium, weighty feel. No linear easing
92
+ - **Perpetual Micro-Interactions:** Every active component should have an infinite loop state (Pulse, Typewriter, Float, Shimmer)
93
+ - **Staggered Orchestration:** Never mount lists instantly — use cascade delays for waterfall reveals
94
+ - **Performance:** Animate exclusively via `transform` and `opacity`. Never animate `top`, `left`, `width`, `height`. Grain/noise filters on fixed pseudo-elements only
95
+
96
+ ### 9. List Anti-Patterns (AI Tells)
97
+ Encode these as explicit "NEVER DO" rules in the DESIGN.md:
98
+ - No emojis anywhere
99
+ - No `Inter` font
100
+ - No generic serif fonts (`Times New Roman`, `Georgia`, `Garamond`) — distinctive modern serifs only if needed
101
+ - No pure black (`#000000`)
102
+ - No neon/outer glow shadows
103
+ - No oversaturated accents
104
+ - No excessive gradient text on large headers
105
+ - No custom mouse cursors
106
+ - No overlapping elements — clean spatial separation always
107
+ - No 3-column equal card layouts
108
+ - No generic names ("John Doe", "Acme", "Nexus")
109
+ - No fake round numbers (`99.99%`, `50%`)
110
+ - No AI copywriting clichés ("Elevate", "Seamless", "Unleash", "Next-Gen")
111
+ - No filler UI text: "Scroll to explore", "Swipe down", scroll arrows, bouncing chevrons
112
+ - No broken Unsplash links — use `picsum.photos` or SVG avatars
113
+ - No centered Hero sections (for high-variance projects)
114
+
115
+ ## Output Format (DESIGN.md Structure)
116
+
117
+ ```markdown
118
+ # Design System: [Project Title]
119
+
120
+ ## 1. Visual Theme & Atmosphere
121
+ (Evocative description of the mood, density, variance, and motion intensity.
122
+ Example: "A restrained, gallery-airy interface with confident asymmetric layouts
123
+ and fluid spring-physics motion. The atmosphere is clinical yet warm — like a
124
+ well-lit architecture studio.")
125
+
126
+ ## 2. Color Palette & Roles
127
+ - **Canvas White** (#F9FAFB) — Primary background surface
128
+ - **Pure Surface** (#FFFFFF) — Card and container fill
129
+ - **Charcoal Ink** (#18181B) — Primary text, Zinc-950 depth
130
+ - **Muted Steel** (#71717A) — Secondary text, descriptions, metadata
131
+ - **Whisper Border** (rgba(226,232,240,0.5)) — Card borders, 1px structural lines
132
+ - **[Accent Name]** (#XXXXXX) — Single accent for CTAs, active states, focus rings
133
+ (Max 1 accent. Saturation < 80%. No purple/neon.)
134
+
135
+ ## 3. Typography Rules
136
+ - **Display:** [Font Name] — Track-tight, controlled scale, weight-driven hierarchy
137
+ - **Body:** [Font Name] — Relaxed leading, 65ch max-width, neutral secondary color
138
+ - **Mono:** [Font Name] — For code, metadata, timestamps, high-density numbers
139
+ - **Banned:** Inter, generic system fonts for premium contexts. Serif fonts banned in dashboards.
140
+
141
+ ## 4. Component Stylings
142
+ * **Buttons:** Flat, no outer glow. Tactile -1px translate on active. Accent fill for primary, ghost/outline for secondary.
143
+ * **Cards:** Generously rounded corners (2.5rem). Diffused whisper shadow. Used only when elevation serves hierarchy. High-density: replace with border-top dividers.
144
+ * **Inputs:** Label above, error below. Focus ring in accent color. No floating labels.
145
+ * **Loaders:** Skeletal shimmer matching exact layout dimensions. No circular spinners.
146
+ * **Empty States:** Composed, illustrated compositions — not just "No data" text.
147
+
148
+ ## 5. Layout Principles
149
+ (Grid-first responsive architecture. Asymmetric splits for Hero sections.
150
+ Strict single-column collapse below 768px. Max-width containment.
151
+ No flexbox percentage math. Generous internal padding.)
152
+
153
+ ## 6. Motion & Interaction
154
+ (Spring physics for all interactive elements. Staggered cascade reveals.
155
+ Perpetual micro-loops on active dashboard components. Hardware-accelerated
156
+ transforms only. Isolated Client Components for CPU-heavy animations.)
157
+
158
+ ## 7. Anti-Patterns (Banned)
159
+ (Explicit list of forbidden patterns: no emojis, no Inter, no pure black,
160
+ no neon glows, no 3-column equal grids, no AI copywriting clichés,
161
+ no generic placeholder names, no broken image links.)
162
+ ```
163
+
164
+ ## Best Practices
165
+ - **Be Descriptive:** "Deep Charcoal Ink (#18181B)" — not just "dark text"
166
+ - **Be Functional:** Explain what each element is used for
167
+ - **Be Consistent:** Same terminology throughout the document
168
+ - **Be Precise:** Include exact hex codes, rem values, pixel values in parentheses
169
+ - **Be Opinionated:** This is not a neutral template — it enforces a specific, premium aesthetic
170
+
171
+ ## Tips for Success
172
+ 1. Start with the atmosphere — understand the vibe before detailing tokens
173
+ 2. Look for patterns — identify consistent spacing, sizing, and styling
174
+ 3. Think semantically — name colors by purpose, not just appearance
175
+ 4. Consider hierarchy — document how visual weight communicates importance
176
+ 5. Encode the bans — anti-patterns are as important as the rules themselves
177
+
178
+ ## Common Pitfalls to Avoid
179
+ - Using technical jargon without translation ("rounded-xl" instead of "generously rounded corners")
180
+ - Omitting hex codes or using only descriptive names
181
+ - Forgetting functional roles of design elements
182
+ - Being too vague in atmosphere descriptions
183
+ - Ignoring the anti-pattern list — these are what make the output premium
184
+ - Defaulting to generic "safe" designs instead of enforcing the curated aesthetic