launchframe 0.2.4 → 0.2.6

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.
@@ -0,0 +1,47 @@
1
+ ---
2
+ name: marketing-social-proof-motion
3
+ description: Names recognizable companies in marketing surfaces, ships logo strips and integration grids with lawful logo marks or bespoke generated imagery, and treats motion as a first-class credibility signal (marquee, staggers, scroll choreography). Use for social proof, “trusted by” bands, integrations/partners pages, comparison rails, or when the user asks for third-party mentions, logos, generated badges, or animation-heavy proof sections.
4
+ argument-hint: "[optional e.g. hero integrations | logo strip | testimonial rail]"
5
+ user-invocable: true
6
+ ---
7
+
8
+ # Marketing social proof, logos & motion
9
+
10
+ Ship sections that **feel alive**: named companies, visible marks, and **layered animation**. Generic gray blobs and static stacks fail this skill.
11
+
12
+ ## Named companies & copy
13
+
14
+ - **Name real companies** where they strengthen the story: integrations (“Works with Slack, Salesforce…”), ecosystems, categories, or illustrative comparables the user allows.
15
+ - **Do not invent endorsements.** Prefer truthful framings — “integrations,” “compatible with,” “shared stack,” “customers like” — unless the user supplied verified quotes/customers.
16
+ - **Keep lists purposeful.** Match companies to `launchframe.config.json#idea` when present; avoid unrelated mega-brand name-dropping.
17
+
18
+ ## Logo marks & imagery
19
+
20
+ - **Prefer real marks** when implementation-ready: monochrome SVG or PNG from vendor press/media kits, neutral compatibility strips, or OSS icon sets where license permits. Normalize to one visual system (single height, consistent padding, grayscale or duotone).
21
+ - **Store assets** under `public/images/logos/` or `public/images/partners/` with predictable filenames; reference **local paths** in components — no hotlinked SVGs from third-party CDNs in production UI.
22
+ - **If a mark is missing, blocked, or unclear:**
23
+ - Generate **original** imagery (image-generation tool or hand-authored SVG) — illustrated tiles, abstract glyphs, or metaphor icons tied to the **idea** — **not** counterfeit logos.
24
+ - Or ship **clean text lockups** (company wordmark as styled type) where safer than guessing trademark artwork.
25
+
26
+ ## Motion emphasis (non-negotiable bar)
27
+
28
+ Motion sells credibility — implement several layers using **`framer-motion`** + CSS loops where appropriate; honor **`prefers-reduced-motion`**.
29
+
30
+ | Layer | Goal | Typical implementation |
31
+ |-------|------|-------------------------|
32
+ | **Entrance** | Logos/testimonials **stagger in** | Parent `variants` + `staggerChildren`; opacity + `y` or blur-in on type |
33
+ | **Scroll** | Proof bands **ease up / fade** on first view | `whileInView` + `viewport.once`; sensible `margin` so reveals feel early |
34
+ | **Ambient** | Strip feels “live” | **Infinite marquee** (slow), gradient drift, subtle opacity pulse on logos |
35
+ | **Hover / focus** | Cards lift; logos brighten | `whileHover` / CSS transitions on transforms + shadow |
36
+ | **Depth** | Premium polish | Light pointer **parallax** on hero/logo cluster (small ranges) or scroll-linked `useTransform` |
37
+
38
+ Also align tier **A–E** choreography and reduced-motion fallbacks described in **`AGENTS.md`** (Production polish → Motion choreography).
39
+
40
+ ## Hand-off checklist
41
+
42
+ - [ ] Companies named in copy match user intent and truthful framing
43
+ - [ ] Every logo path documented; placeholders explained if generated
44
+ - [ ] At least **two** motion layers beyond a single fade (e.g., stagger + marquee, or scroll reveal + hover lift)
45
+ - [ ] Reduced-motion path removes loops and tightens entrances
46
+
47
+ When cloning an existing page, **extract** logo SVGs/rasters like any other asset; when authoring from scratch, follow this skill instead of shipping motionless filler.
@@ -38,6 +38,59 @@ Treat these as **first-class deliverables**, not polish at the end.
38
38
 
39
39
  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.
40
40
  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**.
