launchframe 0.2.3 → 0.2.5

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 (31) hide show
  1. package/README.md +147 -147
  2. package/bin/launchframe.mjs +315 -315
  3. package/package.json +1 -1
  4. package/template/.amazonq/cli-agents/clone-website.json +1 -1
  5. package/template/.amazonq/rules/project.md +180 -109
  6. package/template/.augment/commands/clone-website.md +33 -3
  7. package/template/.claude/skills/clone-website/SKILL.md +564 -534
  8. package/template/.claude/skills/marketing-landing-production/SKILL.md +36 -0
  9. package/template/.clinerules +180 -109
  10. package/template/.codex/skills/clone-website/SKILL.md +33 -3
  11. package/template/.continue/commands/clone-website.md +33 -3
  12. package/template/.continue/rules/project.md +180 -109
  13. package/template/.cursor/commands/clone-website.md +33 -3
  14. package/template/.cursor/commands/marketing-landing-production.md +31 -0
  15. package/template/.cursor/rules/project.mdc +25 -20
  16. package/template/.gemini/commands/clone-website.toml +33 -3
  17. package/template/.github/copilot-instructions.md +180 -109
  18. package/template/.github/skills/clone-website/SKILL.md +33 -3
  19. package/template/.opencode/commands/clone-website.md +33 -3
  20. package/template/.windsurf/workflows/clone-website.md +33 -3
  21. package/template/AGENTS.md +148 -89
  22. package/template/README.md +121 -120
  23. package/template/START_HERE.md +15 -15
  24. package/template/docs/design-references/playwright-example.com-1440px.png +0 -0
  25. package/template/docs/design-references/playwright-example.com-390px.png +0 -0
  26. package/template/docs/research/INSPECTION_GUIDE.md +121 -109
  27. package/template/package.json +63 -60
  28. package/template/scripts/recon-playwright.mjs +323 -0
  29. package/template/src/app/globals.css +93 -1
  30. package/template/src/app/layout.tsx +3 -2
  31. package/template/src/app/page.tsx +3 -7
@@ -42,6 +42,51 @@ Treat these as **first-class deliverables**, not polish at the end.
42
42
 
43
43
  1. **Raster & video** — Early in recon, inventory every `<img>`, `<picture>` / `<source>`, `<video>`, poster image, and meaningful `background-image` URL. Download into `public/` and reference **local paths** in specs and components. Hero bands and marketing sections often fail visually when a single layer is skipped.
44
44
  2. **Motion** — Match the target’s feel: easing, duration, stagger, scroll triggers. Prefer **`motion` from `framer-motion`** for entrance sequences, viewport-driven animations, shared-layout-style transitions, and anything beyond a one-off CSS transition. Note in each component spec whether behavior is **CSS-only** vs **Framer Motion**.
45
+ 3. **Illustration & brand marks** — Inline **SVG React components** (not only Lucide) for motifs that repeat across sections: logo glyph variants, dividers, grain/noise overlays, hero “scene” shapes, feature-card mini-compositions. Prefer **`currentColor`** + CSS variables so SVGs inherit theme tokens. For **pixel art**, keep a tight palette (4–8 fills), consistent pixel grid logic, and use `style={{ imageRendering: "pixelated" }}` on upscaled raster OR build pixel SVG paths intentionally — never blurry upscale.
46
+
47
+ ## Production polish for marketing landings *(imagery + motion density + brandability)*
48
+
49
+ Use this whenever the page is **authored or minimalist** (internal templates, rebranded clones that still feel flat, or targets that are mostly typography). “Looks OK” is not ship-ready — **production landings** stack multiple visual layers, choreographed motion, and recognizable brand cues.
50
+
51
+ ### Imagery density (every fold earns a visual idea)
52
+
53
+ - **Hero** — Never headline-only on white: add at least two of — soft gradient mesh / radial spotlight, subtle SVG grid or notebook lines, floating glyph cluster, ambient particle dots, masked photo or device frame with **real `public/` raster**, thin geometric frame that echoes the logo.
54
+ - **Between sections** — Optional SVG waves, angled cuts, or dashed “tape” strips so rhythm feels intentional.
55
+ - **Feature rows** — Replace generic placeholders (random shirts, blank boxes) with **purpose-built SVG scenes** tied to copy (capture → waveform + mic; workspace → windows + avatars; publish → export arrows + formats). Each card gets **foreground illustration + supporting UI chrome**, not one flat rectangle.
56
+ - **Social proof** — Logo strip may use grayscale marks; add **slow infinite marquee** or gentle opacity drift — motion sells “living product.”
57
+
58
+ ### Motion choreography *(ship several layers; respect `prefers-reduced-motion`)*
59
+
60
+ Default minimum bar for authored landings — implement with **`framer-motion`** unless matching CSS-only parity:
61
+
62
+ | Tier | What users feel | Typical implementation |
63
+ |------|-----------------|-------------------------|
64
+ | **A — Page load** | Hero headline, subcopy, CTAs, and hero art **stagger in** (opacity + `y`, or blur-in for type) | Parent `variants` + `staggerChildren`; durations 0.35–0.7s, ease `[0.22, 1, 0.36, 1]` or springs |
65
+ | **B — Scroll** | Sections **ease up / fade** on first viewport entry; grids **stagger cards** | `whileInView` + `viewport.once`; `margin: "-80px"` tweak so reveals feel early |
66
+ | **C — Looping ambient** | Logo strip marquee; gradient drift; subtle SVG stroke dashoffset loop; “thinking…” **typing caret** | CSS `@keyframes` or Framer `animate` repeat; keep amplitude **low** |
67
+ | **D — Interaction** | Buttons scale/shine on hover; cards **lift** (`translateY`, shadow); nav **backdrop blur / height** past threshold | `whileHover`, `whileTap`; scroll listener or Framer scroll hooks for nav |
68
+ | **E — Decorative depth** | Pointer parallax on hero cluster (2–4 layers at different strengths) OR scroll-linked `useTransform` | Small rotate/translate ranges (≤ 8px / ≤ 2deg) |
69
+
70
+ Always gate looping motion: **`useReducedMotion()`** from Framer Motion — swap loops for static frames and shorten entrances.
71
+
72
+ ### Brandability checklist *(distinctive, not generic SaaS gray)*
73
+
74
+ - **Motif thread** — One recurring visual hook (pen stroke, folded page corner, hub spark, pixel creature) reused in hero, favicon, OG image sketch, and one feature illustration.
75
+ - **Accent discipline** — Define **primary + secondary accent** in `:root` (even if mostly monochrome). Use accents on CTAs, SVG highlights, focus rings — not rainbow scatter.
76
+ - **Wordmark lockup** — SVG glyph + tracked type; provide **icon-only** variant for favicon / meta.
77
+ - **OG & SEO assets** — Generate **`public/seo/og.png`** (or route og image) that includes motif + product name — not a bare screenshot.
78
+
79
+ ### Where artifacts live
80
+
81
+ - **Raster/video** — `public/images/`, `public/videos/` (see `MEDIA_MANIFEST.md`).
82
+ - **SVG React illustrations** — Prefer `src/components/marketing/art/` or co-located `*-scene.tsx` modules; export named components (`HeroBackdrop`, `FeatureCaptureIllustration`).
83
+ - **Pixel art** — Same folder pattern; document palette in file header comment.
84
+
85
+ ### Spec requirement *(hand-off quality)*
86
+
87
+ When writing `docs/research/components/*.spec.md`, add sections **Illustration** (layers, SVG components, raster paths) and expand **Motion** with tier **A–E** coverage and reduced-motion fallback. Builders should not invent motion ad hoc — the spec states durations and triggers.
88
+
89
+ Invoke **`marketing-landing-production`** (`.claude/skills/marketing-landing-production/SKILL.md`) when the user asks for **prod-ready polish**, **more motion**, **SVG/pixel art**, or **stronger branding** on an existing landing.
45
90
 
