@kennethsolomon/shipkit 3.14.0 → 3.15.2
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 +1 -0
- package/commands/sk/website.md +11 -0
- package/package.json +1 -1
- package/skills/sk:website/SKILL.md +471 -0
- package/skills/sk:website/references/art-direction.md +210 -0
- package/skills/sk:website/references/brief-template.md +121 -0
- package/skills/sk:website/references/content-seo.md +143 -0
- package/skills/sk:website/references/handoff-template.md +261 -0
- package/skills/sk:website/references/launch-checklist.md +99 -0
- package/skills/sk:website/references/niche/accountant.md +75 -0
- package/skills/sk:website/references/niche/agency.md +75 -0
- package/skills/sk:website/references/niche/cafe.md +79 -0
- package/skills/sk:website/references/niche/dentist.md +78 -0
- package/skills/sk:website/references/niche/ecommerce.md +76 -0
- package/skills/sk:website/references/niche/gym.md +75 -0
- package/skills/sk:website/references/niche/home-services.md +76 -0
- package/skills/sk:website/references/niche/law-firm.md +75 -0
- package/skills/sk:website/references/niche/local-business.md +78 -0
- package/skills/sk:website/references/niche/med-spa.md +78 -0
- package/skills/sk:website/references/niche/portfolio.md +77 -0
- package/skills/sk:website/references/niche/real-estate.md +72 -0
- package/skills/sk:website/references/niche/restaurant.md +80 -0
- package/skills/sk:website/references/niche/saas.md +80 -0
- package/skills/sk:website/references/niche/wedding.md +80 -0
- package/skills/sk:website/references/stacks/laravel.md +425 -0
- package/skills/sk:website/references/stacks/nextjs.md +345 -0
- package/skills/sk:website/references/stacks/nuxt.md +374 -0
- 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,11 @@
|
|
|
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
|
+
# /sk:website
|
|
6
|
+
|
|
7
|
+
Build a production-ready multi-page marketing website for delivery to a client.
|
|
8
|
+
|
|
9
|
+
Usage: `/sk:website [--stack nuxt|laravel] [--deploy] [--revise]`
|
|
10
|
+
|
|
11
|
+
See `skills/sk:website/SKILL.md` for full details.
|
package/package.json
CHANGED
|
@@ -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>"`.
|