41
+ 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.
42
+
43
+ ## Production polish for marketing landings *(idea-tailored visuals + motion + brand)*
44
+
45
+ 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 cues that clearly belong to **this** product (`launchframe.config.json#idea`), not any SaaS.
46
+
47
+ ### Idea-tailored imagery *(uniqueness bar)*
48
+
49
+ Generic decoration fails review. Apply this to **every** hero composition, feature-card illustration, OG image sketch, and major `public/` marketing raster.
50
+
51
+ 1. **Derive metaphors from the idea** — Read `idea` (and product name). List 3–6 concrete nouns/verbs the product owns (e.g. voice → waveform, mic; notes → folded page, margin line; sync → paired arrows). Every bespoke visual must trace back to that list — **not** interchangeable clipart (random apparel, unrelated lifestyle objects, vague “business” silhouettes unless the idea demands them).
52
+ 2. **Could this ship on another site unchanged?** If yes, redesign until **no** — different silhouette story, palette accent, or composition so the asset “only fits” this narrative.
53
+ 3. **One tie-in sentence per asset** — In specs or `docs/research/REBRAND.md`, each image/SVG scene gets **Idea tie-in:** `<why this belongs to this product>`.
54
+ 4. **Prefer authored scenes** — Custom SVG narratives (several shapes telling one moment), optional pixel mascot **on-brand** for the category, or composed raster under `public/images/marketing/` when illustration needs texture. Lucide-only piles and neutral blobs are **last resort**, not default.
55
+ 5. **Distinct accents** — Pick accent hues/shapes suggested by the idea’s personality (precise studio vs warm companion vs rugged utility); avoid default gray-only SaaS anonymity unless the brief is explicitly brutalist.
56
+
57
+ ### Imagery density (every fold earns a visual idea)
58
+
59
+ - **Hero** — Never headline-only on white: add at least two of — soft gradient mesh / radial spotlight, **idea-specific** SVG cluster (metaphors from the list above), notebook/grid lines when the idea is docs, waveform device frame when the idea is capture, masked **purpose-built** raster in `public/images/marketing/`, geometric frame echoing **this** logo shape.
60
+ - **Between sections** — Optional dividers whose pattern/stroke **echoes the product motif** (not a stock wave).
61
+ - **Feature rows** — Each card illustration is a **different** moment in the same visual language (shared stroke weight, accent, or grid) — all still **idea-native** (e.g. capture → transcript lines; workspace → shared cursors; publish → export channels). No unrelated filler.
62
+ - **Social proof** — Logo strip may use grayscale marks; add **slow infinite marquee** or gentle opacity drift — motion sells “living product.”
63
+
64
+ ### Motion choreography *(ship several layers; respect `prefers-reduced-motion`)*
65
+
66
+ Default minimum bar for authored landings — implement with **`framer-motion`** unless matching CSS-only parity:
67
+
68
+ | Tier | What users feel | Typical implementation |
69
+ |------|-----------------|-------------------------|
70
+ | **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 |
71
+ | **B — Scroll** | Sections **ease up / fade** on first viewport entry; grids **stagger cards** | `whileInView` + `viewport.once`; `margin: "-80px"` tweak so reveals feel early |
72
+ | **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** |
73
+ | **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 |
74
+ | **E — Decorative depth** | Pointer parallax on hero cluster (2–4 layers at different strengths) OR scroll-linked `useTransform` | Small rotate/translate ranges (≤ 8px / ≤ 2deg) |
75
+
76
+ Always gate looping motion: **`useReducedMotion()`** from Framer Motion — swap loops for static frames and shorten entrances.
77
+
78
+ ### Brandability checklist *(distinctive, not generic SaaS gray)*
79
+
80
+ - **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.
81
+ - **Accent discipline** — Define **primary + secondary accent** in `:root` (even if mostly monochrome). Use accents on CTAs, SVG highlights, focus rings — not rainbow scatter.
82
+ - **Wordmark lockup** — SVG glyph + tracked type; provide **icon-only** variant for favicon / meta.
83
+ - **OG & SEO assets** — Generate **`public/seo/og.png`** (or route og image) that includes motif + product name — not a bare screenshot.
84
+
85
+ ### Where artifacts live
86
+
87
+ - **Raster/video** — `public/images/`, `public/videos/` (see `MEDIA_MANIFEST.md`).
88
+ - **SVG React illustrations** — Prefer `src/components/marketing/art/` or co-located `*-scene.tsx` modules; export named components (`HeroBackdrop`, `FeatureCaptureIllustration`).
89
+ - **Pixel art** — Same folder pattern; document palette in file header comment.
90
+
91
+ ### Spec requirement *(hand-off quality)*
92
+
93
+ When writing `docs/research/components/*.spec.md`, add sections **Illustration** (**Idea tie-in** per asset, 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.
41
94
 
42
95
  ## Commands
43
96
  - `npm run dev` — Start dev server
@@ -45,7 +98,7 @@ Treat these as **first-class deliverables**, not polish at the end.
45
98
  - `npm run lint` — ESLint check
46
99
  - `npm run typecheck` — TypeScript check
47
100
  - `npm run check` — Run lint + typecheck + build
48
- - **`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)
101
+ - **`npm run recon`** — **Playwright**: stabilized **full-document** scrolling at **desktop + mobile**, merged **`computed-snapshot.json`** + **`MEDIA_MANIFEST.md`**, **full-page** screenshots under `docs/design-references/` (use when Browser MCP / Chrome DevTools MCP is broken or missing)
49
102
  - **`npm run recon:headed`** — Same as `recon` but **headed** Chromium (often better for WAF / “Just a moment…” pages)
50
103
 
51
104
  **Playwright browser binaries (once per machine):** `npx playwright install chromium`
@@ -53,6 +106,10 @@ Treat these as **first-class deliverables**, not polish at the end.
53
106
  ## When Browser MCP is down
54
107
  Prefer **Playwright** for repeatable extraction in-repo — do **not** rely on Chrome DevTools MCP alone.
55
108
 
109
+ ### Full landing coverage (agents + automation)
110
+
111
+ Whether using MCP or Playwright, extraction must cover the **entire visible landing** (hero → footer): slow-scroll until lazy content settles, then **`fullPage`** screenshots — never treat “what fits in one viewport” as sufficient for inventory or specs.
112
+
56
113
  1. Run **`npm run recon`** (or **`npm run recon:headed`** if headless hits a challenge page).
57
114
  2. Read **`docs/research/computed-snapshot.json`**, **`docs/research/MEDIA_MANIFEST.md`**, and **`docs/research/EXTRACTION_LIMITATIONS.md`** before writing specs.
58
115
  3. Fill **`scripts/download-assets.mjs`** from `MEDIA_MANIFEST.md` and run it to populate `public/images/` and `public/videos/`.
@@ -67,6 +124,8 @@ Prefer **Playwright** for repeatable extraction in-repo — do **not** rely on C
67
124
  ## Design Principles
68
125
  - **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.
69
126
  - **Motion fidelity** — timing and easing matter as much as color; use Framer Motion when CSS alone cannot match staggered or scroll-driven behavior.
127
+ - **Idea-specific imagery** — Marketing art (SVG, raster, OG) must be **tailored to `launchframe.config.json#idea`**: explicit metaphors, per-asset **Idea tie-in** notes, and **no interchangeable filler** that could belong to any generic SaaS.
128
+ - **Production landing density** — For authored/minimal pages, deliberately add **idea-specific** illustration (not generic SaaS filler), **pixel-art accents** when they reinforce the metaphor, and **tiered motion (A–E)** per “Production polish” above; static monochrome layouts are incomplete unless the user explicitly wants extreme minimalism.
70
129
  - **Pixel-perfect emulation** — match the target's spacing, colors, typography exactly
71
130
  - **No personal aesthetic changes during emulation phase** — match 1:1 first, rebrand later
72
131
  - **Real content during extraction** — use actual text and assets from the target site so the clone scaffolds against real shapes
@@ -79,6 +138,7 @@ src/
79
138
  app/ # Next.js routes
80
139
  components/ # React components
81
140
  ui/ # shadcn/ui primitives
141
+ marketing/ # Landing sections + authored SVG scenes (`art/` recommended)
82
142
  icons.tsx # Extracted SVG icons as React components
83
143
  lib/
84
144
  utils.ts # cn() utility (shadcn)
@@ -125,6 +185,20 @@ If automation hits a bot wall, **do not pretend extraction succeeded** — captu
125
185
  - [ ] **Gestures** — drag, pan, hover follow (often Framer Motion)
126
186
  - [ ] **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.
127
187
 
188
+ ### 3. Idea-tailored illustration & motifs *(production landings)*
189
+
190
+ When the reference page is **sparse** (mostly type + gray boxes) or after a **rebrand** the UI still reads generic, illustration is required — and it must be **unique to the SaaS idea** (`launchframe.config.json#idea`), not reusable wallpaper.
191
+
192
+ - [ ] **Metaphor list** — 3–6 nouns/verbs derived from `idea`; every bespoke asset maps to ≥ one entry
193
+ - [ ] **Uniqueness check** — If the scene works unchanged for another product category, revise
194
+ - [ ] **Inline SVG** — hero shapes, dividers, card mini-scenes; note `viewBox`, **`currentColor`** vs fixed fills, **Idea tie-in** sentence per asset
195
+ - [ ] **Pixel art / sprites** — only when character reinforces the metaphor; palette hex table; `imageRendering` / grid discipline
196
+ - [ ] **Motif thread** — recurring element echoing hero + OG + favicon **for this product**, not a random geometric pattern
197
+ - [ ] **Accent tokens** — primary/secondary roles aligned with idea personality (extract from reference or define in `:root`)
198
+ - [ ] **Motion tiers A–E** — document with **reduced-motion** fallback (`prefers-reduced-motion`)
199
+
200
+ See **`AGENTS.md` → Production polish for marketing landings** for tier definitions and folders (`src/components/marketing/art/`, `public/images/marketing/`).
201
+
128
202
  ---
129
203
 
130
204
  ## How to Reverse-Engineer Any Website
@@ -39,7 +39,7 @@ If the user provides additional instructions (specific fidelity level, deeper cu
39
39
  ## Pre-Flight
40
40
 
41
41
  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.
42
- 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.
42
+ 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 performs **stabilized full-document scrolling** at desktop and mobile, writes merged **`computed-snapshot.json`** + **`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.
43
43
  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.
44
44
  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.
45
45
  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>/`.
@@ -53,7 +53,9 @@ These are the truths that separate a successful clone from a "close enough" mess
53
53
 
54
54
  **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.
55
55
 
56
- **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.
56
+ **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.
57
+
58
+ **Illustration & pixel art are production inputs.** Where the target (or post-rebrand layout) lacks convincing visuals, specs MUST allocate **idea-tailored SVG scenes** — metaphors drawn from `launchframe.config.json#idea`, documented with **Idea tie-in** per asset — not generic gray placeholders or unrelated clipart. Pixel-art motifs require concept justification plus palette table in the spec.
57
59
 
58
60
  ### 1. Completeness Beats Speed
59
61
 
@@ -140,10 +142,12 @@ Every builder agent must verify `npx tsc --noEmit` passes before finishing. Afte
140
142
 
141
143
  Navigate to the target URL with browser MCP.
142
144
 
143
- ### Screenshots
144
- - Take **full-page screenshots** at desktop (1440px) and mobile (390px) viewports
145
- - Save to `docs/design-references/` with descriptive names
146
- - These are your master reference builders will receive section-specific crops/screenshots later
145
+ ### Screenshots *(entire landing — never “above the fold” only)*
146
+ - Capture the **whole marketing surface**: hero through footer (single-page landings). Do **not** stop after the first viewport — lazy-loaded sections, footer nav, and bottom CTAs are required context.
147
+ - Before **every** full-page capture (MCP or Playwright): **slow scroll top → bottom → top** once or twice until `scrollHeight` stops growing, so lazy images/`srcset`/`data-src` resolve where possible.
148
+ - Take **`fullPage: true`** (or MCP equivalent) screenshots at desktop (**1440px**) and mobile (**390px**); save under `docs/design-references/` with descriptive names.
149
+ - **`npm run recon`** already performs stabilized full-document scrolling + merged desktop/mobile asset inventory — prefer running it when automation must match full-page depth reliably.
150
+ - These masters are references — builders still get section crops later, but those crops must exist because **you** scrolled and documented every band first.
147
151
 
148
152
  ### Global Extraction
149
153
  Extract these from the page before doing anything else:
@@ -367,10 +371,19 @@ For each section (or sub-component, if you're breaking it up), create a spec fil
367
371
  - **<Element>:** <property>: <before> → <after>, transition: <value>
368
372
 
369
373
  ## Motion (Framer Motion vs CSS)
374
+ - **Tiers A–E:** <which tiers apply — load stagger, scroll reveal, ambient loop, interaction lifts, decorative parallax — list triggers>
375
+ - **Reduced motion:** <what disables or simplifies when user prefers reduced motion>
370
376
  - **Entrance / scroll reveals:** <e.g. fade+translateY, staggerChildren — specify duration, easing, delay, viewport `once`/`margin`>
371
377
  - **Library:** <`framer-motion` | CSS-only — justify if CSS-only>
372
378
  - **Keyframes / springs:** <if any — match target curve>
373
379
 
380
+ ## Illustration & pixel art *(production uplift — idea-native)*
381
+ - **Idea tie-in:** <one sentence — why this asset belongs only to this product>
382
+ - **Metaphor link:** <which keyword from `idea` / metaphor list this illustrates>
383
+ - **SVG components:** <named exports, paths using currentColor vs fixed fills>
384
+ - **Pixel motif:** <palette hex table, grid, scaling — or N/A>
385
+ - **Motif thread:** <how this echoes logo / OG / favicon for this SaaS>
386
+
374
387
  ## Per-State Content (if applicable)
375
388
 
376
389
  ### State: "Featured"
@@ -451,11 +464,7 @@ For every section, replace:
451
464
  3. **Feature/section copy** — rewrite each feature card, callout, stat, and testimonial to fit the SaaS idea. Preserve the count and shape of items (3 feature cards stay 3 feature cards; a 4-column logo bar stays 4 columns). Generate plausible customer-logo names — never use real company names you haven't been authorized to use.
452
465
  4. **CTA labels** — adapt button text to the SaaS idea ("Start free", "Get a demo", "Try it free", etc.). Keep the CTA hierarchy (primary/secondary) identical to the original.
453
466
  5. **Mock data** — for product UI mockups embedded in marketing screenshots (e.g., a fake dashboard inside a hero), generate mock data shaped for the SaaS idea: realistic-looking but fictional rows, charts, conversation logs, etc.
454
- 6. **Imagery** — placeholder-swap any photography or product screenshots that depict the original brand. Prefer using:
455
- - A neutral abstract gradient / shape composition you generate with CSS or SVG
456
- - A Lucide icon arrangement
457
- - Placeholder service URLs only if explicitly allowed by the user
458
- Keep dimensions, aspect ratios, drop shadows, and surrounding spacing identical to the original.
467
+ 6. **Imagery** — Replace photography/screenshots that depict the original brand with visuals **authored for this SaaS idea**, not interchangeable decoration. Before designing: derive a **metaphor list** from `idea` (3–6 concrete hooks). Each hero/feature/OG asset gets an **Idea tie-in** sentence in `docs/research/REBRAND.md`. Prefer bespoke SVG scenes (`src/components/marketing/art/`) or raster under `public/images/marketing/` that preserve dimensions/aspect/shadows from the cloned layout. **Avoid:** unrelated filler (e.g. apparel, random lifestyle props when the product is notes/voice), generic gradient-only heroes, Lucide-icon piles unless the reference was already that minimal — those fail the uniqueness bar in `AGENTS.md`.
459
468
  7. **Metadata** — update `<title>`, meta description, OG tags, and favicon manifest in `src/app/layout.tsx` to reflect the new SaaS. Generate a simple favicon (initial letter on a brand-colored square) if no asset is provided.
460
469
 
461
470
  What you must NOT change in this pass:
@@ -466,6 +475,25 @@ What you must NOT change in this pass:
466
475
 
467
476
  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.
468
477
 
478
+ ## Phase 4.6: Production uplift *(sparse references / stronger idea-specific art)*
479
+
480
+ Run this pass when **any** of the following is true:
481
+
482
+ - The cloned reference is mostly typography with weak imagery (internal demos, minimalist SaaS shells).
483
+ - The user asks for **more unique images**, **illustration tailored to the idea**, **stronger visuals**, motion, pixel art, or production polish.
484
+ - Visual QA feels “correct but dead” — layout matches but art is generic, unrelated, or repeated stock metaphors.
485
+
486
+ **Do not contradict pixel-perfect emulation when cloning a rich reference** — this phase *adds* or swaps **idea-native** imagery only where the brief allows uplift or the reference was inherently flat.
487
+
488
+ Checklist (mirror `AGENTS.md` — **uniqueness first**):
489
+
490
+ 1. **Idea-tailored imagery** — Metaphor list from `idea`; replace any asset that could belong to another vertical. Per-asset **Idea tie-in** in `docs/research/PRODUCTION_UPLIFT.md` alongside SVG/raster paths.
491
+ 2. **Density** — Layered hero + distinct scene per feature card in **one shared visual language** (stroke/accent/grid), still idea-specific.
492
+ 3. **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
+ 4. **Brand** — Motif thread + accent tokens in `:root`; favicon / OG echo **this** product narrative.
494
+
495
+ Document deltas in `docs/research/PRODUCTION_UPLIFT.md`.
496
+
469
497
  ## Phase 5: Visual QA Diff
470
498
 
471
499
  After assembly, do NOT declare the clone complete. Take side-by-side comparison screenshots:
@@ -494,7 +522,8 @@ Before dispatching ANY builder agent, verify you can check every box. If you can
494
522
  - [ ] For hover states: before/after values and transition timing are recorded
495
523
  - [ ] All images in the section are identified (including overlays and layered compositions)
496
524
  - [ ] Any `<video>` (and poster), Lottie, or canvas-driven hero is identified — not approximated as a static div
497
- - [ ] **Motion** subsection filled: CSS vs **framer-motion**, durations, easings, stagger, scroll triggers
525
+ - [ ] **Motion** subsection filled: tiers **A–E** coverage (see `AGENTS.md`), CSS vs **framer-motion**, durations, easings, stagger, scroll triggers, **reduced-motion** fallback
526
+ - [ ] **Illustration** subsection filled when uplift applies: **Idea tie-in** + metaphor link per asset, SVG/pixel detail — or explicit **N/A** with justification only on strict clone parity jobs
498
527
  - [ ] Responsive behavior is documented for at least desktop and mobile
499
528
  - [ ] Text content is verbatim from the site, not paraphrased
500
529
  - [ ] The builder prompt is under ~150 lines of spec; if over, the section needs to be split
@@ -517,6 +546,7 @@ These are lessons from previous failed clones — each one cost hours of rework:
517
546
  - **Don't bundle unrelated sections into one agent.** A CTA section and a footer are different components with different designs — don't hand them both to one agent and hope for the best.
518
547
  - **Don't skip responsive extraction.** If you only inspect at desktop width, the clone will break at tablet and mobile. Test at 1440, 768, and 390 during extraction.
519
548
  - **Don't forget smooth scroll libraries.** Check for Lenis (`.lenis` class), Locomotive Scroll, or similar. Default browser scrolling feels noticeably different and the user will spot it immediately.
549
+ - **Don't ship interchangeable marketing art.** Random objects, unrelated lifestyle stock, or generic gradients that could match any SaaS violate the **idea-tailored** rule in `AGENTS.md` — every major visual needs a metaphor from `launchframe.config.json#idea`.
520
550
  - **Don't dispatch builders without a spec file.** The spec file forces exhaustive extraction and creates an auditable artifact. Skipping it means the builder gets whatever you can fit in a prompt from memory.
521
551
 
522
552
  ## Completion
@@ -41,7 +41,7 @@ If the user provides additional instructions (specific fidelity level, deeper cu
41
41
  ## Pre-Flight
42
42
 
43
43
  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.
44
- 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
+ 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 performs **stabilized full-document scrolling** at desktop and mobile, writes merged **`computed-snapshot.json`** + **`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.
45
45
  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.
46
46
  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.
47
47
  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>/`.
@@ -55,7 +55,9 @@ These are the truths that separate a successful clone from a "close enough" mess
55
55
 
56
56
  **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.
57
57
 
58
- **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.
58
+ **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.
59
+
60
+ **Illustration & pixel art are production inputs.** Where the target (or post-rebrand layout) lacks convincing visuals, specs MUST allocate **idea-tailored SVG scenes** — metaphors drawn from `launchframe.config.json#idea`, documented with **Idea tie-in** per asset — not generic gray placeholders or unrelated clipart. Pixel-art motifs require concept justification plus palette table in the spec.
59
61
 
60
62
  ### 1. Completeness Beats Speed
61
63
 
@@ -142,10 +144,12 @@ Every builder agent must verify `npx tsc --noEmit` passes before finishing. Afte
142
144
 
143
145
  Navigate to the target URL with browser MCP.
144
146
 
145
- ### Screenshots
146
- - Take **full-page screenshots** at desktop (1440px) and mobile (390px) viewports
147
- - Save to `docs/design-references/` with descriptive names
148
- - These are your master reference builders will receive section-specific crops/screenshots later
147
+ ### Screenshots *(entire landing — never “above the fold” only)*
148
+ - Capture the **whole marketing surface**: hero through footer (single-page landings). Do **not** stop after the first viewport — lazy-loaded sections, footer nav, and bottom CTAs are required context.
149
+ - Before **every** full-page capture (MCP or Playwright): **slow scroll top → bottom → top** once or twice until `scrollHeight` stops growing, so lazy images/`srcset`/`data-src` resolve where possible.
150
+ - Take **`fullPage: true`** (or MCP equivalent) screenshots at desktop (**1440px**) and mobile (**390px**); save under `docs/design-references/` with descriptive names.
151
+ - **`npm run recon`** already performs stabilized full-document scrolling + merged desktop/mobile asset inventory — prefer running it when automation must match full-page depth reliably.
152
+ - These masters are references — builders still get section crops later, but those crops must exist because **you** scrolled and documented every band first.
149
153
 
150
154
  ### Global Extraction
151
155
  Extract these from the page before doing anything else:
@@ -369,10 +373,19 @@ For each section (or sub-component, if you're breaking it up), create a spec fil
369
373
  - **<Element>:** <property>: <before> → <after>, transition: <value>
370
374
 
371
375
  ## Motion (Framer Motion vs CSS)
376
+ - **Tiers A–E:** <which tiers apply — load stagger, scroll reveal, ambient loop, interaction lifts, decorative parallax — list triggers>
377
+ - **Reduced motion:** <what disables or simplifies when user prefers reduced motion>
372
378
  - **Entrance / scroll reveals:** <e.g. fade+translateY, staggerChildren — specify duration, easing, delay, viewport `once`/`margin`>
373
379
  - **Library:** <`framer-motion` | CSS-only — justify if CSS-only>
374
380
  - **Keyframes / springs:** <if any — match target curve>
375
381
 
382
+ ## Illustration & pixel art *(production uplift — idea-native)*
383
+ - **Idea tie-in:** <one sentence — why this asset belongs only to this product>
384
+ - **Metaphor link:** <which keyword from `idea` / metaphor list this illustrates>
385
+ - **SVG components:** <named exports, paths using currentColor vs fixed fills>
386
+ - **Pixel motif:** <palette hex table, grid, scaling — or N/A>
387
+ - **Motif thread:** <how this echoes logo / OG / favicon for this SaaS>
388
+
376
389
  ## Per-State Content (if applicable)
377
390
 
378
391
  ### State: "Featured"
@@ -453,11 +466,7 @@ For every section, replace:
453
466
  3. **Feature/section copy** — rewrite each feature card, callout, stat, and testimonial to fit the SaaS idea. Preserve the count and shape of items (3 feature cards stay 3 feature cards; a 4-column logo bar stays 4 columns). Generate plausible customer-logo names — never use real company names you haven't been authorized to use.
454
467
  4. **CTA labels** — adapt button text to the SaaS idea ("Start free", "Get a demo", "Try it free", etc.). Keep the CTA hierarchy (primary/secondary) identical to the original.
455
468
  5. **Mock data** — for product UI mockups embedded in marketing screenshots (e.g., a fake dashboard inside a hero), generate mock data shaped for the SaaS idea: realistic-looking but fictional rows, charts, conversation logs, etc.
456
- 6. **Imagery** — placeholder-swap any photography or product screenshots that depict the original brand. Prefer using:
457
- - A neutral abstract gradient / shape composition you generate with CSS or SVG
458
- - A Lucide icon arrangement
459
- - Placeholder service URLs only if explicitly allowed by the user
460
- Keep dimensions, aspect ratios, drop shadows, and surrounding spacing identical to the original.
469
+ 6. **Imagery** — Replace photography/screenshots that depict the original brand with visuals **authored for this SaaS idea**, not interchangeable decoration. Before designing: derive a **metaphor list** from `idea` (3–6 concrete hooks). Each hero/feature/OG asset gets an **Idea tie-in** sentence in `docs/research/REBRAND.md`. Prefer bespoke SVG scenes (`src/components/marketing/art/`) or raster under `public/images/marketing/` that preserve dimensions/aspect/shadows from the cloned layout. **Avoid:** unrelated filler (e.g. apparel, random lifestyle props when the product is notes/voice), generic gradient-only heroes, Lucide-icon piles unless the reference was already that minimal — those fail the uniqueness bar in `AGENTS.md`.
461
470
  7. **Metadata** — update `<title>`, meta description, OG tags, and favicon manifest in `src/app/layout.tsx` to reflect the new SaaS. Generate a simple favicon (initial letter on a brand-colored square) if no asset is provided.
462
471
 
463
472
  What you must NOT change in this pass:
@@ -468,6 +477,25 @@ What you must NOT change in this pass:
468
477
 
469
478
  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.
470
479
 
480
+ ## Phase 4.6: Production uplift *(sparse references / stronger idea-specific art)*
481
+
482
+ Run this pass when **any** of the following is true:
483
+
484
+ - The cloned reference is mostly typography with weak imagery (internal demos, minimalist SaaS shells).
485
+ - The user asks for **more unique images**, **illustration tailored to the idea**, **stronger visuals**, motion, pixel art, or production polish.
486
+ - Visual QA feels “correct but dead” — layout matches but art is generic, unrelated, or repeated stock metaphors.
487
+
488
+ **Do not contradict pixel-perfect emulation when cloning a rich reference** — this phase *adds* or swaps **idea-native** imagery only where the brief allows uplift or the reference was inherently flat.
489
+
490
+ Checklist (mirror `AGENTS.md` — **uniqueness first**):
491
+
492
+ 1. **Idea-tailored imagery** — Metaphor list from `idea`; replace any asset that could belong to another vertical. Per-asset **Idea tie-in** in `docs/research/PRODUCTION_UPLIFT.md` alongside SVG/raster paths.
493
+ 2. **Density** — Layered hero + distinct scene per feature card in **one shared visual language** (stroke/accent/grid), still idea-specific.
494
+ 3. **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()`**.
495
+ 4. **Brand** — Motif thread + accent tokens in `:root`; favicon / OG echo **this** product narrative.
496
+
497
+ Document deltas in `docs/research/PRODUCTION_UPLIFT.md`.
498
+
471
499
  ## Phase 5: Visual QA Diff
472
500
 
473
501
  After assembly, do NOT declare the clone complete. Take side-by-side comparison screenshots:
@@ -496,7 +524,8 @@ Before dispatching ANY builder agent, verify you can check every box. If you can
496
524
  - [ ] For hover states: before/after values and transition timing are recorded
497
525
  - [ ] All images in the section are identified (including overlays and layered compositions)
498
526
  - [ ] Any `<video>` (and poster), Lottie, or canvas-driven hero is identified — not approximated as a static div
499
- - [ ] **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: **Idea tie-in** + metaphor link per asset, SVG/pixel detail — or explicit **N/A** with justification only on strict clone parity jobs
500
529
  - [ ] Responsive behavior is documented for at least desktop and mobile
501
530
  - [ ] Text content is verbatim from the site, not paraphrased
502
531
  - [ ] The builder prompt is under ~150 lines of spec; if over, the section needs to be split
@@ -519,6 +548,7 @@ These are lessons from previous failed clones — each one cost hours of rework:
519
548
  - **Don't bundle unrelated sections into one agent.** A CTA section and a footer are different components with different designs — don't hand them both to one agent and hope for the best.
520
549
  - **Don't skip responsive extraction.** If you only inspect at desktop width, the clone will break at tablet and mobile. Test at 1440, 768, and 390 during extraction.
521
550
  - **Don't forget smooth scroll libraries.** Check for Lenis (`.lenis` class), Locomotive Scroll, or similar. Default browser scrolling feels noticeably different and the user will spot it immediately.
551
+ - **Don't ship interchangeable marketing art.** Random objects, unrelated lifestyle stock, or generic gradients that could match any SaaS violate the **idea-tailored** rule in `AGENTS.md` — every major visual needs a metaphor from `launchframe.config.json#idea`.
522
552
  - **Don't dispatch builders without a spec file.** The spec file forces exhaustive extraction and creates an auditable artifact. Skipping it means the builder gets whatever you can fit in a prompt from memory.
523
553
 
524
554
  ## Completion
@@ -42,6 +42,59 @@ 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 *(idea-tailored visuals + motion + brand)*
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 cues that clearly belong to **this** product (`launchframe.config.json#idea`), not any SaaS.
50
+
51
+ ### Idea-tailored imagery *(uniqueness bar)*
52
+
53
+ Generic decoration fails review. Apply this to **every** hero composition, feature-card illustration, OG image sketch, and major `public/` marketing raster.
54
+
55
+ 1. **Derive metaphors from the idea** — Read `idea` (and product name). List 3–6 concrete nouns/verbs the product owns (e.g. voice → waveform, mic; notes → folded page, margin line; sync → paired arrows). Every bespoke visual must trace back to that list — **not** interchangeable clipart (random apparel, unrelated lifestyle objects, vague “business” silhouettes unless the idea demands them).
56
+ 2. **Could this ship on another site unchanged?** If yes, redesign until **no** — different silhouette story, palette accent, or composition so the asset “only fits” this narrative.
57
+ 3. **One tie-in sentence per asset** — In specs or `docs/research/REBRAND.md`, each image/SVG scene gets **Idea tie-in:** `<why this belongs to this product>`.
58
+ 4. **Prefer authored scenes** — Custom SVG narratives (several shapes telling one moment), optional pixel mascot **on-brand** for the category, or composed raster under `public/images/marketing/` when illustration needs texture. Lucide-only piles and neutral blobs are **last resort**, not default.
59
+ 5. **Distinct accents** — Pick accent hues/shapes suggested by the idea’s personality (precise studio vs warm companion vs rugged utility); avoid default gray-only SaaS anonymity unless the brief is explicitly brutalist.
60
+
61
+ ### Imagery density (every fold earns a visual idea)
62
+
63
+ - **Hero** — Never headline-only on white: add at least two of — soft gradient mesh / radial spotlight, **idea-specific** SVG cluster (metaphors from the list above), notebook/grid lines when the idea is docs, waveform device frame when the idea is capture, masked **purpose-built** raster in `public/images/marketing/`, geometric frame echoing **this** logo shape.
64
+ - **Between sections** — Optional dividers whose pattern/stroke **echoes the product motif** (not a stock wave).
65
+ - **Feature rows** — Each card illustration is a **different** moment in the same visual language (shared stroke weight, accent, or grid) — all still **idea-native** (e.g. capture → transcript lines; workspace → shared cursors; publish → export channels). No unrelated filler.
66
+ - **Social proof** — Logo strip may use grayscale marks; add **slow infinite marquee** or gentle opacity drift — motion sells “living product.”
67
+
68
+ ### Motion choreography *(ship several layers; respect `prefers-reduced-motion`)*
69
+
70
+ Default minimum bar for authored landings — implement with **`framer-motion`** unless matching CSS-only parity:
71
+
72
+ | Tier | What users feel | Typical implementation |
73
+ |------|-----------------|-------------------------|
74
+ | **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 |
75
+ | **B — Scroll** | Sections **ease up / fade** on first viewport entry; grids **stagger cards** | `whileInView` + `viewport.once`; `margin: "-80px"` tweak so reveals feel early |
76
+ | **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** |
77
+ | **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 |
78
+ | **E — Decorative depth** | Pointer parallax on hero cluster (2–4 layers at different strengths) OR scroll-linked `useTransform` | Small rotate/translate ranges (≤ 8px / ≤ 2deg) |
79
+
80
+ Always gate looping motion: **`useReducedMotion()`** from Framer Motion — swap loops for static frames and shorten entrances.
81
+
82
+ ### Brandability checklist *(distinctive, not generic SaaS gray)*
83
+
84
+ - **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.
85
+ - **Accent discipline** — Define **primary + secondary accent** in `:root` (even if mostly monochrome). Use accents on CTAs, SVG highlights, focus rings — not rainbow scatter.
86
+ - **Wordmark lockup** — SVG glyph + tracked type; provide **icon-only** variant for favicon / meta.
87
+ - **OG & SEO assets** — Generate **`public/seo/og.png`** (or route og image) that includes motif + product name — not a bare screenshot.
88
+
89
+ ### Where artifacts live
90
+
91
+ - **Raster/video** — `public/images/`, `public/videos/` (see `MEDIA_MANIFEST.md`).
92
+ - **SVG React illustrations** — Prefer `src/components/marketing/art/` or co-located `*-scene.tsx` modules; export named components (`HeroBackdrop`, `FeatureCaptureIllustration`).
93
+ - **Pixel art** — Same folder pattern; document palette in file header comment.
94
+
95
+ ### Spec requirement *(hand-off quality)*
96
+
97
+ When writing `docs/research/components/*.spec.md`, add sections **Illustration** (**Idea tie-in** per asset, 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.
45
98
 
46
99
  ## Commands
47
100
  - `npm run dev` — Start dev server
@@ -71,6 +124,8 @@ Prefer **Playwright** for repeatable extraction in-repo — do **not** rely on C
71
124
  ## Design Principles
72
125
  - **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.
73
126
  - **Motion fidelity** — timing and easing matter as much as color; use Framer Motion when CSS alone cannot match staggered or scroll-driven behavior.
127
+ - **Idea-specific imagery** — Marketing art (SVG, raster, OG) must be **tailored to `launchframe.config.json#idea`**: explicit metaphors, per-asset **Idea tie-in** notes, and **no interchangeable filler** that could belong to any generic SaaS.
128
+ - **Production landing density** — For authored/minimal pages, deliberately add **idea-specific** illustration (not generic SaaS filler), **pixel-art accents** when they reinforce the metaphor, and **tiered motion (A–E)** per “Production polish” above; static monochrome layouts are incomplete unless the user explicitly wants extreme minimalism.
74
129
  - **Pixel-perfect emulation** — match the target's spacing, colors, typography exactly
75
130
  - **No personal aesthetic changes during emulation phase** — match 1:1 first, rebrand later
76
131
  - **Real content during extraction** — use actual text and assets from the target site so the clone scaffolds against real shapes
@@ -83,6 +138,7 @@ src/
83
138
  app/ # Next.js routes
84
139
  components/ # React components
85
140
  ui/ # shadcn/ui primitives
141
+ marketing/ # Landing sections + authored SVG scenes (`art/` recommended)
86
142
  icons.tsx # Extracted SVG icons as React components
87
143
  lib/
88
144
  utils.ts # cn() utility (shadcn)
@@ -129,6 +185,20 @@ If automation hits a bot wall, **do not pretend extraction succeeded** — captu
129
185
  - [ ] **Gestures** — drag, pan, hover follow (often Framer Motion)
130
186
  - [ ] **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.
131
187
 
188
+ ### 3. Idea-tailored illustration & motifs *(production landings)*
189
+
190
+ When the reference page is **sparse** (mostly type + gray boxes) or after a **rebrand** the UI still reads generic, illustration is required — and it must be **unique to the SaaS idea** (`launchframe.config.json#idea`), not reusable wallpaper.
191
+
192
+ - [ ] **Metaphor list** — 3–6 nouns/verbs derived from `idea`; every bespoke asset maps to ≥ one entry
193
+ - [ ] **Uniqueness check** — If the scene works unchanged for another product category, revise
194
+ - [ ] **Inline SVG** — hero shapes, dividers, card mini-scenes; note `viewBox`, **`currentColor`** vs fixed fills, **Idea tie-in** sentence per asset
195
+ - [ ] **Pixel art / sprites** — only when character reinforces the metaphor; palette hex table; `imageRendering` / grid discipline
196
+ - [ ] **Motif thread** — recurring element echoing hero + OG + favicon **for this product**, not a random geometric pattern
197
+ - [ ] **Accent tokens** — primary/secondary roles aligned with idea personality (extract from reference or define in `:root`)
198
+ - [ ] **Motion tiers A–E** — document with **reduced-motion** fallback (`prefers-reduced-motion`)
199
+
200
+ See **`AGENTS.md` → Production polish for marketing landings** for tier definitions and folders (`src/components/marketing/art/`, `public/images/marketing/`).
201
+
132
202
  ---
133
203
 
134
204
  ## How to Reverse-Engineer Any Website