@kennethsolomon/shipkit 3.14.0 → 3.15.1

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 (28) hide show
  1. package/README.md +1 -0
  2. package/commands/sk/website.md +93 -0
  3. package/package.json +1 -1
  4. package/skills/sk:website/SKILL.md +471 -0
  5. package/skills/sk:website/references/art-direction.md +210 -0
  6. package/skills/sk:website/references/brief-template.md +121 -0
  7. package/skills/sk:website/references/content-seo.md +143 -0
  8. package/skills/sk:website/references/handoff-template.md +261 -0
  9. package/skills/sk:website/references/launch-checklist.md +99 -0
  10. package/skills/sk:website/references/niche/accountant.md +75 -0
  11. package/skills/sk:website/references/niche/agency.md +75 -0
  12. package/skills/sk:website/references/niche/cafe.md +79 -0
  13. package/skills/sk:website/references/niche/dentist.md +78 -0
  14. package/skills/sk:website/references/niche/ecommerce.md +76 -0
  15. package/skills/sk:website/references/niche/gym.md +75 -0
  16. package/skills/sk:website/references/niche/home-services.md +76 -0
  17. package/skills/sk:website/references/niche/law-firm.md +75 -0
  18. package/skills/sk:website/references/niche/local-business.md +78 -0
  19. package/skills/sk:website/references/niche/med-spa.md +78 -0
  20. package/skills/sk:website/references/niche/portfolio.md +77 -0
  21. package/skills/sk:website/references/niche/real-estate.md +72 -0
  22. package/skills/sk:website/references/niche/restaurant.md +80 -0
  23. package/skills/sk:website/references/niche/saas.md +80 -0
  24. package/skills/sk:website/references/niche/wedding.md +80 -0
  25. package/skills/sk:website/references/stacks/laravel.md +425 -0
  26. package/skills/sk:website/references/stacks/nextjs.md +345 -0
  27. package/skills/sk:website/references/stacks/nuxt.md +374 -0
  28. package/skills/sk:website/references/whatsapp-cta.md +160 -0
package/README.md CHANGED
@@ -376,6 +376,7 @@ Both `/sk:setup-claude` and `/sk:setup-optimizer` offer to install three tools t
376
376
  | `/sk:security-check` | OWASP security audit with content isolation and CVSS scoring |
377
377
  | `/sk:seo-audit` | SEO audit for web projects |
378
378
  | `/sk:set-profile` | Switch model routing profile |
379
+ | `/sk:website` | Build a complete, client-deliverable multi-page marketing website from a brief or URL. Supports `--stack nuxt`, `--stack laravel`, `--deploy`, `--revise`. Full guide: `docs/guides/sk-website-guide.md` |
379
380
  | `/sk:setup-claude` | Bootstrap project scaffolding |
380
381
  | `/sk:setup-optimizer` | Diagnose + update workflow + deploy hooks + enrich CLAUDE.md |
381
382
  | `/sk:skill-creator` | Create or improve skills |