46
91
  ## Commands
47
92
  - `npm run dev` — Start dev server
@@ -49,6 +94,17 @@ Treat these as **first-class deliverables**, not polish at the end.
49
94
  - `npm run lint` — ESLint check
50
95
  - `npm run typecheck` — TypeScript check
51
96
  - `npm run check` — Run lint + typecheck + build
97
+ - **`npm run recon`** — **Playwright** capture: full-page screenshots, `computed-snapshot.json`, `MEDIA_MANIFEST.md` (use when Browser MCP / Chrome DevTools MCP is broken or missing)
98
+ - **`npm run recon:headed`** — Same as `recon` but **headed** Chromium (often better for WAF / “Just a moment…” pages)
99
+
100
+ **Playwright browser binaries (once per machine):** `npx playwright install chromium`
101
+
102
+ ## When Browser MCP is down
103
+ Prefer **Playwright** for repeatable extraction in-repo — do **not** rely on Chrome DevTools MCP alone.
104
+
105
+ 1. Run **`npm run recon`** (or **`npm run recon:headed`** if headless hits a challenge page).
106
+ 2. Read **`docs/research/computed-snapshot.json`**, **`docs/research/MEDIA_MANIFEST.md`**, and **`docs/research/EXTRACTION_LIMITATIONS.md`** before writing specs.
107
+ 3. Fill **`scripts/download-assets.mjs`** from `MEDIA_MANIFEST.md` and run it to populate `public/images/` and `public/videos/`.
52
108
 
53
109
  ## Code Style
54
110
  - TypeScript strict mode, no `any`
@@ -60,6 +116,7 @@ Treat these as **first-class deliverables**, not polish at the end.
60
116
  ## Design Principles
61
117
  - **Images & video fidelity** — prefer real downloaded assets; preserve aspect ratio, `object-fit`, layering, and poster frames. Rebrand pass may **swap** URLs for IP-safe alternates but must keep layout identical.
62
118
  - **Motion fidelity** — timing and easing matter as much as color; use Framer Motion when CSS alone cannot match staggered or scroll-driven behavior.
119
+ - **Production landing density** — For authored/minimal pages, deliberately add **SVG illustration layers**, **pixel-art accents**, and **tiered motion (A–E)** per “Production polish” above; static monochrome layouts are incomplete unless the user explicitly wants extreme minimalism.
63
120
  - **Pixel-perfect emulation** — match the target's spacing, colors, typography exactly
64
121
  - **No personal aesthetic changes during emulation phase** — match 1:1 first, rebrand later
65
122
  - **Real content during extraction** — use actual text and assets from the target site so the clone scaffolds against real shapes
@@ -72,6 +129,7 @@ src/
72
129
  app/ # Next.js routes
73
130
  components/ # React components
74
131
  ui/ # shadcn/ui primitives
132
+ marketing/ # Landing sections + authored SVG scenes (`art/` recommended)
75
133
  icons.tsx # Extracted SVG icons as React components
76
134
  lib/
77
135
  utils.ts # cn() utility (shadcn)
@@ -92,113 +150,126 @@ scripts/ # Asset download scripts
92
150
  - When launching Claude Code agent teams, ALWAYS have each teammate work in their own worktree branch and merge everyone's work at the end, resolving any merge conflicts smartly since you are basically serving the orchestrator role and have full context to our goals, work given, work achieved, and desired outcomes.
93
151
  - After editing `AGENTS.md`, run `bash scripts/sync-agent-rules.sh` to regenerate platform-specific instruction files.
94
152
  - After editing `.claude/skills/clone-website/SKILL.md`, run `node scripts/sync-skills.mjs` to regenerate the skill for all platforms.
