@kennethsolomon/shipkit 3.19.0 → 3.21.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 +36 -4
- package/package.json +1 -1
- package/skills/sk:brainstorming/SKILL.md +19 -128
- package/skills/sk:debug/SKILL.md +44 -111
- package/skills/sk:e2e/SKILL.md +45 -97
- package/skills/sk:features/SKILL.md +44 -99
- package/skills/sk:frontend-design/SKILL.md +16 -32
- package/skills/sk:laravel-init/SKILL.md +8 -7
- package/skills/sk:laravel-new/SKILL.md +1 -0
- package/skills/sk:lint/SKILL.md +42 -62
- package/skills/sk:mvp/SKILL.md +81 -134
- package/skills/sk:perf/SKILL.md +24 -43
- package/skills/sk:review/SKILL.md +57 -93
- package/skills/sk:security-check/SKILL.md +37 -43
- package/skills/sk:seo-audit/SKILL.md +75 -96
- package/skills/sk:setup-claude/SKILL.md +154 -0
- package/skills/sk:setup-claude/references/skill-profiles.md +223 -0
- package/skills/sk:setup-claude/scripts/__pycache__/apply_setup_claude.cpython-314.pyc +0 -0
- package/skills/sk:setup-claude/scripts/apply_setup_claude.py +110 -10
- package/skills/sk:setup-claude/templates/.claude/rules/laravel.md.template +14 -0
- package/skills/sk:setup-claude/templates/CLAUDE.md.template +102 -247
- package/skills/sk:setup-claude/templates/commands/brainstorm.md.template +1 -1
- package/skills/sk:setup-claude/templates/commands/execute-plan.md.template +1 -1
- package/skills/sk:setup-claude/templates/commands/finish-feature.md.template +1 -1
- package/skills/sk:setup-claude/templates/commands/security-check.md.template +1 -1
- package/skills/sk:setup-claude/templates/commands/write-plan.md.template +1 -1
- package/skills/sk:setup-claude/tests/__pycache__/test_apply_setup_claude.cpython-314.pyc +0 -0
- package/skills/sk:setup-claude/tests/test_apply_setup_claude.py +267 -0
- package/skills/sk:setup-optimizer/SKILL.md +101 -17
- package/skills/sk:skill-creator/SKILL.md +115 -226
- package/skills/sk:website/SKILL.md +81 -149
- package/skills/sk:write-tests/SKILL.md +44 -110
|
@@ -6,7 +6,7 @@ argument-hint: "[--revise] [URL or brief]"
|
|
|
6
6
|
|
|
7
7
|
# /sk:website — Client Website Builder
|
|
8
8
|
|
|
9
|
-
Turn a brief, URL, or one sentence into a production-ready multi-page marketing website with real copy, real SEO, and a full client handoff package.
|
|
9
|
+
Turn a brief, URL, or one sentence into a production-ready multi-page marketing website with real copy, real SEO, and a full client handoff package.
|
|
10
10
|
|
|
11
11
|
## This is NOT sk:mvp
|
|
12
12
|
|
|
@@ -20,7 +20,7 @@ Turn a brief, URL, or one sentence into a production-ready multi-page marketing
|
|
|
20
20
|
|
|
21
21
|
## Hard Rules
|
|
22
22
|
|
|
23
|
-
- **Real copy always** — never Lorem ipsum, never `[Your Headline Here]`. Extract real facts
|
|
23
|
+
- **Real copy always** — never Lorem ipsum, never `[Your Headline Here]`. Extract real facts, write specific copy.
|
|
24
24
|
- **Multi-page by default** — Home, About, Services/Menu, Contact + niche-specific extras.
|
|
25
25
|
- **Default stack: Next.js + Tailwind** — always respect existing project stack.
|
|
26
26
|
- **WhatsApp is default contact for local businesses in PH/SEA** — auto-detect and inject.
|
|
@@ -39,15 +39,13 @@ Turn a brief, URL, or one sentence into a production-ready multi-page marketing
|
|
|
39
39
|
| `/sk:website --revise` | Revision mode (Steps R1–R6) |
|
|
40
40
|
| `/sk:website --stack nuxt` | Full build mode using Nuxt 3 + Vue 3 |
|
|
41
41
|
| `/sk:website --stack laravel` | Full build mode using Laravel 11 + Blade |
|
|
42
|
-
| `/sk:website --deploy` | Full build mode + Step 8 (deploy
|
|
42
|
+
| `/sk:website --deploy` | Full build mode + Step 8 (deploy after build) |
|
|
43
43
|
| Flags combine freely | e.g., `--stack nuxt --deploy`, `--stack laravel --revise` |
|
|
44
44
|
|
|
45
45
|
---
|
|
46
46
|
|
|
47
47
|
## Stack Detection
|
|
48
48
|
|
|
49
|
-
Determines which stack reference file to load in Step 3.
|
|
50
|
-
|
|
51
49
|
| Priority | Signal | Stack |
|
|
52
50
|
|---|---|---|
|
|
53
51
|
| 1 | `--stack nuxt` flag | Nuxt 3 + Vue 3 + Tailwind → `references/stacks/nuxt.md` |
|
|
@@ -67,20 +65,16 @@ Read the matched stack reference at the start of Step 3 before writing any code.
|
|
|
67
65
|
|
|
68
66
|
Accept any input. Never block on a missing detail — infer and proceed.
|
|
69
67
|
|
|
70
|
-
**Option A: URL input**
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
-
|
|
74
|
-
- **Existing website URL** → name, tagline, services list, contact details, current copy, page structure
|
|
75
|
-
- **Facebook/Instagram business page** → name, description, contact, category
|
|
68
|
+
**Option A: URL input** — Use WebFetch to extract:
|
|
69
|
+
- Google Maps URL → business name, category, address, phone, hours, rating count, description
|
|
70
|
+
- Existing website URL → name, tagline, services, contact details, copy, page structure
|
|
71
|
+
- Facebook/Instagram business page → name, description, contact, category
|
|
76
72
|
|
|
77
73
|
If WebFetch fails (JS-only page, redirect, paywall): fall back to Option B immediately. Don't retry.
|
|
78
74
|
|
|
79
|
-
**Option B: Plain text / one sentence**
|
|
75
|
+
**Option B: Plain text / one sentence** — Extract: business name, type, location, services, CTA intent. Infer reasonable defaults for anything missing.
|
|
80
76
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
**After extraction**, display a compact confirmation and auto-proceed:
|
|
77
|
+
**After extraction**, display and auto-proceed:
|
|
84
78
|
|
|
85
79
|
```
|
|
86
80
|
[Business Name] — [Type], [Location]
|
|
@@ -93,49 +87,28 @@ Stack: [detected stack — Next.js / Nuxt 3 / Laravel]
|
|
|
93
87
|
Building...
|
|
94
88
|
```
|
|
95
89
|
|
|
96
|
-
|
|
90
|
+
Auto-advance unless extracted facts are clearly ambiguous or contradictory.
|
|
97
91
|
|
|
98
92
|
---
|
|
99
93
|
|
|
100
94
|
### Step 2 — Parallel Research
|
|
101
95
|
|
|
102
|
-
Launch 3 agents simultaneously
|
|
96
|
+
Launch 3 agents simultaneously via Agent tool (all in one message, `subagent_type="general-purpose"`):
|
|
103
97
|
|
|
104
98
|
**Agent 1 — Strategy Agent**
|
|
105
|
-
- Detect niche
|
|
106
|
-
-
|
|
107
|
-
- Plan: final page set, sitemap, per-page section structure, CTA flow across all pages, shared nav/footer structure.
|
|
108
|
-
- Output a structured plan with all pages + section outlines.
|
|
99
|
+
- Detect niche using the niche detection table below. Read `references/niche/[detected-niche].md`.
|
|
100
|
+
- Output: final page set, sitemap, per-page section structure, CTA flow, shared nav/footer structure.
|
|
109
101
|
|
|
110
102
|
**Agent 2 — Copy Agent**
|
|
111
|
-
- Read `references/content-seo.md`.
|
|
112
|
-
-
|
|
113
|
-
-
|
|
114
|
-
- Hero headline + subheadline (specific to this business)
|
|
115
|
-
- About section copy
|
|
116
|
-
- Services/offerings copy (use real service names from the brief)
|
|
117
|
-
- CTA copy aligned with the primary action
|
|
118
|
-
- Footer tagline
|
|
119
|
-
- Page title tag + meta description for every page
|
|
120
|
-
- H1 for every page
|
|
121
|
-
- Output all copy ready to inject directly into the build.
|
|
103
|
+
- Read `references/content-seo.md` and `references/niche/[detected-niche].md`.
|
|
104
|
+
- Write real copy using ONLY facts from Step 1. Never invent.
|
|
105
|
+
- Output (ready to inject): hero headline + subheadline, about section, services copy, CTA copy, footer tagline, title tag + meta description + H1 for every page.
|
|
122
106
|
|
|
123
107
|
**Agent 3 — Art Direction Agent**
|
|
124
108
|
- Read `references/art-direction.md`.
|
|
125
|
-
-
|
|
126
|
-
- Dominant aesthetic direction (one of 7 — see reference)
|
|
127
|
-
- 2–4 signature design moves
|
|
128
|
-
- Typography pairing (display + body, not system fonts)
|
|
129
|
-
- Custom color palette (NOT default Tailwind palette colors)
|
|
130
|
-
- Motion stance
|
|
131
|
-
- Output a complete design spec for the build step.
|
|
132
|
-
|
|
133
|
-
Each agent writes its output to a temp doc before returning:
|
|
134
|
-
- Agent 1 → structured sitemap + per-page section outline (markdown)
|
|
135
|
-
- Agent 2 → all copy, organized by page and section (markdown)
|
|
136
|
-
- Agent 3 → aesthetic direction, signature moves, typography, palette hex codes, motion stance (markdown)
|
|
109
|
+
- Output: dominant aesthetic direction (one of 7), 2–4 signature design moves, typography pairing (display + body, not system fonts), custom color palette (NOT default Tailwind colors), motion stance.
|
|
137
110
|
|
|
138
|
-
|
|
111
|
+
Each agent writes output to a temp doc. Collect all 3 before proceeding.
|
|
139
112
|
|
|
140
113
|
---
|
|
141
114
|
|
|
@@ -144,82 +117,70 @@ Collect all 3 agent outputs before proceeding to Step 3.
|
|
|
144
117
|
Implement the full site using all 3 agent outputs as inputs.
|
|
145
118
|
|
|
146
119
|
**3a. Project setup**
|
|
147
|
-
- Run stack detection (see
|
|
148
|
-
-
|
|
149
|
-
- If no framework: scaffold using
|
|
150
|
-
- Apply
|
|
151
|
-
- Configure typography (Google Fonts — see stack reference for
|
|
120
|
+
- Run stack detection (see table above). Read `references/stacks/[stack].md` before writing any code.
|
|
121
|
+
- If existing framework: work within it, preserve conventions.
|
|
122
|
+
- If no framework: scaffold using detected stack reference.
|
|
123
|
+
- Apply custom color palette to `tailwind.config.js` / `tailwind.config.ts`.
|
|
124
|
+
- Configure typography (Google Fonts — see stack reference for correct import method).
|
|
152
125
|
|
|
153
126
|
**3b. Site configuration**
|
|
154
|
-
- Create
|
|
155
|
-
- Organize for easy future editing — named fields, not magic strings.
|
|
127
|
+
- Create typed site config (`content/site.ts` or equivalent) with all pages, copy, and metadata from research agents. Named fields, not magic strings.
|
|
156
128
|
|
|
157
|
-
**3c. Page generation**
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
2. Inject real copy from the Copy Agent — no placeholders anywhere.
|
|
129
|
+
**3c. Page generation** — for each page in the sitemap:
|
|
130
|
+
1. Semantic HTML (landmarks, heading hierarchy, descriptive links).
|
|
131
|
+
2. Inject real copy from Copy Agent — no placeholders.
|
|
161
132
|
3. Apply visual system from Art Direction Agent (typography, palette, design moves).
|
|
162
|
-
4.
|
|
163
|
-
5.
|
|
164
|
-
6.
|
|
133
|
+
4. Per-page SEO: unique title tag, meta description, canonical, OG/Twitter tags.
|
|
134
|
+
5. Structured data where appropriate (LocalBusiness, Organization, BreadcrumbList).
|
|
135
|
+
6. Responsive: mobile, tablet, desktop.
|
|
165
136
|
|
|
166
137
|
**3d. WhatsApp CTA injection**
|
|
167
|
-
Read `references/whatsapp-cta.md`.
|
|
138
|
+
Read `references/whatsapp-cta.md`. Auto-detect SEA local business using the detection table below.
|
|
168
139
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
- Location explicitly in PH/SEA signals table AND business is local type
|
|
173
|
-
- Business is local type AND location is unknown (default to inject with placeholder)
|
|
140
|
+
Inject when ANY of:
|
|
141
|
+
- Location in PH/SEA signals table AND business is local type
|
|
142
|
+
- Business is local type AND location is unknown (inject with placeholder)
|
|
174
143
|
- User explicitly mentioned WhatsApp in the brief
|
|
175
144
|
|
|
176
|
-
Implementation — use the stack-appropriate pattern:
|
|
177
|
-
|
|
178
145
|
| Stack | Component pattern |
|
|
179
146
|
|---|---|
|
|
180
|
-
| Next.js | `components/WhatsAppButton.tsx` (
|
|
181
|
-
| Nuxt 3 | `components/WhatsAppButton.vue` (
|
|
182
|
-
| Laravel | `resources/views/components/whatsapp-button.blade.php` (
|
|
183
|
-
|
|
184
|
-
- Wire to extracted phone number (E.164 without `+`: e.g., `639171234567`), or use `[PHONE]` placeholder with a clear note for the client
|
|
185
|
-
- Position: fixed bottom-right floating button
|
|
147
|
+
| Next.js | `components/WhatsAppButton.tsx` (`'use client'`) — see `references/stacks/nextjs.md` |
|
|
148
|
+
| Nuxt 3 | `components/WhatsAppButton.vue` (`defineProps`) — see `references/stacks/nuxt.md` |
|
|
149
|
+
| Laravel | `resources/views/components/whatsapp-button.blade.php` (`@props`) — see `references/stacks/laravel.md` |
|
|
186
150
|
|
|
187
|
-
|
|
151
|
+
- Wire to extracted phone (E.164 without `+`: e.g., `639171234567`), or use `[PHONE]` placeholder with client note.
|
|
152
|
+
- Position: fixed bottom-right floating button.
|
|
153
|
+
- If Messenger preferred (user mentioned it, or location is Philippines): implement Messenger alternative from reference.
|
|
188
154
|
|
|
189
155
|
**3e. Contact handling**
|
|
190
156
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
157
|
+
| Business type | Contact implementation |
|
|
158
|
+
|---|---|
|
|
159
|
+
| Local hospitality (cafe, restaurant) | WhatsApp button + reservation/inquiry form |
|
|
160
|
+
| Service business | Inquiry form with honeypot + WhatsApp fallback |
|
|
161
|
+
| Professional services | Consultation booking form |
|
|
162
|
+
| SaaS/product | Contact form + optional demo CTA |
|
|
163
|
+
| Portfolio | Minimal contact form or email link |
|
|
197
164
|
|
|
198
165
|
**3f. Sitemap + robots**
|
|
199
|
-
Generate `sitemap.xml` and `robots.txt`
|
|
166
|
+
Generate `sitemap.xml` and `robots.txt` (Next.js: `app/sitemap.ts`, `app/robots.ts`).
|
|
200
167
|
|
|
201
168
|
---
|
|
202
169
|
|
|
203
170
|
### Step 4 — Lighthouse Enforcement Loop
|
|
204
171
|
|
|
205
172
|
**If Playwright MCP is available:**
|
|
206
|
-
1. Start
|
|
207
|
-
2. Run Lighthouse on each page.
|
|
208
|
-
3.
|
|
209
|
-
4.
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
5. Repeat until all pages pass all 4 categories.
|
|
214
|
-
6. Maximum 3 fix iterations per page. If still failing after 3: flag specific issues to the user and proceed.
|
|
215
|
-
|
|
216
|
-
**If Playwright MCP is NOT available:**
|
|
217
|
-
Run a static quality pass instead:
|
|
218
|
-
- Every page has a unique title and meta description ✓
|
|
173
|
+
1. Start dev server.
|
|
174
|
+
2. Run Lighthouse on each page. Target: Performance ≥ 90, Accessibility ≥ 90, SEO ≥ 90, Best Practices ≥ 90.
|
|
175
|
+
3. For any failing page: read failing audit items, fix (image sizing, missing meta, contrast, heading order, font loading), re-run that page only.
|
|
176
|
+
4. Repeat until all pages pass all 4 categories. Max 3 fix iterations per page — if still failing, flag to user and proceed.
|
|
177
|
+
|
|
178
|
+
**If Playwright MCP is NOT available** — static quality pass:
|
|
179
|
+
- Every page has unique title and meta description ✓
|
|
219
180
|
- No duplicate H1s, no skipped heading levels ✓
|
|
220
181
|
- All images have descriptive alt text ✓
|
|
221
|
-
- Color contrast
|
|
222
|
-
- Sitemap + robots.txt
|
|
182
|
+
- Color contrast not obviously broken ✓
|
|
183
|
+
- Sitemap + robots.txt generated ✓
|
|
223
184
|
- `next build` (or equivalent) passes without errors ✓
|
|
224
185
|
|
|
225
186
|
Report: `Quality: [N] issues fixed. Build passing.`
|
|
@@ -228,9 +189,7 @@ Report: `Quality: [N] issues fixed. Build passing.`
|
|
|
228
189
|
|
|
229
190
|
### Step 5 — Launch Audit
|
|
230
191
|
|
|
231
|
-
Read `references/launch-checklist.md`.
|
|
232
|
-
|
|
233
|
-
Run through all 5 audit categories:
|
|
192
|
+
Read `references/launch-checklist.md`. Run all 5 audit categories:
|
|
234
193
|
1. Search and metadata
|
|
235
194
|
2. Conversion and content
|
|
236
195
|
3. Accessibility and UX
|
|
@@ -243,24 +202,21 @@ Fix all blockers immediately. Log medium-priority and optional polish items for
|
|
|
243
202
|
|
|
244
203
|
### Step 6 — Handoff Package
|
|
245
204
|
|
|
246
|
-
Read `references/handoff-template.md`.
|
|
247
|
-
|
|
248
|
-
Generate 3 files at the project root using the templates:
|
|
205
|
+
Read `references/handoff-template.md`. Generate 3 files at project root:
|
|
249
206
|
|
|
250
|
-
**`HANDOFF.md`** — Client-facing
|
|
207
|
+
**`HANDOFF.md`** — Client-facing:
|
|
251
208
|
- What was built (pages, features, integrations)
|
|
252
209
|
- What needs replacing (image placeholders, phone numbers, API keys)
|
|
253
210
|
- How to make simple content edits with specific file paths
|
|
254
211
|
- Contact for technical help
|
|
255
212
|
|
|
256
213
|
**`DEPLOY.md`** — Deployment guide:
|
|
257
|
-
- Vercel one-click deploy + CLI steps
|
|
258
|
-
- Netlify as alternative
|
|
214
|
+
- Vercel one-click deploy + CLI steps; Netlify as alternative
|
|
259
215
|
- Required environment variables with descriptions
|
|
260
216
|
- Domain configuration steps
|
|
261
217
|
- Estimated monthly cost (Vercel free tier, domain ~$12/yr)
|
|
262
218
|
|
|
263
|
-
**`CONTENT-GUIDE.md`** — Non-technical editing
|
|
219
|
+
**`CONTENT-GUIDE.md`** — Non-technical editing (written FOR the client):
|
|
264
220
|
- Plain language: "To change your opening hours, open `content/site.ts` and find `hours:`"
|
|
265
221
|
- Covers: business name, tagline, contact details, services list, hours, social links
|
|
266
222
|
- No developer jargon
|
|
@@ -294,22 +250,16 @@ Generate 3 files at the project root using the templates:
|
|
|
294
250
|
|
|
295
251
|
### Step 8 — Deploy (only when `--deploy` flag is provided)
|
|
296
252
|
|
|
297
|
-
|
|
253
|
+
Skip entirely if `--deploy` was NOT passed. DEPLOY.md covers manual deploy for all cases.
|
|
298
254
|
|
|
299
255
|
**8a. Detect deploy tool**
|
|
300
|
-
|
|
301
|
-
Check for Vercel CLI first, then Netlify CLI as fallback:
|
|
302
|
-
|
|
303
256
|
```
|
|
304
257
|
vercel --version → if found: use Vercel
|
|
305
258
|
netlify --version → if found: use Netlify
|
|
306
259
|
neither found → skip deploy, instruct user (see 8c)
|
|
307
260
|
```
|
|
308
261
|
|
|
309
|
-
**8b. Confirm before deploying**
|
|
310
|
-
|
|
311
|
-
ALWAYS ask before running any deploy command — this is a visible external action:
|
|
312
|
-
|
|
262
|
+
**8b. Confirm before deploying** — ALWAYS ask before running any deploy command:
|
|
313
263
|
```
|
|
314
264
|
Ready to deploy to [Vercel/Netlify]? (y/n)
|
|
315
265
|
|
|
@@ -318,39 +268,27 @@ This will push the site live. Make sure:
|
|
|
318
268
|
- Environment variables are configured
|
|
319
269
|
- The client has approved the build
|
|
320
270
|
```
|
|
321
|
-
|
|
322
|
-
Wait for explicit `y`. Never auto-deploy without user confirmation.
|
|
271
|
+
Wait for explicit `y`. Never auto-deploy.
|
|
323
272
|
|
|
324
273
|
**8c. If no CLI found**
|
|
325
|
-
|
|
326
274
|
```
|
|
327
275
|
Vercel CLI not found. To deploy manually:
|
|
328
276
|
1. Run: npm install -g vercel
|
|
329
277
|
2. Run: vercel --prod
|
|
330
278
|
(or follow DEPLOY.md for Netlify or other hosts)
|
|
331
|
-
|
|
332
|
-
DEPLOY.md has been generated with full step-by-step instructions.
|
|
333
279
|
```
|
|
334
280
|
|
|
335
281
|
**8d. Deploy**
|
|
336
|
-
|
|
337
|
-
For Vercel:
|
|
338
282
|
```bash
|
|
339
|
-
vercel --prod
|
|
283
|
+
vercel --prod # Vercel
|
|
284
|
+
netlify deploy --prod # Netlify
|
|
340
285
|
```
|
|
341
|
-
|
|
342
|
-
For Netlify:
|
|
343
|
-
```bash
|
|
344
|
-
netlify deploy --prod
|
|
345
|
-
```
|
|
346
|
-
|
|
347
|
-
For Laravel (no Vercel/Netlify support): output the recommended hosts and point to DEPLOY.md.
|
|
286
|
+
For Laravel (no Vercel/Netlify support): output recommended hosts and point to DEPLOY.md.
|
|
348
287
|
|
|
349
288
|
**8e. After successful deploy**
|
|
350
|
-
|
|
351
289
|
1. Display the live URL.
|
|
352
|
-
2. Update `HANDOFF.md`: append
|
|
353
|
-
3. Update `DEPLOY.md`: mark
|
|
290
|
+
2. Update `HANDOFF.md`: append "Live URL" section with URL and deploy date.
|
|
291
|
+
3. Update `DEPLOY.md`: mark as "Deployed" with live URL.
|
|
354
292
|
|
|
355
293
|
```
|
|
356
294
|
## [Business Name] — Deployed
|
|
@@ -365,36 +303,30 @@ Update HANDOFF.md with the final custom domain once DNS is configured.
|
|
|
365
303
|
|
|
366
304
|
## Revision Mode (`--revise`)
|
|
367
305
|
|
|
368
|
-
Use after the initial build when the client has feedback.
|
|
369
|
-
|
|
370
306
|
### Step R1 — Read current state
|
|
371
|
-
- Read existing site files.
|
|
372
|
-
- Read `HANDOFF.md` if it exists for context on what was built.
|
|
307
|
+
- Read existing site files and `HANDOFF.md` (if exists) for build context.
|
|
373
308
|
|
|
374
309
|
### Step R2 — Collect changes
|
|
375
|
-
|
|
376
|
-
If not already provided in the invocation, ask:
|
|
310
|
+
If not provided in the invocation, ask:
|
|
377
311
|
> **What changes does the client want?**
|
|
378
312
|
> Plain language — e.g., "make the hero warmer", "add a gallery section", "update the CTA to Book a Table", "the mobile nav is broken"
|
|
379
313
|
|
|
380
314
|
### Step R3 — Classify and apply
|
|
381
315
|
|
|
382
|
-
For each change, identify type and act:
|
|
383
|
-
|
|
384
316
|
| Type | Examples | Action |
|
|
385
317
|
|---|---|---|
|
|
386
318
|
| Copy change | Updated headline, new CTA text, service names | Direct edit to config/content file |
|
|
387
319
|
| Style change | Warmer colors, bigger fonts, more spacing | Targeted Tailwind/CSS edit only |
|
|
388
|
-
| Structure change | New section, new page, reordering
|
|
320
|
+
| Structure change | New section, new page, reordering | Implement using existing component patterns |
|
|
389
321
|
| Feature change | Gallery, new contact form, WhatsApp, map | Implement + update handoff docs |
|
|
390
322
|
|
|
391
|
-
|
|
323
|
+
Never rebuild the whole site for targeted feedback. Edit only what changed.
|
|
392
324
|
|
|
393
325
|
### Step R4 — Quality re-check
|
|
394
|
-
Run
|
|
326
|
+
Run same Lighthouse/quality checks from Step 4. Fix any regressions.
|
|
395
327
|
|
|
396
328
|
### Step R5 — Update handoff docs
|
|
397
|
-
If
|
|
329
|
+
If structure changed (new page, new section), update `HANDOFF.md` and `CONTENT-GUIDE.md` with new file references and editing instructions.
|
|
398
330
|
|
|
399
331
|
### Step R6 — Summarize
|
|
400
332
|
```
|
|
@@ -411,7 +343,7 @@ If the structure changed (new page, new section), update `HANDOFF.md` and `CONTE
|
|
|
411
343
|
|
|
412
344
|
## Niche Detection
|
|
413
345
|
|
|
414
|
-
Auto-detect from brief text. Read
|
|
346
|
+
Auto-detect from brief text. Read matched reference file in Step 2.
|
|
415
347
|
|
|
416
348
|
| Business type signals | Reference file |
|
|
417
349
|
|---|---|
|
|
@@ -435,10 +367,10 @@ Auto-detect from brief text. Read the matched reference file in Step 2.
|
|
|
435
367
|
|
|
436
368
|
## SEA Location Detection
|
|
437
369
|
|
|
438
|
-
Used in Step 3d
|
|
370
|
+
Used in Step 3d for WhatsApp CTA injection.
|
|
439
371
|
|
|
440
372
|
Inject when ALL of:
|
|
441
|
-
1. Business is
|
|
373
|
+
1. Business is local (not SaaS, not portfolio, not ecommerce-only)
|
|
442
374
|
2. Location matches any signal below OR location is unknown
|
|
443
375
|
|
|
444
376
|
| Location signals | Region |
|
|
@@ -457,9 +389,9 @@ When location is unknown and business is local: inject with `+[PHONE]` placehold
|
|
|
457
389
|
|
|
458
390
|
## Model Routing
|
|
459
391
|
|
|
460
|
-
Read `.shipkit/config.json` from
|
|
392
|
+
Read `.shipkit/config.json` from project root if it exists.
|
|
461
393
|
|
|
462
|
-
- If `model_overrides["sk:website"]` is set, use that model —
|
|
394
|
+
- If `model_overrides["sk:website"]` is set, use that model — takes precedence.
|
|
463
395
|
- Otherwise use the `profile` field. Default: `balanced`.
|
|
464
396
|
|
|
465
397
|
| Profile | Orchestrator | Research agents (Step 2) | Build agent (Step 3) |
|