@@ -0,0 +1,93 @@
1
+ ---
2
+ description: Build a complete, client-deliverable multi-page marketing website from a brief, URL, or one sentence. Auto-builds from intake to handoff. Supports Next.js (default), Nuxt 3, and Laravel. Use --revise for client feedback iterations.
3
+ ---
4
+
5
+ Build a production-ready multi-page marketing website for delivery to a client. This is NOT a prototype or MVP — it outputs real copy, real structure, and a full client handoff package (HANDOFF.md, DEPLOY.md, CONTENT-GUIDE.md).
6
+
7
+ Read and follow `skills/sk:website/SKILL.md` exactly.
8
+
9
+ ## Quick start
10
+
11
+ **From a URL (fastest):**
12
+ ```
13
+ /sk:website
14
+ https://maps.google.com/?q=Your+Business
15
+
16
+ Goal: [what to improve]
17
+ CTA: [primary action]
18
+ ```
19
+
20
+ **From a one-liner:**
21
+ ```
22
+ /sk:website
23
+ [Business name] — [type] in [city]. Goal: [goal]. CTA: [action].
24
+ ```
25
+
26
+ **With full brief:**
27
+ See `skills/sk:website/references/brief-template.md` for the complete brief format.
28
+
29
+ **With a specific stack:**
30
+ ```
31
+ /sk:website --stack nuxt
32
+ [brief or URL]
33
+
34
+ /sk:website --stack laravel
35
+ [brief or URL]
36
+ ```
37
+
38
+ **With deploy after build:**
39
+ ```
40
+ /sk:website --deploy
41
+ [brief or URL]
42
+ ```
43
+
44
+ **Combine flags freely:**
45
+ ```
46
+ /sk:website --stack nuxt --deploy
47
+ [brief or URL]
48
+ ```
49
+
50
+ **For revisions after initial build:**
51
+ ```
52
+ /sk:website --revise
53
+ Changes: [list changes in plain language]
54
+ ```
55
+
56
+ **Revise with a different stack context:**
57
+ ```
58
+ /sk:website --revise --stack laravel
59
+ Changes: [list changes in plain language]
60
+ ```
61
+
62
+ ## What gets built
63
+
64
+ - Multi-page site (Home, About, Services/Menu, Contact + niche extras)
65
+ - Real copy — no Lorem ipsum, no `[placeholder]` headlines
66
+ - SEO metadata on every page (title, description, OG, structured data)
67
+ - WhatsApp floating CTA (auto-injected for local businesses in PH/SEA)
68
+ - Lighthouse 90+ quality enforcement loop
69
+ - Client handoff package (HANDOFF.md, DEPLOY.md, CONTENT-GUIDE.md)
70
+
71
+ ## Supported stacks
72
+
73
+ | Flag | Stack | WhatsApp pattern |
74
+ |---|---|---|
75
+ | (default) | Next.js App Router + TypeScript + Tailwind | React TSX component |
76
+ | `--stack nuxt` | Nuxt 3 + Vue 3 + Tailwind | Vue SFC component |
77
+ | `--stack laravel` | Laravel 11 + Blade + Tailwind + Alpine.js | Blade partial |
78
+
79
+ Stack is auto-detected from existing project files if no flag is given.
80
+
81
+ ## Reference files
82
+
83
+ All references live in `skills/sk:website/references/`:
84
+ - `brief-template.md` — intake format and examples
85
+ - `art-direction.md` — 7 aesthetic directions
86
+ - `content-seo.md` — messaging + local SEO rules
87
+ - `launch-checklist.md` — prelaunch audit
88
+ - `whatsapp-cta.md` — WhatsApp/Messenger implementation
89
+ - `handoff-template.md` — 3 client deliverable templates
90
+ - `stacks/nextjs.md` — Next.js file structure, patterns, deploy
91
+ - `stacks/nuxt.md` — Nuxt 3 file structure, patterns, deploy
92
+ - `stacks/laravel.md` — Laravel file structure, patterns, deploy
93
+ - `niche/[type].md` — 15 industry-specific guides
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kennethsolomon/shipkit",
3
- "version": "3.14.0",
3
+ "version": "3.15.1",
4
4
  "description": "A structured workflow toolkit for Claude Code.",
