vibe-ship-it 1.5.0 → 1.6.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 +9 -2
- package/bin/init.js +27 -12
- package/package.json +1 -1
- package/template/_cursor/rules/add-login.mdc +9 -0
- package/template/_cursor/rules/before-you-ship.mdc +9 -0
- package/template/_cursor/rules/build-page.mdc +9 -0
- package/template/_cursor/rules/design-system.mdc +9 -0
- package/template/_cursor/rules/generate-design-md.mdc +9 -0
- package/template/_cursor/rules/main.mdc +88 -0
- package/template/_cursor/rules/make-it-wow.mdc +9 -0
- package/template/_cursor/rules/noob-mode.mdc +9 -0
- package/template/_cursor/rules/platform-figma-plugin.mdc +9 -0
- package/template/_cursor/rules/platform-mobile-expo.mdc +9 -0
- package/template/_cursor/rules/platform-web-nextjs.mdc +9 -0
- package/template/_cursor/rules/quick-check.mdc +9 -0
- package/template/_cursor/rules/save-data.mdc +9 -0
- package/template/_cursor/rules/send-email.mdc +9 -0
- package/template/_cursor/rules/show-data.mdc +9 -0
- package/template/_cursor/rules/unstuck.mdc +9 -0
- package/template/_cursor/rules/upload-file.mdc +9 -0
- package/template/_cursor/rules/what-am-i-building.mdc +9 -0
- package/template/skills/generate-design-md/SKILL.md +223 -46
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
A set of AI agents and skills that help designers vibe-code their ideas to life, without learning programming.
|
|
8
8
|
|
|
9
|
-
Works with **VS Code Copilot**, **Claude Code**, and **OpenAI Codex**.
|
|
9
|
+
Works with **VS Code Copilot**, **Claude Code**, **Cursor**, and **OpenAI Codex**.
|
|
10
10
|
|
|
11
11
|
- Live site: https://vibe-ship-it.vercel.app
|
|
12
12
|
- GitHub: https://github.com/sso-ss/vibe-ship-it
|
|
@@ -56,7 +56,7 @@ Works with **VS Code Copilot**, **Claude Code**, and **OpenAI Codex**.
|
|
|
56
56
|
npx vibe-ship-it init
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
-
It'll ask which AI tool you use (VS Code Copilot, Claude Code, or OpenAI Codex) and install only what you need.
|
|
59
|
+
It'll ask which AI tool you use (VS Code Copilot, Claude Code, Cursor, or OpenAI Codex) and install only what you need.
|
|
60
60
|
|
|
61
61
|
To remove:
|
|
62
62
|
|
|
@@ -80,6 +80,7 @@ If you don't want skill files in your repo, add to `.gitignore`:
|
|
|
80
80
|
```
|
|
81
81
|
.github/agents/
|
|
82
82
|
.github/copilot-instructions.md
|
|
83
|
+
.cursor/rules/
|
|
83
84
|
skills/
|
|
84
85
|
.claude/
|
|
85
86
|
CLAUDE.md
|
|
@@ -135,6 +136,12 @@ AGENTS.md ← OpenAI Codex persona (installed via
|
|
|
135
136
|
save.md ← /save
|
|
136
137
|
explain.md ← /explain
|
|
137
138
|
|
|
139
|
+
.cursor/rules/ ← Cursor rules (auto-attached by description)
|
|
140
|
+
main.mdc ← Core persona (always active)
|
|
141
|
+
build-page.mdc ← Triggered by UI building requests
|
|
142
|
+
save-data.mdc ← Triggered by data persistence requests
|
|
143
|
+
... ← 17 rule files total
|
|
144
|
+
|
|
138
145
|
skills/
|
|
139
146
|
what-am-i-building/ ← Project setup + routing
|
|
140
147
|
noob-mode/ ← Plain English translation
|
package/bin/init.js
CHANGED
|
@@ -18,55 +18,69 @@ if (command === 'init') {
|
|
|
18
18
|
console.log(' 1. VS Code Copilot')
|
|
19
19
|
console.log(' 2. Claude Code')
|
|
20
20
|
console.log(' 3. OpenAI Codex')
|
|
21
|
-
console.log(' 4.
|
|
21
|
+
console.log(' 4. Cursor')
|
|
22
|
+
console.log(' 5. All of the above (installs everything)')
|
|
22
23
|
console.log('')
|
|
23
24
|
|
|
24
25
|
const readline = require('readline')
|
|
25
26
|
const rl = readline.createInterface({ input: process.stdin, output: process.stdout })
|
|
26
27
|
|
|
27
|
-
rl.question(' Pick a number (1-
|
|
28
|
+
rl.question(' Pick a number (1-5, default: 5): ', (answer) => {
|
|
28
29
|
rl.close()
|
|
29
|
-
const choice = (answer || '
|
|
30
|
+
const choice = (answer || '5').trim()
|
|
30
31
|
|
|
31
32
|
// Determine what to skip based on choice
|
|
32
33
|
const skipPaths = new Set()
|
|
33
34
|
if (choice === '1') {
|
|
34
|
-
// VS Code Copilot only — skip Claude and
|
|
35
|
+
// VS Code Copilot only — skip Claude, Codex, and Cursor files
|
|
35
36
|
skipPaths.add('CLAUDE.md')
|
|
36
37
|
skipPaths.add('AGENTS.md')
|
|
37
38
|
skipPaths.add('_claude')
|
|
39
|
+
skipPaths.add('_cursor')
|
|
38
40
|
} else if (choice === '2') {
|
|
39
|
-
// Claude Code only — skip Copilot and
|
|
41
|
+
// Claude Code only — skip Copilot, Codex, and Cursor files
|
|
40
42
|
skipPaths.add('AGENTS.md')
|
|
41
43
|
skipPaths.add('_github')
|
|
44
|
+
skipPaths.add('_cursor')
|
|
42
45
|
} else if (choice === '3') {
|
|
43
|
-
// OpenAI Codex only — skip Copilot and
|
|
46
|
+
// OpenAI Codex only — skip Copilot, Claude, and Cursor files
|
|
44
47
|
skipPaths.add('_github')
|
|
45
48
|
skipPaths.add('_claude')
|
|
49
|
+
skipPaths.add('_cursor')
|
|
46
50
|
skipPaths.add('CLAUDE.md')
|
|
51
|
+
} else if (choice === '4') {
|
|
52
|
+
// Cursor only — skip Copilot, Claude, and Codex files
|
|
53
|
+
skipPaths.add('_github')
|
|
54
|
+
skipPaths.add('_claude')
|
|
55
|
+
skipPaths.add('CLAUDE.md')
|
|
56
|
+
skipPaths.add('AGENTS.md')
|
|
47
57
|
}
|
|
48
|
-
// choice '
|
|
58
|
+
// choice '5' or anything else = install everything
|
|
49
59
|
|
|
50
60
|
const renameMap = {
|
|
51
61
|
'_github': '.github',
|
|
52
62
|
'_claude': '.claude',
|
|
63
|
+
'_cursor': '.cursor',
|
|
53
64
|
}
|
|
54
65
|
|
|
55
66
|
console.log('')
|
|
56
67
|
copyDir(templateDir, targetDir, renameMap, skipPaths)
|
|
57
68
|
|
|
58
|
-
const tools = { '1': 'VS Code Copilot', '2': 'Claude Code', '3': 'OpenAI Codex', '4': 'all tools' }
|
|
69
|
+
const tools = { '1': 'VS Code Copilot', '2': 'Claude Code', '3': 'OpenAI Codex', '4': 'Cursor', '5': 'all tools' }
|
|
59
70
|
const toolName = tools[choice] || 'all tools'
|
|
60
71
|
|
|
61
72
|
console.log('')
|
|
62
73
|
console.log(` ✅ Done! Installed for ${toolName}:`)
|
|
63
74
|
console.log('')
|
|
64
|
-
if (choice !== '1' && choice !== '3') {
|
|
75
|
+
if (choice !== '1' && choice !== '3' && choice !== '4') {
|
|
65
76
|
console.log(' 6 commands (/check, /ship, /wow, /stuck, /save, /explain)')
|
|
66
77
|
}
|
|
67
|
-
if (choice !== '2' && choice !== '3') {
|
|
78
|
+
if (choice !== '2' && choice !== '3' && choice !== '4') {
|
|
68
79
|
console.log(' 4 agents (assistant, checker, shipper, investigator)')
|
|
69
80
|
}
|
|
81
|
+
if (choice === '4' || choice === '5') {
|
|
82
|
+
console.log(' 17 rules (main + skill rules for Cursor auto-attach)')
|
|
83
|
+
}
|
|
70
84
|
console.log(' 13 skills (build-page, design-system, save-data, and more)')
|
|
71
85
|
console.log('')
|
|
72
86
|
console.log(' Just say what you want in plain English.')
|
|
@@ -77,6 +91,7 @@ if (command === 'init') {
|
|
|
77
91
|
const dirs = [
|
|
78
92
|
path.join(targetDir, '.github', 'agents'),
|
|
79
93
|
path.join(targetDir, '.claude', 'commands'),
|
|
94
|
+
path.join(targetDir, '.cursor', 'rules'),
|
|
80
95
|
path.join(targetDir, 'skills'),
|
|
81
96
|
]
|
|
82
97
|
const files = [
|
|
@@ -98,7 +113,7 @@ if (command === 'init') {
|
|
|
98
113
|
})
|
|
99
114
|
|
|
100
115
|
// Clean up empty parent dirs
|
|
101
|
-
;[path.join(targetDir, '.github'), path.join(targetDir, '.claude')].forEach(dir => {
|
|
116
|
+
;[path.join(targetDir, '.github'), path.join(targetDir, '.claude'), path.join(targetDir, '.cursor')].forEach(dir => {
|
|
102
117
|
if (fs.existsSync(dir) && fs.readdirSync(dir).length === 0) {
|
|
103
118
|
fs.rmdirSync(dir)
|
|
104
119
|
}
|
|
@@ -147,7 +162,7 @@ if (command === 'init') {
|
|
|
147
162
|
console.log(' npx vibe-ship-it init Install into current project')
|
|
148
163
|
console.log(' npx vibe-ship-it remove Remove from current project')
|
|
149
164
|
console.log('')
|
|
150
|
-
console.log(' Works with VS Code Copilot, Claude Code, and OpenAI Codex.')
|
|
165
|
+
console.log(' Works with VS Code Copilot, Claude Code, Cursor, and OpenAI Codex.')
|
|
151
166
|
console.log('')
|
|
152
167
|
}
|
|
153
168
|
|
package/package.json
CHANGED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Adds user authentication. Triggers: login, sign in, sign up, register, auth, only I can see, protect this page, private page, admin area, user accounts, members only, password protect.
|
|
3
|
+
globs:
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Add Login
|
|
8
|
+
|
|
9
|
+
Read and follow the full instructions in `skills/add-login/SKILL.md`.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Full pre-deploy checklist. Runs automatically before deployment. Triggers: full check, check everything, production ready, is this ready to deploy, pre-deploy, ship check, ship it, put it online, deploy, go live.
|
|
3
|
+
globs:
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Before You Ship
|
|
8
|
+
|
|
9
|
+
Read and follow the full instructions in `skills/before-you-ship/SKILL.md`.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Builds UI from descriptions, screenshots, or Figma designs. Triggers: build a page, create a page, make a page, build the UI, make it look like, design this page, add a page, landing page, about page, contact page, hero section, add a section, header, footer, navigation, form, card, modal, build this.
|
|
3
|
+
globs:
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Build Page
|
|
8
|
+
|
|
9
|
+
Read and follow the full instructions in `skills/build-page/SKILL.md`.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Makes styles consistent. Extracts current look into reusable tokens and components. Triggers: design system, set up tokens, make styles consistent, standardize styles, set up a design system.
|
|
3
|
+
globs:
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Design System
|
|
8
|
+
|
|
9
|
+
Read and follow the full instructions in `skills/design-system/SKILL.md`.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Generates a DESIGN.md from any website URL. Captures colors, typography, spacing, components, and visual atmosphere. Triggers: generate design md, capture the design, grab the design from, make it look like this site, design md.
|
|
3
|
+
globs:
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Generate Design MD
|
|
8
|
+
|
|
9
|
+
Read and follow the full instructions in `skills/generate-design-md/SKILL.md`.
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
description:
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Designer Vibe Coding Assistant
|
|
7
|
+
|
|
8
|
+
You help an excited designer build their idea. They are not a programmer. They think visually, work by feel, and want to see results immediately.
|
|
9
|
+
|
|
10
|
+
## Core Rules
|
|
11
|
+
|
|
12
|
+
0. **Stay consistent with past decisions.** Before starting any work, silently check if `PROJECT.md` exists in the project root. If it does, read it. Use it to stay consistent with the stack, naming, routes, and architecture already chosen. After making any architecture decision (new page, database table, auth setup, external service), update `PROJECT.md`. Also check if `DESIGN.md` exists. If it does, read it and use its tokens (colors, type, spacing, radii, shadows, motion) for every UI decision. Never invent new values when DESIGN.md defines them.
|
|
13
|
+
|
|
14
|
+
1. **Show the result first, explain the code second.** Always preview in the browser. If you changed something visual, say what it looks like now — not what CSS property you changed.
|
|
15
|
+
|
|
16
|
+
2. **Speed is everything.** Never block progress with questions. If you can make a reasonable assumption, make it. If you're wrong, the designer will tell you.
|
|
17
|
+
|
|
18
|
+
3. **Explain only when asked or when something breaks.** Don't teach unprompted. When you do explain, use 1–2 sentences max. Use analogies to physical things.
|
|
19
|
+
|
|
20
|
+
4. **When they're stuck, fix it first, explain after.** Detect frustration (short messages, repeated errors, "this doesn't work"). Fix silently. Show working result. Then briefly say what was wrong.
|
|
21
|
+
|
|
22
|
+
5. **Make things look impressive by default.** Never generate ugly starter code. Use good typography, spacing, and color from the start. When in doubt, make it look like a real product, not a tutorial.
|
|
23
|
+
|
|
24
|
+
6. **Never introduce complexity unless asked.** No folder restructuring, no design patterns, no state management libraries, no "you should really use X instead." Keep it simple until simple breaks.
|
|
25
|
+
|
|
26
|
+
7. **Never enforce build order.** If they want to build page 3 before page 1, let them. If they want login after building 5 pages, accommodate without refactoring lectures.
|
|
27
|
+
|
|
28
|
+
8. **No emoji or dashes in generated copy.** Never use emoji, em dash, or double dash (--) in any user-facing text, UI copy, headings, or content you generate. Use colons, commas, periods, or parentheses instead. The only exception is if the designer explicitly asks for emoji.
|
|
29
|
+
|
|
30
|
+
## Language Rules
|
|
31
|
+
|
|
32
|
+
- Database table = "spreadsheet"
|
|
33
|
+
- Row = "entry" or "line"
|
|
34
|
+
- Column/field = "column" (designers know spreadsheets)
|
|
35
|
+
- Git branch = "a copy to try changes on without touching the original"
|
|
36
|
+
- Git commit = "saving a snapshot with a note"
|
|
37
|
+
- API = "a way for your app to talk to a service"
|
|
38
|
+
- Server action = "code that runs when someone submits a form"
|
|
39
|
+
- Environment variable = "a secret setting stored on the server, not in your code"
|
|
40
|
+
- Deploy = "put it online so anyone with the link can see it"
|
|
41
|
+
- Component = "a reusable piece of your page"
|
|
42
|
+
- Route = "a page at a specific URL"
|
|
43
|
+
|
|
44
|
+
## Default Stack (Web)
|
|
45
|
+
|
|
46
|
+
When building a website or web app, default to:
|
|
47
|
+
- **Framework:** Next.js (App Router)
|
|
48
|
+
- **Styling:** Tailwind CSS
|
|
49
|
+
- **Database + Auth + Storage:** Supabase
|
|
50
|
+
- **Email:** Resend
|
|
51
|
+
- **Deploy:** Vercel
|
|
52
|
+
|
|
53
|
+
Don't mention these names unless the designer asks. Just use them.
|
|
54
|
+
|
|
55
|
+
## Behavior Modes
|
|
56
|
+
|
|
57
|
+
### Building (default)
|
|
58
|
+
Handle UI construction and backend connections. Build ↔ connect loop without interruption. This is where the designer spends 80% of their time.
|
|
59
|
+
|
|
60
|
+
### Checking (when user says "check it" / "is this ready")
|
|
61
|
+
Switch to review mode. Do NOT edit files during checking. Run quick-check or before-you-ship skill. Report findings clearly, then switch back to building mode to fix anything.
|
|
62
|
+
|
|
63
|
+
### Shipping (when user says "ship it" / "put it online")
|
|
64
|
+
Run before-you-ship checklist first — this is non-negotiable even if the designer says "just ship it." Show what will go live. Ask for explicit confirmation. Deploy. Provide URL and undo instructions.
|
|
65
|
+
|
|
66
|
+
## Skills
|
|
67
|
+
|
|
68
|
+
When a task matches one of the skills below, read the full SKILL.md file from `skills/` and follow those instructions.
|
|
69
|
+
|
|
70
|
+
| They say | Skill to read |
|
|
71
|
+
|---|---|
|
|
72
|
+
| "Save it" / "store it" / "remember it" | `skills/save-data/SKILL.md` |
|
|
73
|
+
| "Login" / "sign in" / "only I can see" | `skills/add-login/SKILL.md` |
|
|
74
|
+
| "Send email" / "notify me" | `skills/send-email/SKILL.md` |
|
|
75
|
+
| "Upload" / "add a photo" | `skills/upload-file/SKILL.md` |
|
|
76
|
+
| "Show me all the..." / "dashboard" | `skills/show-data/SKILL.md` |
|
|
77
|
+
| "Make it look better" / "it looks boring" | `skills/make-it-wow/SKILL.md` |
|
|
78
|
+
| "Set up a design system" / "set up tokens" | `skills/design-system/SKILL.md` |
|
|
79
|
+
| "Make it look like [url]" / "grab the design" | `skills/generate-design-md/SKILL.md` |
|
|
80
|
+
| "Ship it" / "put it online" | `skills/before-you-ship/SKILL.md` |
|
|
81
|
+
| "Check it" / "is this ready?" | `skills/quick-check/SKILL.md` |
|
|
82
|
+
| "This doesn't work" / "ugh" / "stuck" | `skills/unstuck/SKILL.md` |
|
|
83
|
+
| "Build a page" / "landing page" / "form" | `skills/build-page/SKILL.md` |
|
|
84
|
+
| "What does that mean?" / "I don't understand" | `skills/noob-mode/SKILL.md` |
|
|
85
|
+
| "I want to build..." / "new project" | `skills/what-am-i-building/SKILL.md` |
|
|
86
|
+
| "Make an app" / "iPhone" / "Android" | `skills/platforms/mobile-expo/SKILL.md` |
|
|
87
|
+
| "Figma plugin" / "extend Figma" | `skills/platforms/figma-plugin/SKILL.md` |
|
|
88
|
+
| Building a web project | `skills/platforms/web-nextjs/SKILL.md` |
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Instant visual polish. Makes site look premium with animations, better typography, modern effects. Triggers: make it look better, polish, make it premium, it looks boring, make it pop, spice it up, wow, make it beautiful.
|
|
3
|
+
globs:
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Make It Wow
|
|
8
|
+
|
|
9
|
+
Read and follow the full instructions in `skills/make-it-wow/SKILL.md`.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Plain-English translation layer. Explains technical things simply. Triggers: what does that mean, I don't understand, confused, explain everything, noob mode, what is that, explain like I'm five.
|
|
3
|
+
globs:
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Noob Mode
|
|
8
|
+
|
|
9
|
+
Read and follow the full instructions in `skills/noob-mode/SKILL.md`.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Figma Plugin API and TypeScript conventions for Figma plugin development. Auto-applied when working on Figma plugin files.
|
|
3
|
+
globs: ["manifest.json", "src/plugin/**", "src/ui/**"]
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Figma Plugin Platform
|
|
8
|
+
|
|
9
|
+
Read and follow the full instructions in `skills/platforms/figma-plugin/SKILL.md`.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: React Native, Expo, Supabase, and EAS conventions for mobile app projects. Auto-applied when working on mobile app files.
|
|
3
|
+
globs: ["app/**/*.native.*", "expo/**", "app.json"]
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Mobile (Expo) Platform
|
|
8
|
+
|
|
9
|
+
Read and follow the full instructions in `skills/platforms/mobile-expo/SKILL.md`.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Next.js App Router, Tailwind CSS, Supabase, and Vercel conventions for web projects. Auto-applied when working on web project files.
|
|
3
|
+
globs: ["app/**", "pages/**", "components/**", "next.config.*"]
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Web (Next.js) Platform
|
|
8
|
+
|
|
9
|
+
Read and follow the full instructions in `skills/platforms/web-nextjs/SKILL.md`.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Fast 4-item quality check. Triggers: check it, is this ready, does it look ok, quick check, any issues, look for problems, is it broken, test it.
|
|
3
|
+
globs:
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Quick Check
|
|
8
|
+
|
|
9
|
+
Read and follow the full instructions in `skills/quick-check/SKILL.md`.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Saves form data to a database. Triggers: save, store, persist, remember, keep the data, save to database, save the form, store submissions, save what they type, save entries, record, track.
|
|
3
|
+
globs:
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Save Data
|
|
8
|
+
|
|
9
|
+
Read and follow the full instructions in `skills/save-data/SKILL.md`.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Sends emails from your app. Triggers: send email, email notification, notify me, confirmation email, alert me, welcome email, email when someone, receipt email.
|
|
3
|
+
globs:
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Send Email
|
|
8
|
+
|
|
9
|
+
Read and follow the full instructions in `skills/send-email/SKILL.md`.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Displays saved data as lists, tables, cards, or dashboards. Triggers: show me all the, list all, dashboard, display, table of, view submissions, show entries, show data.
|
|
3
|
+
globs:
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Show Data
|
|
8
|
+
|
|
9
|
+
Read and follow the full instructions in `skills/show-data/SKILL.md`.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Detects frustration and fixes problems fast. Triggers: stuck, this doesn't work, broken, help, ugh, what the hell, why, not working, it broke, error, can't figure out, I give up, frustrated, nothing happens, blank page, won't load, keeps crashing.
|
|
3
|
+
globs:
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Unstuck
|
|
8
|
+
|
|
9
|
+
Read and follow the full instructions in `skills/unstuck/SKILL.md`.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Handles file and image uploads. Triggers: upload, add a photo, file upload, image upload, drag and drop, profile picture, attach file, add images.
|
|
3
|
+
globs:
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Upload File
|
|
8
|
+
|
|
9
|
+
Read and follow the full instructions in `skills/upload-file/SKILL.md`.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Figures out what you're building and sets up the project. Triggers: I want to build, new project, I have an idea, I need a website, I need an app, start a project, what should I build.
|
|
3
|
+
globs:
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# What Am I Building
|
|
8
|
+
|
|
9
|
+
Read and follow the full instructions in `skills/what-am-i-building/SKILL.md`.
|
|
@@ -15,7 +15,7 @@ Takes a website URL and produces a complete DESIGN.md file -- a plain-text desig
|
|
|
15
15
|
4. Analyze the visual atmosphere and design philosophy
|
|
16
16
|
5. Detect the page structure (sections, grids, layout patterns)
|
|
17
17
|
6. Generate three files:
|
|
18
|
-
- `DESIGN.md` -- the complete design system (
|
|
18
|
+
- `DESIGN.md` -- the complete design system (9 sections)
|
|
19
19
|
- Tailwind config extension -- tokens mapped to utility classes
|
|
20
20
|
- CSS variables -- tokens as custom properties in globals.css
|
|
21
21
|
7. Drop them in the project
|
|
@@ -72,12 +72,56 @@ Pull these from ALL collected sources (external CSS + inline styles + style bloc
|
|
|
72
72
|
| Fonts | `font-family`, `@font-face`, Google Fonts URL params (`?family=Inter:wght@300;400;700`), Typekit kit IDs |
|
|
73
73
|
| Type scale | `font-size`, `font-weight`, `line-height`, `letter-spacing` -- collect ALL unique values and sort |
|
|
74
74
|
| Spacing | `padding`, `margin`, `gap` -- collect unique values, find the base unit (most common divisor) |
|
|
75
|
-
| Radii | `border-radius` -- collect
|
|
75
|
+
| Radii | `border-radius` -- collect per-component (see Radius Precision below) |
|
|
76
76
|
| Shadows | `box-shadow` -- capture full declarations including multi-layer stacks |
|
|
77
77
|
| Borders | `border` shorthand and individual properties |
|
|
78
78
|
| Transitions | `transition`, `animation`, `@keyframes` declarations |
|
|
79
79
|
| Breakpoints | `@media` queries -- extract all width breakpoints |
|
|
80
80
|
|
|
81
|
+
#### Radius Precision
|
|
82
|
+
|
|
83
|
+
Border-radius is the token most often wrong because CSS text alone is ambiguous: variable references (`var(--radius)`), utility classes (`rounded-xl`), and shorthand (`8px 8px 0 0`) all hide the actual computed value. Use these techniques in order of reliability:
|
|
84
|
+
|
|
85
|
+
**1. Resolve CSS variables.** If you see `border-radius: var(--radius-md)`, find the variable definition in `:root` or the CSS variable block and substitute the literal value. Chain through aliases: `--radius-md: var(--radius-base)` means you need `--radius-base` too.
|
|
86
|
+
|
|
87
|
+
**2. Map utility classes.** If the HTML uses Tailwind or a utility-first framework, map class names to known values:
|
|
88
|
+
| Class | Value |
|
|
89
|
+
|-------|-------|
|
|
90
|
+
| `rounded-none` | 0px |
|
|
91
|
+
| `rounded-sm` | 2px (0.125rem) |
|
|
92
|
+
| `rounded` | 4px (0.25rem) |
|
|
93
|
+
| `rounded-md` | 6px (0.375rem) |
|
|
94
|
+
| `rounded-lg` | 8px (0.5rem) |
|
|
95
|
+
| `rounded-xl` | 12px (0.75rem) |
|
|
96
|
+
| `rounded-2xl` | 16px (1rem) |
|
|
97
|
+
| `rounded-3xl` | 24px (1.5rem) |
|
|
98
|
+
| `rounded-full` | 9999px |
|
|
99
|
+
|
|
100
|
+
If the site uses a custom Tailwind config the values may differ. Check CSS custom properties for overrides like `--radius: 0.625rem` (Shadcn/ui pattern).
|
|
101
|
+
|
|
102
|
+
**3. Group by component.** Different components use different radii. Always record WHICH component a radius belongs to:
|
|
103
|
+
- Buttons: typically `radius-sm` or `radius-md`
|
|
104
|
+
- Cards / panels: typically `radius-md` or `radius-lg`
|
|
105
|
+
- Inputs: typically matches button radius
|
|
106
|
+
- Modals / sheets: typically `radius-lg` or `radius-xl`
|
|
107
|
+
- Badges / pills: often `radius-full` (9999px)
|
|
108
|
+
- Avatars: `radius-full` for circles, `radius-md` for rounded squares
|
|
109
|
+
- Dropdowns / menus: typically `radius-md`
|
|
110
|
+
- Tooltips: typically `radius-sm`
|
|
111
|
+
|
|
112
|
+
When two components use the same numeric value, that's an intentional design system choice. Note it. When they differ by component, that IS the radius scale.
|
|
113
|
+
|
|
114
|
+
**4. DevTools precision pass (optional).** If the fetched CSS is heavily variable-based, JS-rendered, or the radius values look ambiguous, ask the designer to run the DevTools extractor script in their browser:
|
|
115
|
+
1. Open the target site in Chrome/Safari/Firefox
|
|
116
|
+
2. Open DevTools console (right-click > Inspect > Console)
|
|
117
|
+
3. Paste the extractor script (available at the project's `public/extract.js`)
|
|
118
|
+
4. The script reads `getComputedStyle()` on every visible element and groups radii by component type (button, card, input, modal, badge, etc.)
|
|
119
|
+
5. Result is copied to clipboard as JSON
|
|
120
|
+
|
|
121
|
+
The `radiusByComponent` object in the script output gives the exact computed radius for each component type, with occurrence counts. This is ground truth, since it reads the browser's final rendered values after all CSS variable resolution, utility class application, and specificity battles.
|
|
122
|
+
|
|
123
|
+
When the designer pastes this JSON, use `radiusByComponent` as the authoritative source for the Border Radius table in DESIGN.md. It overrides any values inferred from CSS text.
|
|
124
|
+
|
|
81
125
|
### Step 3: Verify, don't guess
|
|
82
126
|
|
|
83
127
|
**Extracted** = you found the exact value in HTML, CSS, or inline styles. Mark these with confidence.
|
|
@@ -103,7 +147,64 @@ From the raw tokens, identify:
|
|
|
103
147
|
- **Spacing rhythm**: Is it 4px-based? 8px-based? What's the scale?
|
|
104
148
|
- **Component signatures**: How do buttons look? Cards? Inputs? Navigation?
|
|
105
149
|
- **Shadow philosophy**: Flat? Subtle elevation? Heavy depth? Shadow-as-border?
|
|
106
|
-
- **Shape language**:
|
|
150
|
+
- **Shape language**: Map each component type to its specific radius. Are buttons and inputs the same? Are cards larger? Any use of asymmetric radii (e.g. `8px 8px 0 0`)? Does the radius scale follow a pattern (e.g. 4/8/12/16)?
|
|
151
|
+
|
|
152
|
+
#### Font Classification
|
|
153
|
+
|
|
154
|
+
Separate extracted fonts into three buckets:
|
|
155
|
+
- **Body font**: the font used on most text. Look for names containing "Text", "Body", or "Sans" (without "Display").
|
|
156
|
+
- **Heading font**: used for titles. Look for names containing "Display", "Headline", "Title".
|
|
157
|
+
- **Mono font**: for code/data. Names containing "Mono", "Code", "Consol", "Courier".
|
|
158
|
+
|
|
159
|
+
**Filter out icon fonts** before assigning roles. Skip any font with "Awesome", "Material", "Icon", "Symbol", "Glyph", "Icomoon", "Feather", "Ionicons", "Remixicon", "Lucide", or "Bootstrap Icon" in the name. These are icon fonts, not text fonts.
|
|
160
|
+
|
|
161
|
+
If the site uses only one text font for everything, note it as both body and heading. If there are two distinct non-icon fonts, the more common one is body, the other is heading.
|
|
162
|
+
|
|
163
|
+
#### Accent Color Detection
|
|
164
|
+
|
|
165
|
+
The accent color must be intentional, not a stray focus ring or outline:
|
|
166
|
+
- **Saturation > 40%** required. Low-saturation colors are grays, not brand colors.
|
|
167
|
+
- **Source must be text or background**, not border. Border colors often inherit browser defaults (blue focus rings, outline colors).
|
|
168
|
+
- **Monochrome sites** (Uber, Nike) have no accent. The primary button is dark/black, not colored. Don't force an accent when there isn't one.
|
|
169
|
+
- **Check CSS variables**: `--accent`, `--brand`, `--color-primary`, `--color-button-primary` often hold the brand color.
|
|
170
|
+
|
|
171
|
+
#### Button Detection
|
|
172
|
+
|
|
173
|
+
Sites use different button styles. Detect in this priority:
|
|
174
|
+
1. **Chromatic buttons**: colored background (saturation > 40%). This is the accent/CTA.
|
|
175
|
+
2. **Dark/black buttons**: common on monochrome sites (Nike, Puma, Uber, Vercel). Brightness < 60.
|
|
176
|
+
3. **Any visible button**: non-transparent, non-white background.
|
|
177
|
+
|
|
178
|
+
**Skip utility buttons** when looking for the primary CTA: "Skip to content", "Search", "Close", "Menu", "My account", "next/prev".
|
|
179
|
+
|
|
180
|
+
#### Card Style Detection
|
|
181
|
+
|
|
182
|
+
Cards come in distinct patterns. Detect which one the site uses:
|
|
183
|
+
- **Shadow cards**: no border, `box-shadow` at rest. Common on SaaS sites (Stripe, Linear).
|
|
184
|
+
- **Bordered cards**: `border` visible, no shadow at rest. Shadow appears on hover. Common on e-commerce (Airbnb).
|
|
185
|
+
- **No-container cards**: just a rounded image with text below, no wrapping element. No border, no shadow, no background. Common on media/marketplace sites (Airbnb listings, Mobbin).
|
|
186
|
+
- **Inset cards**: `box-shadow: inset` as border technique (Vercel).
|
|
187
|
+
|
|
188
|
+
Card radius cap: anything over 32px is likely a search bar or hero element, not a card. Default to 12px.
|
|
189
|
+
|
|
190
|
+
#### Dropdown Detection
|
|
191
|
+
|
|
192
|
+
Nav dropdown menus are the best source for dropdown styling because every site has one and they're styled consistently. Detection priority:
|
|
193
|
+
1. **Nav menu panels**: look for `[role="menu"]`, `[role="listbox"]`, or class patterns (`dropdown`, `menu-panel`, `submenu`, `popover`, `flyout`, `mega-menu`) inside `<nav>` or `<header>`.
|
|
194
|
+
2. **Hidden panels**: most dropdowns are `display:none` until hover. Their styles are still readable via `getComputedStyle()`.
|
|
195
|
+
3. **Page-wide fallback**: search the whole page for the same selectors.
|
|
196
|
+
|
|
197
|
+
Dropdown radius cap: max 24px. Dropdowns are tight UI, never pill-shaped.
|
|
198
|
+
|
|
199
|
+
#### Pill Detection
|
|
200
|
+
|
|
201
|
+
Only values >= 999px count as pills, NOT percentage values like `50%` or `100%`. The value `50%` creates circles (avatars, icons), not pills. The value `border-radius: 9999px` or `border-radius: 1600px` creates pills.
|
|
202
|
+
|
|
203
|
+
When a site uses pills AND no explicit button radius is detected, assume buttons are pills too.
|
|
204
|
+
|
|
205
|
+
#### Bot Protection
|
|
206
|
+
|
|
207
|
+
If the headless browser lands on a challenge page instead of the real site, detect it by checking the page title or first heading for phrases like: "just a moment", "checking your browser", "security check", "access denied", "attention required", "what happened", "please verify", "captcha". Return a clear error telling the user to use the DevTools paste method instead.
|
|
107
208
|
|
|
108
209
|
### Step 5: Interpret the Atmosphere
|
|
109
210
|
|
|
@@ -118,7 +219,7 @@ Write this as a short, opinionated paragraph -- not a list of CSS values.
|
|
|
118
219
|
|
|
119
220
|
## Output Format
|
|
120
221
|
|
|
121
|
-
The DESIGN.md follows
|
|
222
|
+
The DESIGN.md follows a 9-section structure optimized for AI agents. Every section earns its place -- no redundancy, no prose padding.
|
|
122
223
|
|
|
123
224
|
```markdown
|
|
124
225
|
# DESIGN.md -- [Site Name]
|
|
@@ -199,12 +300,14 @@ priority-rule: external-css > style-blocks > inline-style > known
|
|
|
199
300
|
- Section gap: [value]
|
|
200
301
|
|
|
201
302
|
### Border Radius
|
|
202
|
-
| Token | Value | Used on |
|
|
203
|
-
|
|
204
|
-
| `radius-sm` | [px] | [inputs, inline code] |
|
|
205
|
-
| `radius-md` | [px] | [buttons, cards] |
|
|
206
|
-
| `radius-lg` | [px] | [modals, hero cards] |
|
|
207
|
-
| `radius-full` | [px/9999px] | [badges, pills, avatars] |
|
|
303
|
+
| Token | Value | Used on | Source |
|
|
304
|
+
|-------|-------|---------|--------|
|
|
305
|
+
| `radius-sm` | [px] | [inputs, inline code, tooltips] | [extracted/variable-resolved/class-mapped/devtools] |
|
|
306
|
+
| `radius-md` | [px] | [buttons, cards, dropdowns] | |
|
|
307
|
+
| `radius-lg` | [px] | [modals, hero cards, large panels] | |
|
|
308
|
+
| `radius-full` | [px/9999px] | [badges, pills, avatars] | |
|
|
309
|
+
|
|
310
|
+
[Map every component to its radius token. If buttons use `radius-md` and cards also use `radius-md`, say so. If they differ, that IS the scale]
|
|
208
311
|
|
|
209
312
|
## 5. Depth & Motion
|
|
210
313
|
|
|
@@ -226,7 +329,53 @@ priority-rule: external-css > style-blocks > inline-style > known
|
|
|
226
329
|
| `easing` | [curve] | Default easing function |
|
|
227
330
|
[Note any distinctive motion patterns: staggered entrance, parallax, spring physics, scroll-triggered]
|
|
228
331
|
|
|
229
|
-
## 6.
|
|
332
|
+
## 6. Page Structure
|
|
333
|
+
|
|
334
|
+
### Header
|
|
335
|
+
```
|
|
336
|
+
[ element placement diagram ]
|
|
337
|
+
height: [value] | position: [sticky/fixed/absolute/static] | bg: [value] | [backdrop-blur if present]
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
### Page Flow
|
|
341
|
+
|
|
342
|
+
The page has [N] sections in this order:
|
|
343
|
+
|
|
344
|
+
**1. [Section Name]** [note if section has a tinted/dark background]
|
|
345
|
+
- Heading: [word count, size from type scale, alignment]
|
|
346
|
+
- Subheading/label: [position relative to heading (above/below), style (uppercase, small, etc.)]
|
|
347
|
+
- Body: [sentence count, approximate word count, alignment]
|
|
348
|
+
- CTA: [button count, button labels pattern, style variants used]
|
|
349
|
+
- Media: [image/video/illustration placement relative to text]
|
|
350
|
+
- Layout: [stacked/split/grid], [alignment], max-width: [value if constrained]
|
|
351
|
+
- Card pattern: [describe what's inside vs outside the card -- e.g. "image inside, text below"]
|
|
352
|
+
- Item count: [how many cards/items in this section]
|
|
353
|
+
|
|
354
|
+
**2. [Section Name]**
|
|
355
|
+
[Same structure. Include every section on the page.]
|
|
356
|
+
|
|
357
|
+
[Continue for ALL sections...]
|
|
358
|
+
|
|
359
|
+
### Footer
|
|
360
|
+
```
|
|
361
|
+
[bg color/style]
|
|
362
|
+
[ element placement diagram ]
|
|
363
|
+
[column count, link count, content summary]
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
### Layout Patterns
|
|
367
|
+
- Content alignment: [centered / left-aligned / mixed -- note which sections differ]
|
|
368
|
+
- Content max-width: [value for text-heavy sections like hero, CTA]
|
|
369
|
+
- Grid columns: [list each grid and its column count, e.g. "features: 3-col, pricing: 3-col, testimonials: 2-col"]
|
|
370
|
+
- Grid responsive behavior: [what column count becomes on mobile]
|
|
371
|
+
- Card gaps: [value]
|
|
372
|
+
- Section vertical padding: [value or range]
|
|
373
|
+
- Section backgrounds: [which sections break from the default bg, and what they use]
|
|
374
|
+
- Heading hierarchy: [which type scale role each section heading uses -- e.g. "all section headings use H1 (56px) except component preview which uses H2 (32px)"]
|
|
375
|
+
|
|
376
|
+
[Detect from DOM tree -- semantic elements (`<nav>`, `<header>`, `<section>`, `<footer>`), grid/flex containers, column counts, heading hierarchy, `text-align`, `max-width` on content wrappers.]
|
|
377
|
+
|
|
378
|
+
## 7. Components
|
|
230
379
|
|
|
231
380
|
### Buttons
|
|
232
381
|
| Property | Primary | Secondary | Ghost |
|
|
@@ -243,36 +392,89 @@ priority-rule: external-css > style-blocks > inline-style > known
|
|
|
243
392
|
| Hover | [specific CSS changes] | [specific CSS changes] |
|
|
244
393
|
| Focus | [focus ring value] | [focus ring value] |
|
|
245
394
|
|
|
246
|
-
###
|
|
395
|
+
### Inputs
|
|
396
|
+
| Property | Value |
|
|
397
|
+
|----------|-------|
|
|
398
|
+
| border | `[val]` |
|
|
399
|
+
| radius | `[val]` |
|
|
400
|
+
| padding | `[val]` |
|
|
401
|
+
| focus | `[val]` |
|
|
402
|
+
| error | [styling] |
|
|
403
|
+
| label | [placement and style] |
|
|
404
|
+
|
|
405
|
+
### Dropdowns
|
|
247
406
|
| Property | Value |
|
|
248
407
|
|----------|-------|
|
|
249
408
|
| background | `[val]` |
|
|
250
409
|
| border | `[val]` |
|
|
251
410
|
| radius | `[val]` |
|
|
252
411
|
| shadow | `[val]` |
|
|
253
|
-
|
|
|
254
|
-
|
|
|
412
|
+
| max-height | `[val]` |
|
|
413
|
+
| item-padding | `[val]` |
|
|
414
|
+
| item-hover | `[val]` |
|
|
415
|
+
| item-radius | `[val]` |
|
|
416
|
+
| separator | `[val]` |
|
|
417
|
+
| animation | [enter/exit behavior] |
|
|
255
418
|
|
|
256
|
-
###
|
|
419
|
+
### Cards
|
|
257
420
|
| Property | Value |
|
|
258
421
|
|----------|-------|
|
|
422
|
+
| background | `[val]` |
|
|
259
423
|
| border | `[val]` |
|
|
260
424
|
| radius | `[val]` |
|
|
425
|
+
| shadow | `[val]` |
|
|
261
426
|
| padding | `[val]` |
|
|
262
|
-
|
|
|
263
|
-
| error | [styling] |
|
|
264
|
-
| label | [placement and style] |
|
|
427
|
+
| hover | [behavior] |
|
|
265
428
|
|
|
266
429
|
### Navigation
|
|
267
430
|
[Structure, font treatment, active indicator, sticky behavior]
|
|
268
431
|
|
|
432
|
+
### Links
|
|
433
|
+
| Property | Value |
|
|
434
|
+
|----------|-------|
|
|
435
|
+
| color | `[val]` |
|
|
436
|
+
| underline | [always / hover-only / none] |
|
|
437
|
+
| hover | [color change, underline, opacity] |
|
|
438
|
+
| visited | `[val]` (omit if same as default) |
|
|
439
|
+
|
|
440
|
+
### Badges / Tags
|
|
441
|
+
| Property | Value |
|
|
442
|
+
|----------|-------|
|
|
443
|
+
| background | `[val]` |
|
|
444
|
+
| color | `[val]` |
|
|
445
|
+
| padding | `[val]` |
|
|
446
|
+
| radius | `[val]` |
|
|
447
|
+
| font-size | `[val]` |
|
|
448
|
+
| font-weight | `[val]` |
|
|
449
|
+
| variants | [list color variants if present: success, warning, danger, neutral] |
|
|
450
|
+
|
|
451
|
+
### Tabs
|
|
452
|
+
| Property | Value |
|
|
453
|
+
|----------|-------|
|
|
454
|
+
| active-indicator | [underline / background / border -- describe style] |
|
|
455
|
+
| active-color | `[val]` |
|
|
456
|
+
| inactive-color | `[val]` |
|
|
457
|
+
| padding | `[val]` |
|
|
458
|
+
| gap | `[val]` |
|
|
459
|
+
|
|
460
|
+
### Modals / Dialogs
|
|
461
|
+
| Property | Value |
|
|
462
|
+
|----------|-------|
|
|
463
|
+
| backdrop | `[val]` (e.g. rgba overlay, blur) |
|
|
464
|
+
| background | `[val]` |
|
|
465
|
+
| radius | `[val]` |
|
|
466
|
+
| shadow | `[val]` |
|
|
467
|
+
| padding | `[val]` |
|
|
468
|
+
| max-width | `[val]` |
|
|
469
|
+
| animation | [enter/exit behavior] |
|
|
470
|
+
|
|
269
471
|
### Icons (if identifiable)
|
|
270
472
|
[Style: line/filled/duo-tone, stroke weight, size grid, corner style]
|
|
271
473
|
|
|
272
474
|
### Signature Patterns
|
|
273
475
|
[1-3 components unique to this site. The things someone would point at and say "that looks like [site name]." e.g. Vercel's workflow pipeline, Stripe's gradient cards, Linear's command palette.]
|
|
274
476
|
|
|
275
|
-
##
|
|
477
|
+
## 8. States
|
|
276
478
|
|
|
277
479
|
| State | Treatment |
|
|
278
480
|
|-------|-----------|
|
|
@@ -284,7 +486,7 @@ priority-rule: external-css > style-blocks > inline-style > known
|
|
|
284
486
|
| Empty | [How empty states are styled -- illustration, muted text, CTA] |
|
|
285
487
|
| Error | [Color, border, icon, message placement] |
|
|
286
488
|
|
|
287
|
-
##
|
|
489
|
+
## 9. Rules
|
|
288
490
|
|
|
289
491
|
### Do
|
|
290
492
|
- [6-8 specific, actionable rules WITH values]
|
|
@@ -410,31 +612,6 @@ Add to `globals.css` (or the project's main CSS file):
|
|
|
410
612
|
|
|
411
613
|
If the file already has `:root` variables, merge without overwriting.
|
|
412
614
|
|
|
413
|
-
### 3. Page Structure (if detectable)
|
|
414
|
-
|
|
415
|
-
Analyze the reference site's HTML structure and add a `## Page Structure` section at the end of DESIGN.md:
|
|
416
|
-
|
|
417
|
-
```markdown
|
|
418
|
-
## Page Structure
|
|
419
|
-
|
|
420
|
-
Detected layout pattern from [site]:
|
|
421
|
-
|
|
422
|
-
1. **Nav:** Sticky header, logo left, links center, CTA right
|
|
423
|
-
2. **Hero:** Full-width, large heading centered, subtitle below, 2 buttons
|
|
424
|
-
3. **Metrics:** 4-column stat grid with large numbers
|
|
425
|
-
4. **Features:** 3-column card grid, icon + title + description per card
|
|
426
|
-
5. **Testimonials:** 2-column quote cards with avatar + company
|
|
427
|
-
6. **CTA:** Centered heading + button, full-width section
|
|
428
|
-
7. **Footer:** Logo, link columns, copyright
|
|
429
|
-
|
|
430
|
-
Grid patterns:
|
|
431
|
-
- Feature grids: 3 columns on desktop, 1 on mobile
|
|
432
|
-
- Card gaps: 16-24px
|
|
433
|
-
- Section padding: 80-96px vertical
|
|
434
|
-
```
|
|
435
|
-
|
|
436
|
-
Detect this from the DOM tree -- look at semantic elements (`<nav>`, `<header>`, `<section>`, `<footer>`), grid/flex containers, column counts, and heading hierarchy. This gives the build-page skill a blueprint when the designer says "build me a landing page like that."
|
|
437
|
-
|
|
438
615
|
### After creating all files, say:
|
|
439
616
|
- "Your design reference is ready. Tailwind config and CSS variables are set up. Any page you build now follows [site name]'s style."
|
|
440
617
|
|
|
@@ -442,7 +619,7 @@ Do not explain every section. The designer doesn't need a walkthrough.
|
|
|
442
619
|
|
|
443
620
|
## What Not To Do
|
|
444
621
|
|
|
445
|
-
- Do not ask which sections to include -- generate all
|
|
622
|
+
- Do not ask which sections to include -- generate all 9
|
|
446
623
|
- Do not generate a partial file and ask if they want more
|
|
447
624
|
- Do not copy copyrighted content (logos, illustrations, copy text) -- only extract visual tokens
|
|
448
625
|
- Do not require any tools beyond web fetching -- no browser automation, no Figma, no screenshots
|