@kennethsolomon/shipkit 3.13.2 → 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 (45) hide show
  1. package/README.md +7 -6
  2. package/commands/sk/brainstorm.md +13 -0
  3. package/commands/sk/execute-plan.md +1 -0
  4. package/commands/sk/security-check.md +4 -0
  5. package/commands/sk/website.md +93 -0
  6. package/commands/sk/write-plan.md +38 -0
  7. package/package.json +1 -1
  8. package/skills/sk:autopilot/SKILL.md +0 -1
  9. package/skills/sk:fast-track/SKILL.md +0 -1
  10. package/skills/sk:gates/SKILL.md +4 -1
  11. package/skills/sk:retro/SKILL.md +0 -1
  12. package/skills/sk:reverse-doc/SKILL.md +0 -1
  13. package/skills/sk:review/SKILL.md +24 -6
  14. package/skills/sk:scope-check/SKILL.md +0 -1
  15. package/skills/sk:setup-claude/templates/commands/brainstorm.md.template +13 -0
  16. package/skills/sk:setup-claude/templates/commands/execute-plan.md.template +1 -0
  17. package/skills/sk:setup-claude/templates/commands/security-check.md.template +3 -0
  18. package/skills/sk:setup-claude/templates/commands/write-plan.md.template +37 -0
  19. package/skills/sk:start/SKILL.md +0 -1
  20. package/skills/sk:team/SKILL.md +0 -1
  21. package/skills/sk:website/SKILL.md +471 -0
  22. package/skills/sk:website/references/art-direction.md +210 -0
  23. package/skills/sk:website/references/brief-template.md +121 -0
  24. package/skills/sk:website/references/content-seo.md +143 -0
  25. package/skills/sk:website/references/handoff-template.md +261 -0
  26. package/skills/sk:website/references/launch-checklist.md +99 -0
  27. package/skills/sk:website/references/niche/accountant.md +75 -0
  28. package/skills/sk:website/references/niche/agency.md +75 -0
  29. package/skills/sk:website/references/niche/cafe.md +79 -0
  30. package/skills/sk:website/references/niche/dentist.md +78 -0
  31. package/skills/sk:website/references/niche/ecommerce.md +76 -0
  32. package/skills/sk:website/references/niche/gym.md +75 -0
  33. package/skills/sk:website/references/niche/home-services.md +76 -0
  34. package/skills/sk:website/references/niche/law-firm.md +75 -0
  35. package/skills/sk:website/references/niche/local-business.md +78 -0
  36. package/skills/sk:website/references/niche/med-spa.md +78 -0
  37. package/skills/sk:website/references/niche/portfolio.md +77 -0
  38. package/skills/sk:website/references/niche/real-estate.md +72 -0
  39. package/skills/sk:website/references/niche/restaurant.md +80 -0
  40. package/skills/sk:website/references/niche/saas.md +80 -0
  41. package/skills/sk:website/references/niche/wedding.md +80 -0
  42. package/skills/sk:website/references/stacks/laravel.md +425 -0
  43. package/skills/sk:website/references/stacks/nextjs.md +345 -0
  44. package/skills/sk:website/references/stacks/nuxt.md +374 -0
  45. package/skills/sk:website/references/whatsapp-cta.md +160 -0