5
5
  "keywords": [
6
6
  "claude",
@@ -0,0 +1,471 @@
1
+ ---
2
+ name: sk:website
3
+ description: Build a complete, client-deliverable multi-page marketing website from a brief, URL, or one sentence. NOT a prototype — a real site you hand to a client. Auto-builds from intake to handoff package. Use --revise for change iterations after initial build.
4
+ ---
5
+
6
+ # /sk:website — Client Website Builder
7
+
8
+ 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. Runs autonomously from intake to delivery.
9
+
10
+ ## This is NOT sk:mvp
11
+
12
+ | | sk:website | sk:mvp |
13
+ |---|---|---|
14
+ | **Purpose** | Client deliverable | Market validation |
15
+ | **Copy** | Real, business-specific | Placeholder/generic |
16
+ | **Data** | Real structure | Fake data |
17
+ | **Deploy** | Production-ready | Local prototype |
18
+ | **Handoff** | Full client package | Docs only |
19
+
20
+ ## Hard Rules
21
+
22
+ - **Real copy always** — never Lorem ipsum, never `[Your Headline Here]`. Extract real facts and write specific copy.
23
+ - **Multi-page by default** — Home, About, Services/Menu, Contact + niche-specific extras.
24
+ - **Default stack: Next.js + Tailwind** — always respect existing project stack.
25
+ - **WhatsApp is default contact for local businesses in PH/SEA** — auto-detect and inject.
26
+ - **Lighthouse 90+ required before handoff** — loop and fix until passing.
27
+ - **Never invent business facts** — no fake testimonials, invented certifications, or made-up outcomes.
28
+ - **Parallel agents for speed** — strategy + copy + art direction run simultaneously.
29
+ - **Revision mode is targeted** — never rebuild the whole site for small changes.
30
+
31
+ ---
32
+
33
+ ## Mode Detection
34
+
35
+ | Invocation | Mode |
36
+ |---|---|
37
+ | `/sk:website` | Full build mode (Steps 1–7) |
38
+ | `/sk:website --revise` | Revision mode (Steps R1–R6) |
39
+ | `/sk:website --stack nuxt` | Full build mode using Nuxt 3 + Vue 3 |
40
+ | `/sk:website --stack laravel` | Full build mode using Laravel 11 + Blade |
41
+ | `/sk:website --deploy` | Full build mode + Step 8 (deploy to Vercel/Netlify after build) |
42
+ | Flags combine freely | e.g., `--stack nuxt --deploy`, `--stack laravel --revise` |
43
+
44
+ ---
45
+
46
+ ## Stack Detection
47
+
48
+ Determines which stack reference file to load in Step 3.
49
+
50
+ | Priority | Signal | Stack |
51
+ |---|---|---|
52
+ | 1 | `--stack nuxt` flag | Nuxt 3 + Vue 3 + Tailwind → `references/stacks/nuxt.md` |
53
+ | 2 | `--stack laravel` flag | Laravel 11 + Blade + Tailwind → `references/stacks/laravel.md` |
54
+ | 3 | `package.json` contains `"nuxt"` | Nuxt 3 (existing project) |
55
+ | 4 | `composer.json` exists | Laravel (existing project) |
56
+ | 5 | `package.json` contains `"next"` | Next.js (existing project) |
57
+ | 6 | No signals | Default: Next.js App Router → `references/stacks/nextjs.md` |
58
+
59
+ Read the matched stack reference at the start of Step 3 before writing any code.
60
+
61
+ ---
62
+
63
+ ## Full Build Mode
64
+
65
+ ### Step 1 — Brief Extraction
66
+
67
+ Accept any input. Never block on a missing detail — infer and proceed.
68
+
69
+ **Option A: URL input**
70
+
71
+ Use WebFetch to extract facts from any URL the user provides:
72
+ - **Google Maps URL** → business name, category, address, phone, hours, rating count, description
73
+ - **Existing website URL** → name, tagline, services list, contact details, current copy, page structure
74
+ - **Facebook/Instagram business page** → name, description, contact, category
75
+
76
+ If WebFetch fails (JS-only page, redirect, paywall): fall back to Option B immediately. Don't retry.
77
+
78
+ **Option B: Plain text / one sentence**
79
+
80
+ Extract: business name, type, location, services, CTA intent. Infer reasonable defaults for anything missing.
81
+
82
+ **After extraction**, display a compact confirmation and auto-proceed:
83
+
84
+ ```
85
+ [Business Name] — [Type], [Location]
86
+ Services: [list]
87
+ CTA: [primary action]
88
+ Pages: [inferred page set]
89
+ Style: [inferred from type + location]
90
+ Stack: [detected stack — Next.js / Nuxt 3 / Laravel]
91
+
92
+ Building...
93
+ ```
94
+
95
+ Do NOT wait for approval — auto-advance unless extracted facts are clearly ambiguous or contradictory.
96
+
97
+ ---
98
+
99
+ ### Step 2 — Parallel Research
100
+
101
+ Launch 3 agents simultaneously using the Agent tool (all in a single message, `subagent_type="general-purpose"`):
102
+
103
+ **Agent 1 — Strategy Agent**
104
+ - Detect niche from business type using the niche detection table at the bottom of this file.
105
+ - Read `references/niche/[detected-niche].md`.
106
+ - Plan: final page set, sitemap, per-page section structure, CTA flow across all pages, shared nav/footer structure.
107
+ - Output a structured plan with all pages + section outlines.
108
+
109
+ **Agent 2 — Copy Agent**
110
+ - Read `references/content-seo.md`.
111
+ - Read `references/niche/[detected-niche].md` for industry-specific messaging rules.
112
+ - Write real copy using ONLY facts from Step 1. Never invent:
113
+ - Hero headline + subheadline (specific to this business)
114
+ - About section copy
115
+ - Services/offerings copy (use real service names from the brief)
116
+ - CTA copy aligned with the primary action
117
+ - Footer tagline
118
+ - Page title tag + meta description for every page
119
+ - H1 for every page
120
+ - Output all copy ready to inject directly into the build.
121
+
122
+ **Agent 3 — Art Direction Agent**
123
+ - Read `references/art-direction.md`.
124
+ - Based on business type + location + tone keywords in the brief, determine:
125
+ - Dominant aesthetic direction (one of 7 — see reference)
126
+ - 2–4 signature design moves
127
+ - Typography pairing (display + body, not system fonts)
128
+ - Custom color palette (NOT default Tailwind palette colors)
129
+ - Motion stance
130
+ - Output a complete design spec for the build step.
131
+
132
+ Each agent writes its output to a temp doc before returning:
133
+ - Agent 1 → structured sitemap + per-page section outline (markdown)
134
+ - Agent 2 → all copy, organized by page and section (markdown)
135
+ - Agent 3 → aesthetic direction, signature moves, typography, palette hex codes, motion stance (markdown)
136
+
137
+ Collect all 3 agent outputs before proceeding to Step 3.
138
+
139
+ ---
140
+
141
+ ### Step 3 — Build
142
+
143
+ Implement the full site using all 3 agent outputs as inputs.
144
+
145
+ **3a. Project setup**
146
+ - Run stack detection (see Stack Detection table above). Read the matched `references/stacks/[stack].md` file before writing any code.
147
+ - Detect existing framework. If present, work within it and preserve conventions.
148
+ - If no framework: scaffold using the detected stack reference (Next.js by default, or Nuxt/Laravel if flagged).
149
+ - Apply the custom color palette from the art direction spec to `tailwind.config.js` / `tailwind.config.ts`.
150
+ - Configure typography (Google Fonts — see stack reference for the correct import method per stack).
151
+
152
+ **3b. Site configuration**
153
+ - Create a typed site config file (`content/site.ts` or equivalent) with all pages, copy, and metadata from the research agents.
154
+ - Organize for easy future editing — named fields, not magic strings.
155
+
156
+ **3c. Page generation**
157
+ For each page in the sitemap:
158
+ 1. Implement with semantic HTML (landmarks, heading hierarchy, descriptive links).
159
+ 2. Inject real copy from the Copy Agent — no placeholders anywhere.
160
+ 3. Apply visual system from Art Direction Agent (typography, palette, design moves).
161
+ 4. Add per-page SEO: unique title tag, meta description, canonical, OG/Twitter tags.
162
+ 5. Add structured data where appropriate (LocalBusiness, Organization, BreadcrumbList).
163
+ 6. Ensure responsiveness: mobile, tablet, desktop.
164
+
165
+ **3d. WhatsApp CTA injection**
166
+ Read `references/whatsapp-cta.md`.
167
+
168
+ Auto-detect SEA local business using the detection table at the bottom of this file.
169
+
170
+ Conditions for injection (ANY of these):
171
+ - Location explicitly in PH/SEA signals table AND business is local type
172
+ - Business is local type AND location is unknown (default to inject with placeholder)
173
+ - User explicitly mentioned WhatsApp in the brief
174
+
175
+ Implementation — use the stack-appropriate pattern:
176
+
177
+ | Stack | Component pattern |
178
+ |---|---|
179
+ | Next.js | `components/WhatsAppButton.tsx` (React TSX `'use client'` component) — see `references/stacks/nextjs.md` |
180
+ | Nuxt 3 | `components/WhatsAppButton.vue` (Vue SFC with `defineProps`) — see `references/stacks/nuxt.md` |
181
+ | Laravel | `resources/views/components/whatsapp-button.blade.php` (Blade partial with `@props`) — see `references/stacks/laravel.md` |
182
+
183
+ - Wire to extracted phone number (E.164 without `+`: e.g., `639171234567`), or use `[PHONE]` placeholder with a clear note for the client
184
+ - Position: fixed bottom-right floating button
185
+
186
+ If Messenger is preferred (user mentioned it, or location is Philippines): implement Messenger alternative from reference.
187
+
188
+ **3e. Contact handling**
189
+
190
+ Choose based on business type:
191
+ - **Local hospitality** (cafe, restaurant): WhatsApp button + simple reservation/inquiry form
192
+ - **Service business**: inquiry form with honeypot protection + WhatsApp fallback
193
+ - **Professional services**: consultation booking form
194
+ - **SaaS/product**: contact form + optional demo CTA
195
+ - **Portfolio**: minimal contact form or email link
196
+
197
+ **3f. Sitemap + robots**
198
+ Generate `sitemap.xml` and `robots.txt` where the framework supports it (Next.js: `app/sitemap.ts`, `app/robots.ts`).
199
+
200
+ ---
201
+
202
+ ### Step 4 — Lighthouse Enforcement Loop
203
+
204
+ **If Playwright MCP is available:**
205
+ 1. Start the dev server.
206
+ 2. Run Lighthouse on each page.
207
+ 3. Target: Performance ≥ 90, Accessibility ≥ 90, SEO ≥ 90, Best Practices ≥ 90.
208
+ 4. For any page failing:
209
+ - Read the specific failing audit items.
210
+ - Fix: image sizing, missing meta tags, contrast, heading order, font loading, etc.
211
+ - Re-run Lighthouse on that page only.
212
+ 5. Repeat until all pages pass all 4 categories.
213
+ 6. Maximum 3 fix iterations per page. If still failing after 3: flag specific issues to the user and proceed.
214
+
215
+ **If Playwright MCP is NOT available:**
216
+ Run a static quality pass instead:
217
+ - Every page has a unique title and meta description ✓
218
+ - No duplicate H1s, no skipped heading levels ✓
219
+ - All images have descriptive alt text ✓
220
+ - Color contrast is not obviously broken (verify palette choices) ✓
221
+ - Sitemap + robots.txt are generated ✓
222
+ - `next build` (or equivalent) passes without errors ✓
223
+
224
+ Report: `Quality: [N] issues fixed. Build passing.`
225
+
226
+ ---
227
+
228
+ ### Step 5 — Launch Audit
229
+
230
+ Read `references/launch-checklist.md`.
231
+
232
+ Run through all 5 audit categories:
233
+ 1. Search and metadata
234
+ 2. Conversion and content
235
+ 3. Accessibility and UX
236
+ 4. Performance and implementation
237
+ 5. Launch operations
238
+
239
+ Fix all blockers immediately. Log medium-priority and optional polish items for the handoff document.
240
+
241
+ ---
242
+
243
+ ### Step 6 — Handoff Package
244
+
245
+ Read `references/handoff-template.md`.
246
+
247
+ Generate 3 files at the project root using the templates:
248
+
249
+ **`HANDOFF.md`** — Client-facing project summary:
250
+ - What was built (pages, features, integrations)
251
+ - What needs replacing (image placeholders, phone numbers, API keys)
252
+ - How to make simple content edits with specific file paths
253
+ - Contact for technical help
254
+
255
+ **`DEPLOY.md`** — Deployment guide:
256
+ - Vercel one-click deploy + CLI steps
257
+ - Netlify as alternative
258
+ - Required environment variables with descriptions
259
+ - Domain configuration steps
260
+ - Estimated monthly cost (Vercel free tier, domain ~$12/yr)
261
+
262
+ **`CONTENT-GUIDE.md`** — Non-technical editing guide (written FOR the client):
263
+ - Plain language: "To change your opening hours, open `content/site.ts` and find `hours:`"
264
+ - Covers: business name, tagline, contact details, services list, hours, social links
265
+ - No developer jargon
266
+
267
+ ---
268
+
269
+ ### Step 7 — Final Output
270
+
271
+ ```
272
+ ## [Business Name] — Website Complete
273
+
274
+ **Stack:** [framework] + Tailwind CSS
275
+ **Pages:** [list all pages]
276
+ **Style:** [aesthetic direction] — [2-4 signature moves]
277
+ **WhatsApp CTA:** [included — wa.me/[PHONE_NUMBER] / not applicable]
278
+ **Quality:** [Lighthouse 90+ on all pages / static checks passed]
279
+
280
+ ### Run locally
281
+ [exact command]
282
+
283
+ ### Client deliverables
284
+ - `HANDOFF.md` — what was built + what to replace
285
+ - `DEPLOY.md` — how to go live on Vercel (free tier)
286
+ - `CONTENT-GUIDE.md` — how to update content without a developer
287
+
288
+ ### Still needs
289
+ - [ ] [specific placeholders — e.g., hero photo, WhatsApp number, GA4 ID]
290
+ ```
291
+
292
+ ---
293
+
294
+ ### Step 8 — Deploy (only when `--deploy` flag is provided)
295
+
296
+ **Skip this step entirely if `--deploy` was NOT passed.** DEPLOY.md covers manual deploy for all cases.
297
+
298
+ **8a. Detect deploy tool**
299
+
300
+ Check for Vercel CLI first, then Netlify CLI as fallback:
301
+
302
+ ```
303
+ vercel --version → if found: use Vercel
304
+ netlify --version → if found: use Netlify
305
+ neither found → skip deploy, instruct user (see 8c)
306
+ ```
307
+
308
+ **8b. Confirm before deploying**
309
+
310
+ ALWAYS ask before running any deploy command — this is a visible external action:
311
+
312
+ ```
313
+ Ready to deploy to [Vercel/Netlify]? (y/n)
314
+
315
+ This will push the site live. Make sure:
316
+ - HANDOFF.md placeholders are replaced (or noted)
317
+ - Environment variables are configured
318
+ - The client has approved the build
319
+ ```
320
+
321
+ Wait for explicit `y`. Never auto-deploy without user confirmation.
322
+
323
+ **8c. If no CLI found**
324
+
325
+ ```
326
+ Vercel CLI not found. To deploy manually:
327
+ 1. Run: npm install -g vercel
328
+ 2. Run: vercel --prod
329
+ (or follow DEPLOY.md for Netlify or other hosts)
330
+
331
+ DEPLOY.md has been generated with full step-by-step instructions.
332
+ ```
333
+
334
+ **8d. Deploy**
335
+
336
+ For Vercel:
337
+ ```bash
338
+ vercel --prod
339
+ ```
340
+
341
+ For Netlify:
342
+ ```bash
343
+ netlify deploy --prod
344
+ ```
345
+
346
+ For Laravel (no Vercel/Netlify support): output the recommended hosts and point to DEPLOY.md.
347
+
348
+ **8e. After successful deploy**
349
+
350
+ 1. Display the live URL.
351
+ 2. Update `HANDOFF.md`: append a "Live URL" section with the URL and deploy date.
352
+ 3. Update `DEPLOY.md`: mark step as "Deployed" with the live URL.
353
+
354
+ ```
355
+ ## [Business Name] — Deployed
356
+
357
+ Live URL: https://[project].vercel.app
358
+ Deployed: [date]
359
+
360
+ Update HANDOFF.md with the final custom domain once DNS is configured.
361
+ ```
362
+
363
+ ---
364
+
365
+ ## Revision Mode (`--revise`)
366
+
367
+ Use after the initial build when the client has feedback.
368
+
369
+ ### Step R1 — Read current state
370
+ - Read existing site files.
371
+ - Read `HANDOFF.md` if it exists for context on what was built.
372
+
373
+ ### Step R2 — Collect changes
374
+
375
+ If not already provided in the invocation, ask:
376
+ > **What changes does the client want?**
377
+ > Plain language — e.g., "make the hero warmer", "add a gallery section", "update the CTA to Book a Table", "the mobile nav is broken"
378
+
379
+ ### Step R3 — Classify and apply
380
+
381
+ For each change, identify type and act:
382
+
383
+ | Type | Examples | Action |
384
+ |---|---|---|
385
+ | Copy change | Updated headline, new CTA text, service names | Direct edit to config/content file |
386
+ | Style change | Warmer colors, bigger fonts, more spacing | Targeted Tailwind/CSS edit only |
387
+ | Structure change | New section, new page, reordering sections | Implement using existing component patterns |
388
+ | Feature change | Gallery, new contact form, WhatsApp, map | Implement + update handoff docs |
389
+
390
+ **Rule: never rebuild the whole site for targeted feedback.** Edit only what changed.
391
+
392
+ ### Step R4 — Quality re-check
393
+ Run the same Lighthouse/quality checks from Step 4. Fix any regressions introduced by the changes.
394
+
395
+ ### Step R5 — Update handoff docs
396
+ If the structure changed (new page, new section), update `HANDOFF.md` and `CONTENT-GUIDE.md` with new file references and editing instructions.
397
+
398
+ ### Step R6 — Summarize
399
+ ```
400
+ ## Revision Applied
401
+
402
+ **Changes made:**
403
+ - [each change with file:line reference]
404
+
405
+ **Quality:** [passed / N issues fixed]
406
+ **Handoff docs:** [updated / unchanged]
407
+ ```
408
+
409
+ ---
410
+
411
+ ## Niche Detection
412
+
413
+ Auto-detect from brief text. Read the matched reference file in Step 2.
414
+
415
+ | Business type signals | Reference file |
416
+ |---|---|
417
+ | cafe, coffee, espresso, bakery, brunch, brew, roaster, barista | `references/niche/cafe.md` |
418
+ | restaurant, dining, bistro, brasserie, eatery, food, cuisine | `references/niche/restaurant.md` |
419
+ | law, attorney, legal, litigation, counsel, solicitor | `references/niche/law-firm.md` |
420
+ | plumber, HVAC, roofing, cleaning, landscaping, handyman, pest control | `references/niche/home-services.md` |
421
+ | dentist, dental, orthodont, oral, clinic (dental context) | `references/niche/dentist.md` |
422
+ | gym, fitness, yoga, pilates, trainer, crossfit, workout | `references/niche/gym.md` |
423
+ | real estate, property, agent, broker, realty, realtor | `references/niche/real-estate.md` |
424
+ | accountant, bookkeeper, tax, CPA, CFO, advisory, audit | `references/niche/accountant.md` |
425
+ | med spa, aesthetics, injectables, botox, filler, skin clinic | `references/niche/med-spa.md` |
426
+ | wedding, bridal, venue, florist, event planner | `references/niche/wedding.md` |
427
+ | agency, studio, creative, consultancy, design firm | `references/niche/agency.md` |
428
+ | portfolio, freelance, designer, developer, photographer, illustrator | `references/niche/portfolio.md` |
429
+ | shop, store, ecommerce, products, catalog, DTC | `references/niche/ecommerce.md` |
430
+ | SaaS, software, app, platform, tool, B2B | `references/niche/saas.md` |
431
+ | (default — any local service business) | `references/niche/local-business.md` |
432
+
433
+ ---
434
+
435
+ ## SEA Location Detection
436
+
437
+ Used in Step 3d to determine WhatsApp CTA injection.
438
+
439
+ Inject when ALL of:
440
+ 1. Business is a local business (not SaaS, not portfolio, not ecommerce-only)
441
+ 2. Location matches any signal below OR location is unknown
442
+
443
+ | Location signals | Region |
444
+ |---|---|
445
+ | Philippines, PH, Manila, QC, Quezon City, Cebu, Davao, BGC, Makati, Taguig, Pasig, Parañaque, Mandaluyong, Alabang | Philippines |
446
+ | Singapore, SG | Singapore |
447
+ | Malaysia, MY, KL, Kuala Lumpur, Penang, Johor, Petaling Jaya | Malaysia |
448
+ | Indonesia, ID, Jakarta, Bali, Surabaya, Bandung, Medan | Indonesia |
449
+ | Thailand, TH, Bangkok, Phuket, Chiang Mai | Thailand |
450
+ | Vietnam, VN, Ho Chi Minh, HCMC, Hanoi, Da Nang | Vietnam |
451
+ | Hong Kong, HK | Hong Kong |
452
+
453
+ When location is unknown and business is local: inject with `+[PHONE]` placeholder and note.
454
+
455
+ ---
456
+
457
+ ## Model Routing
458
+
459
+ Read `.shipkit/config.json` from the project root if it exists.
460
+
461
+ - If `model_overrides["sk:website"]` is set, use that model — it takes precedence.
462
+ - Otherwise use the `profile` field. Default: `balanced`.
463
+
464
+ | Profile | Orchestrator | Research agents (Step 2) | Build agent (Step 3) |
465
+ |---|---|---|---|
466
+ | `full-sail` | opus (inherit) | sonnet | opus (inherit) |
467
+ | `quality` | opus (inherit) | sonnet | opus (inherit) |
468
+ | `balanced` | sonnet | haiku | sonnet |
469
+ | `budget` | sonnet | haiku | sonnet |
470
+
471
+ > `opus` = inherit (uses current session model). When spawning sub-agents via the Agent tool, pass `model: "<resolved-model>"`.