153
+ - After editing `.claude/skills/marketing-landing-production/SKILL.md`, update `.cursor/commands/marketing-landing-production.md` to match (Cursor command is maintained beside the Claude skill until sync-skills grows multi-skill support).
154
+
155
+ # Website Inspection Guide
156
+
157
+ ## Priority (read first): media & motion
158
+
159
+ Launchframe clones live pages for a **visual** result. Two things most often separate a convincing build from a hollow one:
160
+
161
+ ### 1. Images & video (do this before obsessing over utility classes)
162
+
163
+ - [ ] **Every `<img>`** — `src` / `srcset` / `currentSrc`, `sizes`, `loading`, `decoding`, `alt`, intrinsic dimensions
164
+ - [ ] **`<picture>` / `<source>`** — resolution switches, art direction, `type` (WebP/AVIF)
165
+ - [ ] **Every `<video>`** — `src` + nested `<source>`, **poster**, `autoplay`, `loop`, `muted`, `playsinline`, `controls`
166
+ - [ ] **Background images** — `background-image` on ancestors (hero stacks are often **layers** of img + gradient + PNG mockup)
167
+ - [ ] **Lazy / below-fold** — scroll the page once before asset discovery so `data-src` / lazy-loaded URLs resolve if the site uses them
168
+ - [ ] **Download** — mirror into `public/images/` and `public/videos/` with stable paths; list failures in `docs/research/EXTRACTION_LIMITATIONS.md`
169
+
170
+ If automation hits a bot wall, **do not pretend extraction succeeded** — capture what you can from successful fetches and document gaps.
171
+
172
+ ### 2. Motion (prefer Framer Motion in this repo)
173
+
174
+ - [ ] **Entrance** — fade/slide/scale on mount or on **scroll into view** (note threshold / `margin`)
175
+ - [ ] **Stagger** — children animating in sequence (hero bullets, card grids)
176
+ - [ ] **Scroll-linked** — progress, parallax, pinned sections (may combine with CSS `animation-timeline` or libs)
177
+ - [ ] **Gestures** — drag, pan, hover follow (often Framer Motion)
178
+ - [ ] **Implementation rule** — use **`framer-motion`** for anything beyond trivial single-property CSS `transition`. Record **duration, easing, delay, stagger**, and **trigger** (scroll, hover, tap) in specs.
179
+
180
+ ### 3. Illustration, pixel art & brand motifs *(production landings)*
181
+
182
+ When the reference page is **sparse** (mostly type + gray boxes) or after a **rebrand** the UI still reads generic, treat illustration as required inventory — not optional garnish.
183
+
184
+ - [ ] **Inline SVG** — hero shapes, dividers, card mini-scenes; note `viewBox`, whether fills use **`currentColor`**, and which CSS variables apply
185
+ - [ ] **Pixel art / sprite accents** — intentional palette (list hex fills), grid size, scaling strategy (`imageRendering`), animation frames if any
186
+ - [ ] **Motif thread** — recurring stroke/icon creature/grid that should echo across hero, OG sketch, favicon
187
+ - [ ] **Accent tokens** — beyond monochrome: primary/secondary accent roles for SVG strokes, CTAs, focus (extract or **define** in `:root` for authored pages)
188
+ - [ ] **Motion tiers A–E** — page-load stagger, scroll reveals + staggerChildren, looping ambient (marquee/caret), hover lifts, decorative parallax — document each with **reduced-motion** fallback (`prefers-reduced-motion`)
189
+
190
+ See **`AGENTS.md` → Production polish for marketing landings** for tier definitions and folder conventions (`src/components/marketing/art/`).
191
+
192
+ ---
193
+
194
+ ## How to Reverse-Engineer Any Website
195
+
196
+ This guide outlines what to capture when inspecting a target website via Chrome MCP or browser DevTools.
197
+
198
+ ## Phase 1: Visual Audit
199
+
200
+ ### Screenshots to Capture
201
+ - [ ] Every distinct page — desktop, tablet, mobile
202
+ - [ ] Dark mode variants (if applicable)
203
+ - [ ] Light mode variants (if applicable)
204
+ - [ ] Key interaction states (hover, active, open menus, modals)
205
+ - [ ] Loading/skeleton states
206
+ - [ ] Empty states
207
+ - [ ] Error states
208
+ - [ ] **Video frames** — capture a frame mid-play for reference if motion is subtle
209
+ - [ ] **Hero / full-bleed** — wide crops where raster layers are easy to miss
210
+
211
+ ### Design Tokens to Extract
212
+ - [ ] **Colors** — background, text (primary/secondary/muted), accent, border, hover, error, success, warning
213
+ - [ ] **Typography** — font family, sizes (h1-h6, body, caption, label), weights, line heights, letter spacing
214
+ - [ ] **Spacing** — padding/margin patterns (look for a scale: 4px, 8px, 12px, 16px, 24px, 32px, etc.)
215
+ - [ ] **Border radius** — buttons, cards, avatars, inputs
216
+ - [ ] **Shadows/elevation** — card shadows, dropdown shadows, modal overlay
217
+ - [ ] **Breakpoints** — when does the layout shift? (inspect with DevTools responsive mode)
218
+ - [ ] **Icons** — which icon library? custom SVGs? sizes?
219
+ - [ ] **Avatars** — sizes, shapes, fallback behavior
220
+ - [ ] **Buttons** — all variants (primary, secondary, ghost, icon-only, danger)
221
+ - [ ] **Inputs** — text fields, textareas, selects, checkboxes, toggles
222
+
223
+ ## Phase 2: Component Inventory
224
+
225
+ For each distinct UI component, document:
226
+ 1. **Name** — what would you call this component?
227
+ 2. **Structure** — what HTML elements / child components does it contain?
228
+ 3. **Variants** — does it have different sizes, colors, or states?
229
+ 4. **States** — default, hover, active, disabled, loading, error, empty
230
+ 5. **Responsive behavior** — how does it change at different breakpoints?
231
+ 6. **Interactions** — click, hover, focus, keyboard navigation
232
+ 7. **Animations** — transitions, entrance/exit, micro-interactions — **`framer-motion` vs CSS** and exact timing
233
+
234
+ ### Common Components to Look For
235
+ - Navigation (top bar, sidebar, bottom bar)
236
+ - Cards / list items
237
+ - Buttons and links
238
+ - Forms and inputs
239
+ - Modals and dialogs
240
+ - Dropdowns and menus
241
+ - Tabs and segmented controls
242
+ - Avatars and user badges
243
+ - Loading skeletons
244
+ - Toast notifications
245
+ - Tooltips and popovers
246
+ - **Video / Lottie / canvas** blocks (do not substitute with static mockups without documenting why)
247
+
248
+ ## Phase 3: Layout Architecture
249
+
250
+ - [ ] **Grid system** — CSS Grid? Flexbox? Fixed widths?
251
+ - [ ] **Column layout** — how many columns at each breakpoint?
252
+ - [ ] **Max-width** — main content area max-width
253
+ - [ ] **Sticky elements** — header, sidebar, floating buttons
254
+ - [ ] **Z-index layers** — navigation, modals, tooltips, overlays
255
+ - [ ] **Scroll behavior** — infinite scroll, pagination, virtual scrolling
256
+
257
+ ## Phase 4: Technical Stack Analysis
258
+
259
+ - [ ] **Framework** — React? Vue? Angular? Check `__NEXT_DATA__`, `__NUXT__`, `ng-version`
260
+ - [ ] **CSS approach** — Tailwind (utility classes), CSS Modules, Styled Components, Emotion, vanilla CSS
261
+ - [ ] **State management** — Redux (check DevTools), React Query, Zustand, Pinia
262
+ - [ ] **API patterns** — REST, GraphQL (check network tab for `/graphql` requests)
263
+ - [ ] **Font loading** — Google Fonts, self-hosted, system fonts
264
+ - [ ] **Image strategy** — CDN, lazy loading, srcset, WebP/AVIF — **mirror URLs you are allowed to fetch**
265
+ - [ ] **Animation library** — site may use GSAP, Lottie, Rive, or CSS only — **in the Next.js clone, default to Framer Motion** unless a different lib is required for parity
266
+
267
+ ## Phase 5: Documentation Output
95
268
 
