launchframe 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -11
- package/bin/launchframe.mjs +57 -21
- package/package.json +1 -1
- package/template/.amazonq/cli-agents/clone-website.json +1 -1
- package/template/.amazonq/rules/project.md +45 -6
- package/template/.augment/commands/clone-website.md +29 -12
- package/template/.claude/skills/clone-website/SKILL.md +30 -13
- package/template/.clinerules +45 -6
- package/template/.codex/skills/clone-website/SKILL.md +30 -13
- package/template/.continue/commands/clone-website.md +29 -12
- package/template/.continue/rules/project.md +45 -6
- package/template/.cursor/commands/clone-website.md +29 -12
- package/template/.gemini/commands/clone-website.toml +29 -12
- package/template/.github/copilot-instructions.md +45 -6
- package/template/.github/skills/clone-website/SKILL.md +30 -13
- package/template/.opencode/commands/clone-website.md +29 -12
- package/template/.windsurf/workflows/clone-website.md +29 -12
- package/template/AGENTS.md +10 -0
- package/template/README.md +7 -5
- package/template/START_HERE.md +2 -2
- package/template/docs/research/INSPECTION_GUIDE.md +35 -6
- package/template/package.json +1 -0
|
@@ -42,13 +42,19 @@ If the user provides additional instructions (specific fidelity level, deeper cu
|
|
|
42
42
|
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
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
|
-
5. Create the output directories if they don't exist: `docs/research/`, `docs/research/components/`, `docs/design-references/`, `scripts/`. For multiple clones, also prepare per-site folders like `docs/research/<hostname>/` and `docs/design-references/<hostname>/`.
|
|
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>/`.
|
|
46
46
|
6. When working with multiple sites in one command, optionally confirm whether to run them in parallel (recommended, if resources allow) or sequentially to avoid overload.
|
|
47
47
|
|
|
48
48
|
## Guiding Principles
|
|
49
49
|
|
|
50
50
|
These are the truths that separate a successful clone from a "close enough" mess. Internalize them — they should inform every decision you make.
|
|
51
51
|
|
|
52
|
+
### 0. Launchframe priorities: media & motion (do not defer)
|
|
53
|
+
|
|
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
|
+
|
|
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.
|
|
57
|
+
|
|
52
58
|
### 1. Completeness Beats Speed
|
|
53
59
|
|
|
54
60
|
Every builder agent must receive **everything** it needs to do its job perfectly: screenshot, exact CSS values, downloaded assets with local paths, real text content, component structure. If a builder has to guess anything — a color, a font size, a padding value — you have failed at extraction. Take the extra minute to extract one more property rather than shipping an incomplete brief.
|
|
@@ -193,11 +199,12 @@ Save this as `docs/research/PAGE_TOPOLOGY.md` — it becomes your assembly bluep
|
|
|
193
199
|
This is sequential. Do it yourself (not delegated to an agent) since it touches many files:
|
|
194
200
|
|
|
195
201
|
1. **Update fonts** in `layout.tsx` to match the target site's actual fonts
|
|
196
|
-
2. **
|
|
197
|
-
3. **
|
|
198
|
-
4. **
|
|
199
|
-
5. **
|
|
200
|
-
6.
|
|
202
|
+
2. **Confirm Framer Motion** — `framer-motion` should already be in `package.json`. If missing, add it (`npm install framer-motion`) so builders can import `motion` without ad-hoc library drift.
|
|
203
|
+
3. **Update globals.css** with the target's color tokens, spacing values, keyframe animations, utility classes, and any **global scroll behaviors** (Lenis, smooth scroll CSS, scroll-snap on body)
|
|
204
|
+
4. **Media inventory + download (early, high priority)** — run the asset discovery script (below) via browser MCP, write `docs/research/MEDIA_MANIFEST.md`, then implement **`scripts/download-assets.mjs`** and execute it so **images** land in `public/images/` and **videos** (+ posters) in `public/videos/` (or a clear subdirectory scheme under `public/`). Batch parallel downloads (4 concurrent) with errors logged — do not claim success if URLs failed. This step should complete **before** most section components are built so builders use real paths.
|
|
205
|
+
5. **Create TypeScript interfaces** in `src/types/` for the content structures you've observed
|
|
206
|
+
6. **Extract SVG icons** — find all inline `<svg>` elements on the page, deduplicate them, and save as named React components in `src/components/icons.tsx`. Name them by visual function (e.g., `SearchIcon`, `ArrowRightIcon`, `LogoIcon`).
|
|
207
|
+
7. Verify: `npm run build` passes
|
|
201
208
|
|
|
202
209
|
### Asset Discovery Script Pattern
|
|
203
210
|
|
|
@@ -354,11 +361,16 @@ For each section (or sub-component, if you're breaking it up), create a spec fil
|
|
|
354
361
|
- **State A (before):** maxWidth: 100vw, boxShadow: none, borderRadius: 0
|
|
355
362
|
- **State B (after):** maxWidth: 1200px, boxShadow: 0 4px 20px rgba(0,0,0,0.1), borderRadius: 16px
|
|
356
363
|
- **Transition:** transition: all 0.3s ease
|
|
357
|
-
- **Implementation approach:** <CSS transition + scroll listener | IntersectionObserver | CSS animation-timeline | etc.>
|
|
364
|
+
- **Implementation approach:** <CSS transition + scroll listener | IntersectionObserver | CSS animation-timeline | **framer-motion** (`motion`, `whileInView`, stagger container) | etc.>
|
|
358
365
|
|
|
359
366
|
### Hover states
|
|
360
367
|
- **<Element>:** <property>: <before> → <after>, transition: <value>
|
|
361
368
|
|
|
369
|
+
## Motion (Framer Motion vs CSS)
|
|
370
|
+
- **Entrance / scroll reveals:** <e.g. fade+translateY, staggerChildren — specify duration, easing, delay, viewport `once`/`margin`>
|
|
371
|
+
- **Library:** <`framer-motion` | CSS-only — justify if CSS-only>
|
|
372
|
+
- **Keyframes / springs:** <if any — match target curve>
|
|
373
|
+
|
|
362
374
|
## Per-State Content (if applicable)
|
|
363
375
|
|
|
364
376
|
### State: "Featured"
|
|
@@ -370,9 +382,10 @@ For each section (or sub-component, if you're breaking it up), create a spec fil
|
|
|
370
382
|
- Title: "..."
|
|
371
383
|
- Cards: [...]
|
|
372
384
|
|
|
373
|
-
## Assets
|
|
374
|
-
-
|
|
375
|
-
-
|
|
385
|
+
## Assets (images & video — required detail)
|
|
386
|
+
- Raster: `public/images/<file>` — dimensions, `object-fit`, lazy if below fold
|
|
387
|
+
- Video: `public/videos/<file>` — poster `public/images/...` or `public/videos/...`, autoplay/muted/loop, controls
|
|
388
|
+
- Background layers: which div uses `background-image` and resolved URL → local path
|
|
376
389
|
- Icons used: <ArrowIcon>, <SearchIcon> from icons.tsx
|
|
377
390
|
|
|
378
391
|
## Text Content (verbatim)
|
|
@@ -446,7 +459,7 @@ For every section, replace:
|
|
|
446
459
|
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.
|
|
447
460
|
|
|
448
461
|
What you must NOT change in this pass:
|
|
449
|
-
- Spacing, padding, typography scale, color tokens,
|
|
462
|
+
- Spacing, padding, typography scale, color tokens, **animation timing & motion choreography** (including Framer Motion `variants` / `transition` props), responsive breakpoints — those are still 1:1 to the original
|
|
450
463
|
- Section order, section count, component structure
|
|
451
464
|
- Interaction models (scroll-driven stays scroll-driven, etc.)
|
|
452
465
|
- Any computed-style value extracted in Phase 3
|
|
@@ -480,6 +493,8 @@ Before dispatching ANY builder agent, verify you can check every box. If you can
|
|
|
480
493
|
- [ ] For scroll-driven components: trigger threshold, before/after styles, and transition are recorded
|
|
481
494
|
- [ ] For hover states: before/after values and transition timing are recorded
|
|
482
495
|
- [ ] All images in the section are identified (including overlays and layered compositions)
|
|
496
|
+
- [ ] 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
|
|
483
498
|
- [ ] Responsive behavior is documented for at least desktop and mobile
|
|
484
499
|
- [ ] Text content is verbatim from the site, not paraphrased
|
|
485
500
|
- [ ] The builder prompt is under ~150 lines of spec; if over, the section needs to be split
|
|
@@ -496,6 +511,8 @@ These are lessons from previous failed clones — each one cost hours of rework:
|
|
|
496
511
|
- **Don't build everything in one monolithic commit.** The whole point of this pipeline is incremental progress with verified builds at each step.
|
|
497
512
|
- **Don't reference docs from builder prompts.** Each builder gets the CSS spec inline in its prompt — never "see DESIGN_TOKENS.md for colors." The builder should have zero need to read external docs.
|
|
498
513
|
- **Don't skip asset extraction.** Without real images, videos, and fonts, the clone will always look fake regardless of how perfect the CSS is.
|
|
514
|
+
- **Don't defer image/video download to the end.** Run `MEDIA_MANIFEST.md` + `download-assets.mjs` during foundation so components reference real `public/` paths from the first build.
|
|
515
|
+
- **Don't fake complex motion with a single CSS `transition` when the target uses staggered, scroll-scrubbed, or layout-driven animation** — use **`framer-motion`** (`motion`, `whileInView`, `variants`, `staggerChildren`) and match duration/easing from extraction.
|
|
499
516
|
- **Don't give a builder agent too much scope.** If you're writing a builder prompt and it's getting long because the section is complex, that's a signal to break it into smaller tasks.
|
|
500
517
|
- **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.
|
|
501
518
|
- **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.
|
|
@@ -510,7 +527,7 @@ When done, report:
|
|
|
510
527
|
- Total sections built
|
|
511
528
|
- Total components created
|
|
512
529
|
- Total spec files written (should match components)
|
|
513
|
-
- Total assets downloaded (images, videos, SVGs, fonts)
|
|
530
|
+
- Total assets downloaded (images, videos, SVGs, fonts) — path to `docs/research/MEDIA_MANIFEST.md`
|
|
514
531
|
- Rebrand summary (path to `docs/research/REBRAND.md`)
|
|
515
532
|
- Build status (`npm run build` result)
|
|
516
533
|
- Visual QA results (any remaining discrepancies)
|
|
@@ -39,13 +39,19 @@ If the user provides additional instructions (specific fidelity level, deeper cu
|
|
|
39
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.
|
|
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
|
-
5. Create the output directories if they don't exist: `docs/research/`, `docs/research/components/`, `docs/design-references/`, `scripts/`. For multiple clones, also prepare per-site folders like `docs/research/<hostname>/` and `docs/design-references/<hostname>/`.
|
|
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>/`.
|
|
43
43
|
6. When working with multiple sites in one command, optionally confirm whether to run them in parallel (recommended, if resources allow) or sequentially to avoid overload.
|
|
44
44
|
|
|
45
45
|
## Guiding Principles
|
|
46
46
|
|
|
47
47
|
These are the truths that separate a successful clone from a "close enough" mess. Internalize them — they should inform every decision you make.
|
|
48
48
|
|
|
49
|
+
### 0. Launchframe priorities: media & motion (do not defer)
|
|
50
|
+
|
|
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
|
+
|
|
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.
|
|
54
|
+
|
|
49
55
|
### 1. Completeness Beats Speed
|
|
50
56
|
|
|
51
57
|
Every builder agent must receive **everything** it needs to do its job perfectly: screenshot, exact CSS values, downloaded assets with local paths, real text content, component structure. If a builder has to guess anything — a color, a font size, a padding value — you have failed at extraction. Take the extra minute to extract one more property rather than shipping an incomplete brief.
|
|
@@ -190,11 +196,12 @@ Save this as `docs/research/PAGE_TOPOLOGY.md` — it becomes your assembly bluep
|
|
|
190
196
|
This is sequential. Do it yourself (not delegated to an agent) since it touches many files:
|
|
191
197
|
|
|
192
198
|
1. **Update fonts** in `layout.tsx` to match the target site's actual fonts
|
|
193
|
-
2. **
|
|
194
|
-
3. **
|
|
195
|
-
4. **
|
|
196
|
-
5. **
|
|
197
|
-
6.
|
|
199
|
+
2. **Confirm Framer Motion** — `framer-motion` should already be in `package.json`. If missing, add it (`npm install framer-motion`) so builders can import `motion` without ad-hoc library drift.
|
|
200
|
+
3. **Update globals.css** with the target's color tokens, spacing values, keyframe animations, utility classes, and any **global scroll behaviors** (Lenis, smooth scroll CSS, scroll-snap on body)
|
|
201
|
+
4. **Media inventory + download (early, high priority)** — run the asset discovery script (below) via browser MCP, write `docs/research/MEDIA_MANIFEST.md`, then implement **`scripts/download-assets.mjs`** and execute it so **images** land in `public/images/` and **videos** (+ posters) in `public/videos/` (or a clear subdirectory scheme under `public/`). Batch parallel downloads (4 concurrent) with errors logged — do not claim success if URLs failed. This step should complete **before** most section components are built so builders use real paths.
|
|
202
|
+
5. **Create TypeScript interfaces** in `src/types/` for the content structures you've observed
|
|
203
|
+
6. **Extract SVG icons** — find all inline `<svg>` elements on the page, deduplicate them, and save as named React components in `src/components/icons.tsx`. Name them by visual function (e.g., `SearchIcon`, `ArrowRightIcon`, `LogoIcon`).
|
|
204
|
+
7. Verify: `npm run build` passes
|
|
198
205
|
|
|
199
206
|
### Asset Discovery Script Pattern
|
|
200
207
|
|
|
@@ -351,11 +358,16 @@ For each section (or sub-component, if you're breaking it up), create a spec fil
|
|
|
351
358
|
- **State A (before):** maxWidth: 100vw, boxShadow: none, borderRadius: 0
|
|
352
359
|
- **State B (after):** maxWidth: 1200px, boxShadow: 0 4px 20px rgba(0,0,0,0.1), borderRadius: 16px
|
|
353
360
|
- **Transition:** transition: all 0.3s ease
|
|
354
|
-
- **Implementation approach:** <CSS transition + scroll listener | IntersectionObserver | CSS animation-timeline | etc.>
|
|
361
|
+
- **Implementation approach:** <CSS transition + scroll listener | IntersectionObserver | CSS animation-timeline | **framer-motion** (`motion`, `whileInView`, stagger container) | etc.>
|
|
355
362
|
|
|
356
363
|
### Hover states
|
|
357
364
|
- **<Element>:** <property>: <before> → <after>, transition: <value>
|
|
358
365
|
|
|
366
|
+
## Motion (Framer Motion vs CSS)
|
|
367
|
+
- **Entrance / scroll reveals:** <e.g. fade+translateY, staggerChildren — specify duration, easing, delay, viewport `once`/`margin`>
|
|
368
|
+
- **Library:** <`framer-motion` | CSS-only — justify if CSS-only>
|
|
369
|
+
- **Keyframes / springs:** <if any — match target curve>
|
|
370
|
+
|
|
359
371
|
## Per-State Content (if applicable)
|
|
360
372
|
|
|
361
373
|
### State: "Featured"
|
|
@@ -367,9 +379,10 @@ For each section (or sub-component, if you're breaking it up), create a spec fil
|
|
|
367
379
|
- Title: "..."
|
|
368
380
|
- Cards: [...]
|
|
369
381
|
|
|
370
|
-
## Assets
|
|
371
|
-
-
|
|
372
|
-
-
|
|
382
|
+
## Assets (images & video — required detail)
|
|
383
|
+
- Raster: `public/images/<file>` — dimensions, `object-fit`, lazy if below fold
|
|
384
|
+
- Video: `public/videos/<file>` — poster `public/images/...` or `public/videos/...`, autoplay/muted/loop, controls
|
|
385
|
+
- Background layers: which div uses `background-image` and resolved URL → local path
|
|
373
386
|
- Icons used: <ArrowIcon>, <SearchIcon> from icons.tsx
|
|
374
387
|
|
|
375
388
|
## Text Content (verbatim)
|
|
@@ -443,7 +456,7 @@ For every section, replace:
|
|
|
443
456
|
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.
|
|
444
457
|
|
|
445
458
|
What you must NOT change in this pass:
|
|
446
|
-
- Spacing, padding, typography scale, color tokens,
|
|
459
|
+
- Spacing, padding, typography scale, color tokens, **animation timing & motion choreography** (including Framer Motion `variants` / `transition` props), responsive breakpoints — those are still 1:1 to the original
|
|
447
460
|
- Section order, section count, component structure
|
|
448
461
|
- Interaction models (scroll-driven stays scroll-driven, etc.)
|
|
449
462
|
- Any computed-style value extracted in Phase 3
|
|
@@ -477,6 +490,8 @@ Before dispatching ANY builder agent, verify you can check every box. If you can
|
|
|
477
490
|
- [ ] For scroll-driven components: trigger threshold, before/after styles, and transition are recorded
|
|
478
491
|
- [ ] For hover states: before/after values and transition timing are recorded
|
|
479
492
|
- [ ] All images in the section are identified (including overlays and layered compositions)
|
|
493
|
+
- [ ] 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
|
|
480
495
|
- [ ] Responsive behavior is documented for at least desktop and mobile
|
|
481
496
|
- [ ] Text content is verbatim from the site, not paraphrased
|
|
482
497
|
- [ ] The builder prompt is under ~150 lines of spec; if over, the section needs to be split
|
|
@@ -493,6 +508,8 @@ These are lessons from previous failed clones — each one cost hours of rework:
|
|
|
493
508
|
- **Don't build everything in one monolithic commit.** The whole point of this pipeline is incremental progress with verified builds at each step.
|
|
494
509
|
- **Don't reference docs from builder prompts.** Each builder gets the CSS spec inline in its prompt — never "see DESIGN_TOKENS.md for colors." The builder should have zero need to read external docs.
|
|
495
510
|
- **Don't skip asset extraction.** Without real images, videos, and fonts, the clone will always look fake regardless of how perfect the CSS is.
|
|
511
|
+
- **Don't defer image/video download to the end.** Run `MEDIA_MANIFEST.md` + `download-assets.mjs` during foundation so components reference real `public/` paths from the first build.
|
|
512
|
+
- **Don't fake complex motion with a single CSS `transition` when the target uses staggered, scroll-scrubbed, or layout-driven animation** — use **`framer-motion`** (`motion`, `whileInView`, `variants`, `staggerChildren`) and match duration/easing from extraction.
|
|
496
513
|
- **Don't give a builder agent too much scope.** If you're writing a builder prompt and it's getting long because the section is complex, that's a signal to break it into smaller tasks.
|
|
497
514
|
- **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.
|
|
498
515
|
- **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.
|
|
@@ -507,7 +524,7 @@ When done, report:
|
|
|
507
524
|
- Total sections built
|
|
508
525
|
- Total components created
|
|
509
526
|
- Total spec files written (should match components)
|
|
510
|
-
- Total assets downloaded (images, videos, SVGs, fonts)
|
|
527
|
+
- Total assets downloaded (images, videos, SVGs, fonts) — path to `docs/research/MEDIA_MANIFEST.md`
|
|
511
528
|
- Rebrand summary (path to `docs/research/REBRAND.md`)
|
|
512
529
|
- Build status (`npm run build` result)
|
|
513
530
|
- Visual QA results (any remaining discrepancies)
|
package/template/AGENTS.md
CHANGED
|
@@ -24,10 +24,18 @@ When you see that with no other instructions, **start the full clone-website pip
|
|
|
24
24
|
## Tech Stack
|
|
25
25
|
- **Framework:** Next.js 16 (App Router, React 19, TypeScript strict)
|
|
26
26
|
- **UI:** shadcn/ui (Radix primitives, Tailwind CSS v4, `cn()` utility)
|
|
27
|
+
- **Motion:** **Framer Motion** (`framer-motion`) — **default for non-trivial animation** (scroll reveals, staggers, layout, gestures). Use CSS `transition` / `@keyframes` only when they reproduce the target exactly without JS.
|
|
27
28
|
- **Icons:** Lucide React (default — will be replaced/supplemented by extracted SVGs)
|
|
28
29
|
- **Styling:** Tailwind CSS v4 with oklch design tokens
|
|
30
|
+
- **Media:** Real **images & videos** from the target URL, saved under `public/images/` and `public/videos/` (see `.claude/skills/clone-website/SKILL.md` and `docs/research/INSPECTION_GUIDE.md`). Do not ship a “pretty shell” with missing raster/video unless extraction is **blocked** and documented in `docs/research/EXTRACTION_LIMITATIONS.md`.
|
|
29
31
|
- **Deployment:** Vercel
|
|
30
32
|
|
|
33
|
+
## Priority: images, videos & motion
|
|
34
|
+
Treat these as **first-class deliverables**, not polish at the end.
|
|
35
|
+
|
|
36
|
+
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.
|
|
37
|
+
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**.
|
|
38
|
+
|
|
31
39
|
## Commands
|
|
32
40
|
- `npm run dev` — Start dev server
|
|
33
41
|
- `npm run build` — Production build
|
|
@@ -43,6 +51,8 @@ When you see that with no other instructions, **start the full clone-website pip
|
|
|
43
51
|
- Responsive: mobile-first
|
|
44
52
|
|
|
45
53
|
## Design Principles
|
|
54
|
+
- **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.
|
|
55
|
+
- **Motion fidelity** — timing and easing matter as much as color; use Framer Motion when CSS alone cannot match staggered or scroll-driven behavior.
|
|
46
56
|
- **Pixel-perfect emulation** — match the target's spacing, colors, typography exactly
|
|
47
57
|
- **No personal aesthetic changes during emulation phase** — match 1:1 first, rebrand later
|
|
48
58
|
- **Real content during extraction** — use actual text and assets from the target site so the clone scaffolds against real shapes
|
package/template/README.md
CHANGED
|
@@ -6,13 +6,13 @@ This project was scaffolded by **[Launchframe](https://github.com/evangruhlkey/l
|
|
|
6
6
|
npx launchframe@latest <url> "<saas idea>"
|
|
7
7
|
```
|
|
8
8
|
|
|
9
|
-
Dependencies were installed for you.
|
|
9
|
+
Dependencies were installed for you. Files were written to **this directory** (project root) so **`.cursor`**, **`.claude`**, etc. work when you open this folder in your editor. Config lives in **`launchframe.config.json`** (`url` + SaaS `idea`).
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
13
13
|
## Quick start (two steps)
|
|
14
14
|
|
|
15
|
-
1. **Open this folder** in [Cursor](https://cursor.com/) (
|
|
15
|
+
1. **Open this folder** in [Cursor](https://cursor.com/) — the directory that **contains** `.cursor/` (not a parent folder).
|
|
16
16
|
2. In chat, say: **Build it.**
|
|
17
17
|
|
|
18
18
|
Your AI reads [`launchframe.config.json`](./launchframe.config.json) and [`AGENTS.md`](./AGENTS.md) and runs the full clone + rebrand pipeline (same as **`/clone-website`**).
|
|
@@ -23,9 +23,9 @@ Rather read a postcard? See [`START_HERE.md`](./START_HERE.md).
|
|
|
23
23
|
|
|
24
24
|
A multi-phase pipeline runs inside your AI agent:
|
|
25
25
|
|
|
26
|
-
1. **Reconnaissance** — screenshots, design-token extraction, interaction sweep (scroll, click, hover, responsive)
|
|
27
|
-
2. **Foundation** —
|
|
28
|
-
3. **Component Specs** — writes detailed spec files (`docs/research/components/`) with exact
|
|
26
|
+
1. **Reconnaissance** — screenshots, design-token extraction, **image/video inventory** (`MEDIA_MANIFEST.md`), interaction sweep (scroll, click, hover, responsive)
|
|
27
|
+
2. **Foundation** — fonts, globals, **`framer-motion`**, **download images & videos** to `public/` before most UI build
|
|
28
|
+
3. **Component Specs** — writes detailed spec files (`docs/research/components/`) with exact CSS, **local media paths**, and **Motion** (CSS vs Framer)
|
|
29
29
|
4. **Parallel Build** — dispatches builder agents in git worktrees, one per section
|
|
30
30
|
5. **SaaS Rebrand Pass** — swaps product name, headlines, feature copy, CTAs, and brand marks to match `launchframe.config.json#idea`. Visuals stay 1:1.
|
|
31
31
|
6. **Assembly & Visual QA** — merges worktrees, wires up the page, runs visual diff against the original
|
|
@@ -55,7 +55,9 @@ Each builder agent receives the full component spec inline — exact `getCompute
|
|
|
55
55
|
- **Next.js 16** — App Router, React 19, TypeScript strict
|
|
56
56
|
- **shadcn/ui** — Radix primitives + Tailwind CSS v4
|
|
57
57
|
- **Tailwind CSS v4** — oklch design tokens
|
|
58
|
+
- **Framer Motion** — default for non-trivial marketing animation (scroll reveals, staggers, layout); see `AGENTS.md`
|
|
58
59
|
- **Lucide React** — default icons (replaced by extracted SVGs during cloning)
|
|
60
|
+
- **Media** — targets download to `public/images/` & `public/videos/` per `docs/research/MEDIA_MANIFEST.md` (see `INSPECTION_GUIDE.md`)
|
|
59
61
|
|
|
60
62
|
## Prerequisites
|
|
61
63
|
|
package/template/START_HERE.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Start here
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Launchframe wrote files into **this folder** (your project root), including **`.cursor`** and **`.claude`**, so they work when you open this directory in your editor.
|
|
4
4
|
|
|
5
5
|
## Do this next
|
|
6
6
|
|
|
7
|
-
1. **Open this folder** in [Cursor](https://cursor.com/) (
|
|
7
|
+
1. **Open this folder** in [Cursor](https://cursor.com/) (the root that contains `.cursor` — not a parent directory).
|
|
8
8
|
2. In chat, say: **Build it.**
|
|
9
9
|
|
|
10
10
|
That tells your AI to read `launchframe.config.json` and `AGENTS.md` and run the full **clone + SaaS rebrand** pipeline (same work as `/clone-website`).
|
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
# Website Inspection Guide
|
|
2
2
|
|
|
3
|
+
## Priority (read first): media & motion
|
|
4
|
+
|
|
5
|
+
Launchframe clones live pages for a **visual** result. Two things most often separate a convincing build from a hollow one:
|
|
6
|
+
|
|
7
|
+
### 1. Images & video (do this before obsessing over utility classes)
|
|
8
|
+
|
|
9
|
+
- [ ] **Every `<img>`** — `src` / `srcset` / `currentSrc`, `sizes`, `loading`, `decoding`, `alt`, intrinsic dimensions
|
|
10
|
+
- [ ] **`<picture>` / `<source>`** — resolution switches, art direction, `type` (WebP/AVIF)
|
|
11
|
+
- [ ] **Every `<video>`** — `src` + nested `<source>`, **poster**, `autoplay`, `loop`, `muted`, `playsinline`, `controls`
|
|
12
|
+
- [ ] **Background images** — `background-image` on ancestors (hero stacks are often **layers** of img + gradient + PNG mockup)
|
|
13
|
+
- [ ] **Lazy / below-fold** — scroll the page once before asset discovery so `data-src` / lazy-loaded URLs resolve if the site uses them
|
|
14
|
+
- [ ] **Download** — mirror into `public/images/` and `public/videos/` with stable paths; list failures in `docs/research/EXTRACTION_LIMITATIONS.md`
|
|
15
|
+
|
|
16
|
+
If automation hits a bot wall, **do not pretend extraction succeeded** — capture what you can from successful fetches and document gaps.
|
|
17
|
+
|
|
18
|
+
### 2. Motion (prefer Framer Motion in this repo)
|
|
19
|
+
|
|
20
|
+
- [ ] **Entrance** — fade/slide/scale on mount or on **scroll into view** (note threshold / `margin`)
|
|
21
|
+
- [ ] **Stagger** — children animating in sequence (hero bullets, card grids)
|
|
22
|
+
- [ ] **Scroll-linked** — progress, parallax, pinned sections (may combine with CSS `animation-timeline` or libs)
|
|
23
|
+
- [ ] **Gestures** — drag, pan, hover follow (often Framer Motion)
|
|
24
|
+
- [ ] **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.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
3
28
|
## How to Reverse-Engineer Any Website
|
|
4
29
|
|
|
5
30
|
This guide outlines what to capture when inspecting a target website via Chrome MCP or browser DevTools.
|
|
@@ -14,6 +39,8 @@ This guide outlines what to capture when inspecting a target website via Chrome
|
|
|
14
39
|
- [ ] Loading/skeleton states
|
|
15
40
|
- [ ] Empty states
|
|
16
41
|
- [ ] Error states
|
|
42
|
+
- [ ] **Video frames** — capture a frame mid-play for reference if motion is subtle
|
|
43
|
+
- [ ] **Hero / full-bleed** — wide crops where raster layers are easy to miss
|
|
17
44
|
|
|
18
45
|
### Design Tokens to Extract
|
|
19
46
|
- [ ] **Colors** — background, text (primary/secondary/muted), accent, border, hover, error, success, warning
|
|
@@ -36,7 +63,7 @@ For each distinct UI component, document:
|
|
|
36
63
|
4. **States** — default, hover, active, disabled, loading, error, empty
|
|
37
64
|
5. **Responsive behavior** — how does it change at different breakpoints?
|
|
38
65
|
6. **Interactions** — click, hover, focus, keyboard navigation
|
|
39
|
-
7. **Animations** — transitions, entrance/exit
|
|
66
|
+
7. **Animations** — transitions, entrance/exit, micro-interactions — **`framer-motion` vs CSS** and exact timing
|
|
40
67
|
|
|
41
68
|
### Common Components to Look For
|
|
42
69
|
- Navigation (top bar, sidebar, bottom bar)
|
|
@@ -50,6 +77,7 @@ For each distinct UI component, document:
|
|
|
50
77
|
- Loading skeletons
|
|
51
78
|
- Toast notifications
|
|
52
79
|
- Tooltips and popovers
|
|
80
|
+
- **Video / Lottie / canvas** blocks (do not substitute with static mockups without documenting why)
|
|
53
81
|
|
|
54
82
|
## Phase 3: Layout Architecture
|
|
55
83
|
|
|
@@ -67,14 +95,15 @@ For each distinct UI component, document:
|
|
|
67
95
|
- [ ] **State management** — Redux (check DevTools), React Query, Zustand, Pinia
|
|
68
96
|
- [ ] **API patterns** — REST, GraphQL (check network tab for `/graphql` requests)
|
|
69
97
|
- [ ] **Font loading** — Google Fonts, self-hosted, system fonts
|
|
70
|
-
- [ ] **Image strategy** — CDN, lazy loading, srcset, WebP/AVIF
|
|
71
|
-
- [ ] **Animation library** —
|
|
98
|
+
- [ ] **Image strategy** — CDN, lazy loading, srcset, WebP/AVIF — **mirror URLs you are allowed to fetch**
|
|
99
|
+
- [ ] **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
|
|
72
100
|
|
|
73
101
|
## Phase 5: Documentation Output
|
|
74
102
|
|
|
75
103
|
After inspection, create these files in `docs/research/`:
|
|
76
104
|
1. `DESIGN_TOKENS.md` — All extracted colors, typography, spacing
|
|
77
105
|
2. `COMPONENT_INVENTORY.md` — Every component with structure notes
|
|
78
|
-
3.
|
|
79
|
-
4. `
|
|
80
|
-
5. `
|
|
106
|
+
3. **`MEDIA_MANIFEST.md`** — (recommended) Table of every image/video/poster URL → local `public/` path or “blocked”
|
|
107
|
+
4. `LAYOUT_ARCHITECTURE.md` — Page layouts, grid system, responsive behavior
|
|
108
|
+
5. `INTERACTION_PATTERNS.md` — Animations: **CSS vs Framer Motion**, transitions, hover states
|
|
109
|
+
6. `TECH_STACK_ANALYSIS.md` — What the site uses and our chosen equivalents (Framer Motion for React animation)
|