@@ -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>"`.
@@ -0,0 +1,210 @@
1
+ # Art Direction Reference
2
+
3
+ Use this when building or reviewing the visual system for a website. Translate the business brief into a deliberate visual direction that can be implemented in code without drifting into generic AI-generated styling.
4
+
5
+ ## Workflow
6
+
7
+ 1. Pick one dominant aesthetic direction from the list below.
8
+ 2. Define 2–4 signature design moves.
9
+ 3. Choose a type strategy, palette behavior, spacing rhythm, and motion stance.
10
+ 4. Verify the style still supports clarity, trust, and conversion.
11
+
12
+ ---
13
+
14
+ ## Aesthetic Directions
15
+
16
+ Choose exactly one dominant direction. Do not mix multiple directions without a clear hierarchy.
17
+
18
+ ### Restrained Editorial
19
+
20
+ Good for: architecture studios, fashion-adjacent brands, premium consultants, galleries, publishing.
21
+
22
+ Signals:
23
+ - Strong typographic contrast (large serif headline, small sans body)
24
+ - Generous whitespace — sections breathe
25
+ - Sparse palette (warm white + dark neutral + one muted accent)
26
+ - Image restraint — one strong image per section, not a grid
27
+
28
+ Avoid:
29
+ - Decorative layers that break the calm
30
+ - Loud CTA styling that contradicts the quiet tone
31
+
32
+ ### Premium Product-Led
33
+
34
+ Good for: SaaS, devices, premium consumer products, DTC hero pages.
35
+
36
+ Signals:
37
+ - Crisp hierarchy with product at the center
38
+ - Focused product framing (screenshot, mockup, or isolated product shot)
39
+ - Clear product storytelling — one benefit per section
40
+ - Controlled accent color on a near-white or dark background
41
+
42
+ Avoid:
43
+ - Fake dashboards with no real product
44
+ - Overstuffed hero sections with too many messages
45
+
46
+ ### Bold Brand-Forward
47
+
48
+ Good for: agencies, challenger brands, culture-led products, streetwear, creative studios.
49
+
50
+ Signals:
51
+ - Strong contrast between sections
52
+ - Daring type scale — headline that dominates the viewport
53
+ - Sharper section transitions (hard cuts, not gentle fades)
54
+ - High visual recall through one repeating graphic pattern or color block
55
+
56
+ Avoid:
57
+ - Sacrificing legibility for attitude
58
+ - Using bold direction for trust-sensitive businesses (law, medical, finance)
59
+
60
+ ### Warm Hospitality
61
+
62
+ Good for: cafes, boutique hotels, restaurants, lifestyle spaces, florists, bakeries.
63
+
64
+ Signals:
65
+ - Tactile, atmosphere-first imagery (real textures, warm light, food close-ups)
66
+ - Warm neutrals — cream, sand, olive, terracotta, warm grey
67
+ - Editorial pacing — section rhythm like a magazine spread
68
+ - Practical info (hours, address, reservation CTA) stays visible and easy to find
69
+
70
+ Avoid:
71
+ - Corporate UI chrome that breaks the atmosphere
72
+ - Hiding menu, hours, location, or booking link behind design
73
+ - Stock cafe imagery when real photography is the point
74
+
75
+ ### Sharp Technical
76
+
77
+ Good for: developer tools, B2B platforms, infrastructure products, data products, security tools.
78
+
79
+ Signals:
80
+ - Precise grid with tight alignment
81
+ - Low visual noise — very few decorative elements
82
+ - Strong information hierarchy — function drives layout
83
+ - Restrained motion — only when it explains something
84
+
85
+ Avoid:
86
+ - Playful or warm treatments that undermine technical credibility
87
+ - Dense copy with no visual breathing room
88
+
89
+ ### Playful Contemporary
90
+
91
+ Good for: consumer apps, EdTech, food delivery, kids products, lifestyle brands targeting under-35.
92
+
93
+ Signals:
94
+ - Rounded forms, approachable typography
95
+ - Brighter palette with confident accent colors
96
+ - Motion used generously but purposefully
97
+ - Illustration or character work where appropriate
98
+
99
+ Avoid:
100
+ - Looking cheap or juvenile for a premium audience
101
+ - Overanimation that obscures the product
102
+
103
+ ### Quiet Luxury
104
+
105
+ Good for: premium services, interior design, high-end hospitality, luxury retail, wellness brands.
106
+
107
+ Signals:
108
+ - Restraint above all — nothing superfluous
109
+ - Tactile material cues (fabric textures, paper grain, stone)
110
+ - Elegant typography contrast (fine serif + sparse uppercase tracking)
111
+ - Limited palette — usually 2–3 colors maximum
112
+
113
+ Avoid:
114
+ - Gimmicky animation that breaks the calm
115
+ - Shiny, trend-driven effects (glass, neon, gradients)
116
+ - Too much copy — quiet luxury lets the brand speak with less
117
+
118
+ ---
119
+
120
+ ## Signature Design Moves
121
+
122
+ Every strong site has 2–4 memorable moves. Choose moves that fit the direction and stick with them.
123
+
124
+ Examples:
125
+ - Oversized serif headline with tight sans-serif body underneath
126
+ - Muted palette with one decisive high-contrast accent color
127
+ - Image-first storytelling with minimal interface chrome around it
128
+ - Rigid grid with one intentionally broken element per section
129
+ - Soft material textures behind simple white interface frames
130
+ - Full-bleed photography sections alternating with dense-type sections
131
+ - Sticky navigation that changes color on scroll
132
+
133
+ **Rule:** Two strong moves beat six weak ones. Restraint is a design decision.
134
+
135
+ ---
136
+
137
+ ## Typography Mood
138
+
139
+ Choose typography to express the brand's confidence level and audience — not just to look fashionable.
140
+
141
+ | Mood | Type strategy |
142
+ |---|---|
143
+ | Elegant and assured | Serif headline + restrained supporting sans (e.g., Playfair Display + Inter) |
144
+ | Modern and precise | Neo-grotesk or geometric sans with strong scale control (e.g., DM Sans, Plus Jakarta Sans) |
145
+ | Warm and neighborhood-focused | Soft serif or humanist sans pairings (e.g., Lora + Nunito, Fraunces + Manrope) |
146
+ | Technical and credible | Clean sans with tight hierarchy, minimal ornament (e.g., IBM Plex Sans, Space Grotesk) |
147
+ | Bold brand-forward | Display face with strong personality (e.g., Syne, Cabinet Grotesk, Clash Display) |
148
+ | Quiet luxury | Fine-weight serif or high-tracking uppercase (e.g., Cormorant Garamond, Libre Baskerville) |
149
+
150
+ **Rules:**
151
+ - Use contrast in scale, weight, and rhythm to create hierarchy before adding more colors.
152
+ - Never use system fonts (Arial, Helvetica, Times) — always pick with intention.
153
+ - Two fonts maximum. One display + one body. A third only if very controlled.
154
+
155
+ ---
156
+
157
+ ## Color Behavior
158
+
159
+ - One strong accent is often enough. Neutrals do most of the structural work.
160
+ - Color guides attention — it should not paint every surface.
161
+ - Strong contrast can come from spacing and scale, not just saturated color.
162
+ - Trust-sensitive businesses (legal, medical, finance) need calm palettes even when layout is bold.
163
+ - If photography is strong, reduce color complexity — let the images carry the warmth.
164
+
165
+ **Custom palette rules:**
166
+ - Never use raw Tailwind palette colors (blue-500, gray-200, etc.) — always define custom values.
167
+ - Name colors semantically: `brand`, `accent`, `surface`, `text`, `muted`.
168
+ - Define in `tailwind.config.js` under `theme.extend.colors`.
169
+
170
+ ---
171
+
172
+ ## Motion Stance
173
+
174
+ | Level | When to use | What to use |
175
+ |---|---|---|
176
+ | None | Trust-sensitive, performance-critical | No animation |
177
+ | Subtle | Most business sites | Fade + translate on scroll reveal, 200–300ms |
178
+ | Moderate | Consumer brands, hospitality | Stagger reveals, gentle parallax, hover transitions |
179
+ | Expressive | Agencies, entertainment, playful brands | Page transitions, character animation, scroll-driven |
180
+
181
+ **Rules:**
182
+ - Motion should support pacing, reveal hierarchy, or reinforce affordances — not decorate.
183
+ - `transform` and `opacity` only — never animate layout properties (width, height, margin).
184
+ - Respect `prefers-reduced-motion` — wrap all animations in the media query.
185
+ - If the page relies on performance or trust, reduce animation density.
186
+
187
+ ---
188
+
189
+ ## Anti-Patterns
190
+
191
+ Avoid in all cases:
192
+ - Random mix of brutalism, glassmorphism, and luxury minimalism in the same page
193
+ - Default AI startup gradients (purple → blue, dark mode glow) unless clearly warranted
194
+ - Decorative visuals that weaken the CTA or bury practical information
195
+ - Style direction that contradicts the business category (bold agency aesthetic for a law firm)
196
+ - Fake UI, fake charts, fake product screenshots, fake reviews
197
+ - Overanimated entrance sequences that delay time to content
198
+
199
+ By direction:
200
+ - **SaaS**: fake dashboards, purple glow overload, feature-card sprawl with no story
201
+ - **Agency**: dramatic visuals with vague copy, no real proof of work
202
+ - **Local business**: beautiful design but phone, hours, and service area are buried
203
+ - **Hospitality**: atmospheric imagery but no menu, reservation link, or location
204
+
205
+ **Recovery moves when it feels generic:**
206
+ 1. Remove one full visual layer
207
+ 2. Choose one dominant type contrast and commit to it
208
+ 3. Reduce palette to neutrals + one accent
209
+ 4. Simplify motion to a single reveal family
210
+ 5. Move practical business information higher on the page