96
- # Website Inspection Guide
97
-
98
- ## Priority (read first): media & motion
99
-
100
- Launchframe clones live pages for a **visual** result. Two things most often separate a convincing build from a hollow one:
101
-
102
- ### 1. Images & video (do this before obsessing over utility classes)
103
-
104
- - [ ] **Every `<img>`** — `src` / `srcset` / `currentSrc`, `sizes`, `loading`, `decoding`, `alt`, intrinsic dimensions
105
- - [ ] **`<picture>` / `<source>`** — resolution switches, art direction, `type` (WebP/AVIF)
106
- - [ ] **Every `<video>`** — `src` + nested `<source>`, **poster**, `autoplay`, `loop`, `muted`, `playsinline`, `controls`
107
- - [ ] **Background images** — `background-image` on ancestors (hero stacks are often **layers** of img + gradient + PNG mockup)
108
- - [ ] **Lazy / below-fold** — scroll the page once before asset discovery so `data-src` / lazy-loaded URLs resolve if the site uses them
109
- - [ ] **Download** — mirror into `public/images/` and `public/videos/` with stable paths; list failures in `docs/research/EXTRACTION_LIMITATIONS.md`
110
-
111
- If automation hits a bot wall, **do not pretend extraction succeeded** — capture what you can from successful fetches and document gaps.
112
-
113
- ### 2. Motion (prefer Framer Motion in this repo)
114
-
115
- - [ ] **Entrance** — fade/slide/scale on mount or on **scroll into view** (note threshold / `margin`)
116
- - [ ] **Stagger** — children animating in sequence (hero bullets, card grids)
117
- - [ ] **Scroll-linked** — progress, parallax, pinned sections (may combine with CSS `animation-timeline` or libs)
118
- - [ ] **Gestures** — drag, pan, hover follow (often Framer Motion)
119
- - [ ] **Implementation rule** — use **`framer-motion`** for anything beyond trivial single-property CSS `transition`. Record **duration, easing, delay, stagger**, and **trigger** (scroll, hover, tap) in specs.
120
-
121
- ---
122
-
123
- ## How to Reverse-Engineer Any Website
124
-
125
- This guide outlines what to capture when inspecting a target website via Chrome MCP or browser DevTools.
126
-
127
- ## Phase 1: Visual Audit
128
-
129
- ### Screenshots to Capture
130
- - [ ] Every distinct page — desktop, tablet, mobile
131
- - [ ] Dark mode variants (if applicable)
132
- - [ ] Light mode variants (if applicable)
133
- - [ ] Key interaction states (hover, active, open menus, modals)
134
- - [ ] Loading/skeleton states
135
- - [ ] Empty states
136
- - [ ] Error states
137
- - [ ] **Video frames** — capture a frame mid-play for reference if motion is subtle
138
- - [ ] **Hero / full-bleed** — wide crops where raster layers are easy to miss
139
-
140
- ### Design Tokens to Extract
141
- - [ ] **Colors** — background, text (primary/secondary/muted), accent, border, hover, error, success, warning
142
- - [ ] **Typography** — font family, sizes (h1-h6, body, caption, label), weights, line heights, letter spacing
143
- - [ ] **Spacing** — padding/margin patterns (look for a scale: 4px, 8px, 12px, 16px, 24px, 32px, etc.)
144
- - [ ] **Border radius** — buttons, cards, avatars, inputs
145
- - [ ] **Shadows/elevation** — card shadows, dropdown shadows, modal overlay
146
- - [ ] **Breakpoints** — when does the layout shift? (inspect with DevTools responsive mode)
147
- - [ ] **Icons** — which icon library? custom SVGs? sizes?
148
- - [ ] **Avatars** — sizes, shapes, fallback behavior
149
- - [ ] **Buttons** — all variants (primary, secondary, ghost, icon-only, danger)
150
- - [ ] **Inputs** — text fields, textareas, selects, checkboxes, toggles
151
-
152
- ## Phase 2: Component Inventory
153
-
154
- For each distinct UI component, document:
155
- 1. **Name** — what would you call this component?
156
- 2. **Structure** — what HTML elements / child components does it contain?
157
- 3. **Variants** — does it have different sizes, colors, or states?
158
- 4. **States** — default, hover, active, disabled, loading, error, empty
159
- 5. **Responsive behavior** — how does it change at different breakpoints?
160
- 6. **Interactions** — click, hover, focus, keyboard navigation
161
- 7. **Animations** — transitions, entrance/exit, micro-interactions — **`framer-motion` vs CSS** and exact timing
162
-
163
- ### Common Components to Look For
164
- - Navigation (top bar, sidebar, bottom bar)
165
- - Cards / list items
166
- - Buttons and links
167
- - Forms and inputs
168
- - Modals and dialogs
169
- - Dropdowns and menus
170
- - Tabs and segmented controls
171
- - Avatars and user badges
172
- - Loading skeletons
173
- - Toast notifications
174
- - Tooltips and popovers
175
- - **Video / Lottie / canvas** blocks (do not substitute with static mockups without documenting why)
176
-
177
- ## Phase 3: Layout Architecture
178
-
179
- - [ ] **Grid system** — CSS Grid? Flexbox? Fixed widths?
180
- - [ ] **Column layout** — how many columns at each breakpoint?
181
- - [ ] **Max-width** — main content area max-width
182
- - [ ] **Sticky elements** — header, sidebar, floating buttons
183
- - [ ] **Z-index layers** — navigation, modals, tooltips, overlays
184
- - [ ] **Scroll behavior** — infinite scroll, pagination, virtual scrolling
185
-
186
- ## Phase 4: Technical Stack Analysis
187
-
188
- - [ ] **Framework** — React? Vue? Angular? Check `__NEXT_DATA__`, `__NUXT__`, `ng-version`
189
- - [ ] **CSS approach** — Tailwind (utility classes), CSS Modules, Styled Components, Emotion, vanilla CSS
190
- - [ ] **State management** — Redux (check DevTools), React Query, Zustand, Pinia
191
- - [ ] **API patterns** — REST, GraphQL (check network tab for `/graphql` requests)
192
- - [ ] **Font loading** — Google Fonts, self-hosted, system fonts
193
- - [ ] **Image strategy** — CDN, lazy loading, srcset, WebP/AVIF — **mirror URLs you are allowed to fetch**
194
- - [ ] **Animation library** — site may use GSAP, Lottie, Rive, or CSS only — **in the Next.js clone, default to Framer Motion** unless a different lib is required for parity
195
-
196
- ## Phase 5: Documentation Output
197
-
198
- After inspection, create these files in `docs/research/`:
199
- 1. `DESIGN_TOKENS.md` — All extracted colors, typography, spacing
200
- 2. `COMPONENT_INVENTORY.md` — Every component with structure notes
201
- 3. **`MEDIA_MANIFEST.md`** — (recommended) Table of every image/video/poster URL → local `public/` path or “blocked”
202
- 4. `LAYOUT_ARCHITECTURE.md` — Page layouts, grid system, responsive behavior
203
- 5. `INTERACTION_PATTERNS.md` — Animations: **CSS vs Framer Motion**, transitions, hover states
204
- 6. `TECH_STACK_ANALYSIS.md` — What the site uses and our chosen equivalents (Framer Motion for React animation)
269
+ After inspection, create these files in `docs/research/`:
270
+ 1. `DESIGN_TOKENS.md` — All extracted colors, typography, spacing
271
+ 2. `COMPONENT_INVENTORY.md` Every component with structure notes
272
+ 3. **`MEDIA_MANIFEST.md`** — (recommended) Table of every image/video/poster URL → local `public/` path or “blocked”
273
+ 4. `LAYOUT_ARCHITECTURE.md` Page layouts, grid system, responsive behavior
274
+ 5. `INTERACTION_PATTERNS.md` — Animations: **CSS vs Framer Motion**, transitions, hover states
275
+ 6. `TECH_STACK_ANALYSIS.md` What the site uses and our chosen equivalents (Framer Motion for React animation)
@@ -36,7 +36,7 @@ If the user provides additional instructions (specific fidelity level, deeper cu
36
36
  ## Pre-Flight
37
37
 
38
38
  1. **Read `launchframe.config.json`** (see Step 0 above). After a fresh `npx launchframe` scaffold, proceed immediately — only echo `url`/`idea` for confirmation if the config looks wrong or the user asked to verify.
39
- 2. **Browser automation is required.** Check for available browser MCP tools (Chrome MCP, Playwright MCP, Browserbase MCP, Puppeteer MCP, etc.). Use whichever is available if multiple exist, prefer Chrome MCP. If none are detected, ask the user which browser tool they have and how to connect it. This skill cannot work without browser automation.
39
+ 2. **Browser automation.** Prefer an MCP (Chrome DevTools MCP, Playwright MCP, Browserbase MCP, etc.) when it is healthy. **If MCP is missing or in an error state, run `npm run recon` (Playwright)** — see `scripts/recon-playwright.mjs`. It writes `docs/research/computed-snapshot.json`, `docs/research/MEDIA_MANIFEST.md`, and full-page screenshots under `docs/design-references/`. Use `npm run recon:headed` if headless hits a WAF/challenge page. One-time install: `npx playwright install chromium`. Do not skip extraction — adapt the pipeline to the tools that work.
40
40
  3. Validate the resolved URL(s). Normalize and verify each is accessible via your browser MCP tool. If any are invalid, ask the user to correct `launchframe.config.json` (or pass an override) before proceeding.
41
41
  4. Verify the base project builds: `npm run build`. The Next.js + shadcn/ui + Tailwind v4 scaffold should already be in place. If not, tell the user to run `npm install` first.
42
42
  5. Create the output directories if they don't exist: `docs/research/`, `docs/research/components/`, `docs/design-references/`, `scripts/`. Plan `docs/research/MEDIA_MANIFEST.md` as soon as media is inventoried. For multiple clones, also prepare per-site folders like `docs/research/<hostname>/` and `docs/design-references/<hostname>/`.
@@ -50,7 +50,9 @@ These are the truths that separate a successful clone from a "close enough" mess
50
50
 
51
51
  **Raster & video are first-class.** Before you treat the page as “mostly typography,” run a dedicated **media inventory** (see `@docs/research/INSPECTION_GUIDE.md` Priority section): every `<img>`, `<picture>` / `<source>`, `<video>` (+ poster), and non-trivial `background-image`. Download to `public/images/` and `public/videos/` and write `docs/research/MEDIA_MANIFEST.md` (URL → local path, or `BLOCKED` + reason). Component specs MUST list concrete `public/...` paths; if you use a placeholder, say why in `docs/research/EXTRACTION_LIMITATIONS.md`. Never silently drop a hero layer, reel, or og visual.
52
52
 
53
- **Motion defaults to Framer Motion.** This template lists `framer-motion` as a dependency. After foundation tokens, ensure `import { motion } from "framer-motion"` (and related APIs: `useScroll`, `useTransform`, `AnimatePresence`, `LayoutGroup`) for: scroll-triggered reveals, staggered children, layout transitions, and gestures — anything beyond a trivial one-property CSS `transition`. In each spec file, add a **Motion** subsection: trigger, duration, easing, delay/stagger, and **implementation: CSS | framer-motion**. Prefer CSS only when it matches the target exactly without JS.
53
+ **Motion defaults to Framer Motion.** This template lists `framer-motion` as a dependency. After foundation tokens, ensure `import { motion } from "framer-motion"` (and related APIs: `useScroll`, `useTransform`, `AnimatePresence`, `LayoutGroup`, **`useReducedMotion`**) for: scroll-triggered reveals, staggered children, layout transitions, and gestures — anything beyond a trivial one-property CSS `transition`. In each spec file, add a **Motion** subsection: trigger, duration, easing, delay/stagger, **tier A–E coverage** (see `AGENTS.md` production polish table), reduced-motion fallback, and **implementation: CSS | framer-motion**. Prefer CSS only when it matches the target exactly without JS.
54
+
55
+ **Illustration & pixel art are production inputs.** Where the target (or post-rebrand layout) lacks convincing visuals, specs MUST still allocate **SVG illustration layers** — hero backdrop cluster, section separators, feature-card scenes tied to copy — using React SVG components (`currentColor` + theme vars). Pixel-art motifs require an explicit palette table in the spec. Do not ship ambiguous gray placeholders when `AGENTS.md` calls for production density on authored landings.
54
56
 
55
57
  ### 1. Completeness Beats Speed
56
58
 
@@ -364,10 +366,17 @@ For each section (or sub-component, if you're breaking it up), create a spec fil
364
366
  - **<Element>:** <property>: <before> → <after>, transition: <value>
365
367
 
366
368
  ## Motion (Framer Motion vs CSS)
369
+ - **Tiers A–E:** <which tiers apply — load stagger, scroll reveal, ambient loop, interaction lifts, decorative parallax — list triggers>
370
+ - **Reduced motion:** <what disables or simplifies when user prefers reduced motion>
367
371
  - **Entrance / scroll reveals:** <e.g. fade+translateY, staggerChildren — specify duration, easing, delay, viewport `once`/`margin`>
368
372
  - **Library:** <`framer-motion` | CSS-only — justify if CSS-only>
369
373
  - **Keyframes / springs:** <if any — match target curve>
370
374
 
375
+ ## Illustration & pixel art *(production uplift)*
376
+ - **SVG components:** <named exports, paths using currentColor vs fixed fills>
377
+ - **Pixel motif:** <palette hex table, grid, scaling — or N/A>
378
+ - **Motif thread:** <how illustration echoes logo / OG / favicon>
379
+
371
380
  ## Per-State Content (if applicable)
372
381
 
373
382
  ### State: "Featured"
@@ -463,6 +472,26 @@ What you must NOT change in this pass:
463
472
 
464
473
  After the rebrand pass, the codebase should look like the original site visually but read like the user's SaaS at a glance. Save a short `docs/research/REBRAND.md` summarizing the product name you chose, the headline rewrites, and any assets you swapped — so the user can audit what's clone-derived vs. authored.
465
474
 
475
+ ## Phase 4.6: Production uplift *(sparse references / user asks for prod polish)*
476
+
477
+ Run this pass when **any** of the following is true:
478
+
479
+ - The cloned reference is mostly typography with weak imagery (internal demos, minimalist SaaS shells).
480
+ - The user asks for **more motion**, **SVG / illustration**, **pixel art**, **brandability**, or **production-ready** marketing polish.
481
+ - Visual QA feels “correct but dead” — layout matches but nothing moves and cards use unrelated placeholders.
482
+
483
+ **Do not contradict pixel-perfect emulation when cloning a rich reference** — this phase *adds* density only where the brief allows uplift or the reference was inherently flat.
484
+
485
+ Checklist (mirror `AGENTS.md`):
486
+
487
+ 1. **Imagery** — Add layered hero treatment + purposeful SVG scenes per feature (swap nonsense placeholders). Prefer named components under `src/components/marketing/art/`.
488
+ 2. **Motion tiers** — Implement at minimum **A + B + one of C/D**, optionally **E**: staggered hero load, `whileInView` sections + card stagger, looping ambient (marquee / caret / SVG dash loop), hover lifts / nav scroll shrink, optional light parallax. Gate loops with **`useReducedMotion()`**.
489
+ 3. **Brand** — Establish motif thread + accent tokens in `:root`; refresh favicon / OG sketch to match.
490
+
491
+ Document deltas in `docs/research/PRODUCTION_UPLIFT.md` (what SVGs/motion/accent decisions shipped).
492
+
493
+ Invoke `.claude/skills/marketing-landing-production/SKILL.md` as a focused playbook for this pass.
494
+
466
495
  ## Phase 5: Visual QA Diff
467
496
 
468
497
  After assembly, do NOT declare the clone complete. Take side-by-side comparison screenshots:
@@ -491,7 +520,8 @@ Before dispatching ANY builder agent, verify you can check every box. If you can
491
520
  - [ ] For hover states: before/after values and transition timing are recorded
492
521
  - [ ] All images in the section are identified (including overlays and layered compositions)
493
522
  - [ ] Any `<video>` (and poster), Lottie, or canvas-driven hero is identified — not approximated as a static div
494
- - [ ] **Motion** subsection filled: CSS vs **framer-motion**, durations, easings, stagger, scroll triggers
523
+ - [ ] **Motion** subsection filled: tiers **A–E** coverage (see `AGENTS.md`), CSS vs **framer-motion**, durations, easings, stagger, scroll triggers, **reduced-motion** fallback
524
+ - [ ] **Illustration** subsection filled when uplift applies: SVG components / palette / motif thread — or explicit **N/A** with justification only on strict clone parity jobs
495
525
  - [ ] Responsive behavior is documented for at least desktop and mobile
496
526
  - [ ] Text content is verbatim from the site, not paraphrased
497
527
  - [ ] The builder prompt is under ~150 lines of spec; if over, the section needs to be split
@@ -0,0 +1,31 @@
1
+ <!-- Mirrors .claude/skills/marketing-landing-production/SKILL.md — edit skill first, then sync this body if drift occurs. -->
2
+
3
+ # Marketing Landing — Production Polish
4
+
5
+ You are upgrading a **marketing landing** so it feels shipped — not “fine for a demo.” Read **`AGENTS.md` → Production polish for marketing landings** first; treat this command as the executable checklist.
6
+
7
+ ## When to run
8
+
9
+ - Clone/rebrand finished but the page still reads **flat** (mostly black text on white + gray placeholders).
10
+ - User explicitly wants **more images**, **motion**, **SVG / illustration**, **pixel art**, **brandability**, **production-ready**.
11
+ - Feature cards use **off-topic filler art** — replace with scenes tied to copy.
12
+
13
+ ## Hard requirements
14
+
15
+ 1. **`framer-motion`** — staggered hero load (**tier A**), scroll reveals + nested staggers (**tier B**), at least **one** ambient loop (**tier C**: marquee, typing caret, SVG dash drift, gradient pulse — pick what fits brand).
16
+ 2. **Interaction polish (tier D)** — measurable hover/tap on primary surfaces (buttons, cards): subtle lift, shadow ramp, scale ≤ 1.02.
17
+ 3. **Decorative depth (tier E, optional)** — light pointer parallax **or** scroll-linked transforms; keep translation ≤ ~8px and rotation ≤ ~2deg.
18
+ 4. **`useReducedMotion()`** — disable or simplify looping motion and shorten entrances when the user prefers reduced motion.
19
+ 5. **SVG illustration layers** — dedicated React components (prefer `src/components/marketing/art/`); use **`currentColor`** where possible so theme tokens drive strokes/fills.
20
+ 6. **Pixel art** — if requested: declare palette (hex table in component comment), crisp scaling (`imageRendering: "pixelated"` for intentional upscale), consistent grid logic.
21
+ 7. **Brand spine** — motif repeats once in hero + once in a card or footer glyph cluster; define **accent CSS variables** if the page is only monochrome gray today.
22
+ 8. **Artifacts** — write **`docs/research/PRODUCTION_UPLIFT.md`**: bullets for SVG modules added, motion tiers shipped, accent tokens, OG/favicon edits.
23
+
24
+ ## Verification
25
+
26
+ - `npm run build` passes.
27
+ - Lighthouse/visual sanity: no layout shift explosions from animations; loops are subtle at default amplitude.
28
+
29
+ ## Out of scope unless asked
30
+
31
+ Backend, CMS wiring, analytics, full accessibility audit beyond motion preferences.
@@ -1,20 +1,25 @@
1
- ---
2
- description: Launchframe — open folder, say "Build it", full clone + rebrand pipeline
3
- alwaysApply: true
4
- ---
5
-
6
- This is a **Launchframe** project: `launchframe.config.json` holds the target `url` and SaaS `idea`. `AGENTS.md` is the extended source of truth.
7
-
8
- ## Shorthand (what users actually type)
9
-
10
- When the user says **Build it**, **Go**, **Ship it**, **Clone the site**, **Run launchframe**, or similar, with **no** new URL or idea in the same message:
11
-
12
- 1. Read `launchframe.config.json` first (authoritative `url` + `idea`).
13
- 2. Execute the **full** workflow described in `AGENTS.md` and in `.cursor/commands/clone-website.md` (recon → foundation → component specs → build → SaaS rebrand pass → assembly → QA).
14
- 3. Continue until `npm run build` passes unless the user stops you.
15
-
16
- Do **not** ask the user to re-type the URL or idea unless the config is missing or broken. Optional: use **`/clone-website`** as the explicit slash-command alias.
17
-
18
- ## Browser automation
19
-
20
- If no Browser MCP is available, use Playwright or another local browser the user has — and document limits (e.g. Cloudflare) in `docs/research/EXTRACTION_LIMITATIONS.md` when the real page is not reachable.
1
+ ---
2
+ description: Launchframe — open folder, say "Build it", full clone + rebrand pipeline
3
+ alwaysApply: true
4
+ ---
5
+
6
+ This is a **Launchframe** project: `launchframe.config.json` holds the target `url` and SaaS `idea`. `AGENTS.md` is the extended source of truth.
7
+
8
+ ## Shorthand (what users actually type)
9
+
10
+ When the user says **Build it**, **Go**, **Ship it**, **Clone the site**, **Run launchframe**, or similar, with **no** new URL or idea in the same message:
11
+
12
+ 1. Read `launchframe.config.json` first (authoritative `url` + `idea`).
13
+ 2. Execute the **full** workflow described in `AGENTS.md` and in `.cursor/commands/clone-website.md` (recon → foundation → component specs → build → SaaS rebrand pass → assembly → QA).
14
+ 3. Continue until `npm run build` passes unless the user stops you.
15
+
16
+ Do **not** ask the user to re-type the URL or idea unless the config is missing or broken. Optional slash commands:
17
+
18
+ - **`/clone-website`** — full recon → clone → rebrand pipeline (`launchframe.config.json`).
19
+ - **`/marketing-landing-production`** — production polish pass: SVG illustration density, pixel-art accents, choreographed motion tiers A–E, accent tokens, OG/favicon cohesion (see `AGENTS.md`).
20
+
21
+ ## Browser automation
22
+
23
+ If no Browser MCP is available **or Chrome DevTools MCP is in an error state**, run **`npm run recon`** (Playwright) — then continue the pipeline from `docs/research/computed-snapshot.json` and `MEDIA_MANIFEST.md`. Use **`npm run recon:headed`** for tough WAF pages. Install browsers once: **`npx playwright install chromium`**.
24
+
25
+ If Playwright still hits a challenge page, document it in **`docs/research/EXTRACTION_LIMITATIONS.md`** and fall back only as a last resort.
@@ -40,7 +40,7 @@ If the user provides additional instructions (specific fidelity level, deeper cu
40
40
  ## Pre-Flight
41
41
 
42
42
  1. **Read `launchframe.config.json`** (see Step 0 above). After a fresh `npx launchframe` scaffold, proceed immediately — only echo `url`/`idea` for confirmation if the config looks wrong or the user asked to verify.
43
- 2. **Browser automation is required.** Check for available browser MCP tools (Chrome MCP, Playwright MCP, Browserbase MCP, Puppeteer MCP, etc.). Use whichever is available if multiple exist, prefer Chrome MCP. If none are detected, ask the user which browser tool they have and how to connect it. This skill cannot work without browser automation.
43
+ 2. **Browser automation.** Prefer an MCP (Chrome DevTools MCP, Playwright MCP, Browserbase MCP, etc.) when it is healthy. **If MCP is missing or in an error state, run `npm run recon` (Playwright)** — see `scripts/recon-playwright.mjs`. It writes `docs/research/computed-snapshot.json`, `docs/research/MEDIA_MANIFEST.md`, and full-page screenshots under `docs/design-references/`. Use `npm run recon:headed` if headless hits a WAF/challenge page. One-time install: `npx playwright install chromium`. Do not skip extraction — adapt the pipeline to the tools that work.
44
44
  3. Validate the resolved URL(s). Normalize and verify each is accessible via your browser MCP tool. If any are invalid, ask the user to correct `launchframe.config.json` (or pass an override) before proceeding.
45
45
  4. Verify the base project builds: `npm run build`. The Next.js + shadcn/ui + Tailwind v4 scaffold should already be in place. If not, tell the user to run `npm install` first.
46
46
  5. Create the output directories if they don't exist: `docs/research/`, `docs/research/components/`, `docs/design-references/`, `scripts/`. Plan `docs/research/MEDIA_MANIFEST.md` as soon as media is inventoried. For multiple clones, also prepare per-site folders like `docs/research/<hostname>/` and `docs/design-references/<hostname>/`.
@@ -54,7 +54,9 @@ These are the truths that separate a successful clone from a "close enough" mess
54
54
 
55
55
  **Raster & video are first-class.** Before you treat the page as “mostly typography,” run a dedicated **media inventory** (see `@docs/research/INSPECTION_GUIDE.md` Priority section): every `<img>`, `<picture>` / `<source>`, `<video>` (+ poster), and non-trivial `background-image`. Download to `public/images/` and `public/videos/` and write `docs/research/MEDIA_MANIFEST.md` (URL → local path, or `BLOCKED` + reason). Component specs MUST list concrete `public/...` paths; if you use a placeholder, say why in `docs/research/EXTRACTION_LIMITATIONS.md`. Never silently drop a hero layer, reel, or og visual.
56
56
 
57
- **Motion defaults to Framer Motion.** This template lists `framer-motion` as a dependency. After foundation tokens, ensure `import { motion } from "framer-motion"` (and related APIs: `useScroll`, `useTransform`, `AnimatePresence`, `LayoutGroup`) for: scroll-triggered reveals, staggered children, layout transitions, and gestures — anything beyond a trivial one-property CSS `transition`. In each spec file, add a **Motion** subsection: trigger, duration, easing, delay/stagger, and **implementation: CSS | framer-motion**. Prefer CSS only when it matches the target exactly without JS.
57
+ **Motion defaults to Framer Motion.** This template lists `framer-motion` as a dependency. After foundation tokens, ensure `import { motion } from "framer-motion"` (and related APIs: `useScroll`, `useTransform`, `AnimatePresence`, `LayoutGroup`, **`useReducedMotion`**) for: scroll-triggered reveals, staggered children, layout transitions, and gestures — anything beyond a trivial one-property CSS `transition`. In each spec file, add a **Motion** subsection: trigger, duration, easing, delay/stagger, **tier A–E coverage** (see `AGENTS.md` production polish table), reduced-motion fallback, and **implementation: CSS | framer-motion**. Prefer CSS only when it matches the target exactly without JS.
58
+
59
+ **Illustration & pixel art are production inputs.** Where the target (or post-rebrand layout) lacks convincing visuals, specs MUST still allocate **SVG illustration layers** — hero backdrop cluster, section separators, feature-card scenes tied to copy — using React SVG components (`currentColor` + theme vars). Pixel-art motifs require an explicit palette table in the spec. Do not ship ambiguous gray placeholders when `AGENTS.md` calls for production density on authored landings.
58
60
 
59
61
  ### 1. Completeness Beats Speed
60
62
 
@@ -368,10 +370,17 @@ For each section (or sub-component, if you're breaking it up), create a spec fil
368
370
  - **<Element>:** <property>: <before> → <after>, transition: <value>
369
371
 
370
372
  ## Motion (Framer Motion vs CSS)
373
+ - **Tiers A–E:** <which tiers apply — load stagger, scroll reveal, ambient loop, interaction lifts, decorative parallax — list triggers>
374
+ - **Reduced motion:** <what disables or simplifies when user prefers reduced motion>
371
375
  - **Entrance / scroll reveals:** <e.g. fade+translateY, staggerChildren — specify duration, easing, delay, viewport `once`/`margin`>
372
376
  - **Library:** <`framer-motion` | CSS-only — justify if CSS-only>
373
377
  - **Keyframes / springs:** <if any — match target curve>
374
378
 
379
+ ## Illustration & pixel art *(production uplift)*
380
+ - **SVG components:** <named exports, paths using currentColor vs fixed fills>
381
+ - **Pixel motif:** <palette hex table, grid, scaling — or N/A>
382
+ - **Motif thread:** <how illustration echoes logo / OG / favicon>
383
+
375
384
  ## Per-State Content (if applicable)
376
385
 
377
386
  ### State: "Featured"
@@ -467,6 +476,26 @@ What you must NOT change in this pass:
467
476
 
468
477
  After the rebrand pass, the codebase should look like the original site visually but read like the user's SaaS at a glance. Save a short `docs/research/REBRAND.md` summarizing the product name you chose, the headline rewrites, and any assets you swapped — so the user can audit what's clone-derived vs. authored.
469
478
 
479
+ ## Phase 4.6: Production uplift *(sparse references / user asks for prod polish)*
480
+
481
+ Run this pass when **any** of the following is true:
482
+
483
+ - The cloned reference is mostly typography with weak imagery (internal demos, minimalist SaaS shells).
484
+ - The user asks for **more motion**, **SVG / illustration**, **pixel art**, **brandability**, or **production-ready** marketing polish.
485
+ - Visual QA feels “correct but dead” — layout matches but nothing moves and cards use unrelated placeholders.
486
+
487
+ **Do not contradict pixel-perfect emulation when cloning a rich reference** — this phase *adds* density only where the brief allows uplift or the reference was inherently flat.
488
+
489
+ Checklist (mirror `AGENTS.md`):
490
+
491
+ 1. **Imagery** — Add layered hero treatment + purposeful SVG scenes per feature (swap nonsense placeholders). Prefer named components under `src/components/marketing/art/`.
492
+ 2. **Motion tiers** — Implement at minimum **A + B + one of C/D**, optionally **E**: staggered hero load, `whileInView` sections + card stagger, looping ambient (marquee / caret / SVG dash loop), hover lifts / nav scroll shrink, optional light parallax. Gate loops with **`useReducedMotion()`**.
493
+ 3. **Brand** — Establish motif thread + accent tokens in `:root`; refresh favicon / OG sketch to match.
494
+
495
+ Document deltas in `docs/research/PRODUCTION_UPLIFT.md` (what SVGs/motion/accent decisions shipped).
496
+
497
+ Invoke `.claude/skills/marketing-landing-production/SKILL.md` as a focused playbook for this pass.
498
+
470
499
  ## Phase 5: Visual QA Diff
471
500
 
472
501
  After assembly, do NOT declare the clone complete. Take side-by-side comparison screenshots:
@@ -495,7 +524,8 @@ Before dispatching ANY builder agent, verify you can check every box. If you can
495
524
  - [ ] For hover states: before/after values and transition timing are recorded
496
525
  - [ ] All images in the section are identified (including overlays and layered compositions)
497
526
  - [ ] Any `<video>` (and poster), Lottie, or canvas-driven hero is identified — not approximated as a static div
498
- - [ ] **Motion** subsection filled: CSS vs **framer-motion**, durations, easings, stagger, scroll triggers
527
+ - [ ] **Motion** subsection filled: tiers **A–E** coverage (see `AGENTS.md`), CSS vs **framer-motion**, durations, easings, stagger, scroll triggers, **reduced-motion** fallback
528
+ - [ ] **Illustration** subsection filled when uplift applies: SVG components / palette / motif thread — or explicit **N/A** with justification only on strict clone parity jobs
499
529
  - [ ] Responsive behavior is documented for at least desktop and mobile
500
530
  - [ ] Text content is verbatim from the site, not paraphrased
501
531
  - [ ] The builder prompt is under ~150 lines of spec; if over, the section needs to be split