launchframe 0.4.9 → 0.4.11
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/.amazonq/cli-agents/launchframe.json +1 -1
- package/.amazonq/rules/project.md +119 -80
- package/.augment/commands/launchframe.md +16 -0
- package/.claude/skills/launchframe/SKILL.md +16 -0
- package/.clinerules +119 -80
- package/.codex/skills/launchframe/SKILL.md +16 -0
- package/.continue/commands/launchframe.md +16 -0
- package/.continue/rules/project.md +119 -80
- package/.cursor/commands/launchframe.md +16 -0
- package/.gemini/commands/launchframe.toml +16 -0
- package/.github/copilot-instructions.md +119 -80
- package/.github/skills/launchframe/SKILL.md +16 -0
- package/.gitignore +4 -0
- package/.opencode/commands/launchframe.md +16 -0
- package/.windsurf/workflows/launchframe.md +16 -0
- package/AGENTS.md +2 -2
- package/README.md +38 -165
- package/bin/launchframe.mjs +380 -380
- package/docs/research/INSPECTION_GUIDE.md +117 -78
- package/docs/research/example.com/page-inspection/example.com-2026-05-15T21-24-43-488Z/README.txt +16 -0
- package/docs/research/example.com/page-inspection/example.com-2026-05-15T21-24-43-488Z/body-outer.html +2 -0
- package/docs/research/example.com/page-inspection/example.com-2026-05-15T21-24-43-488Z/capture-meta.json +19 -0
- package/docs/research/example.com/page-inspection/example.com-2026-05-15T21-24-43-488Z/document.html +2 -0
- package/docs/research/example.com/page-inspection/example.com-2026-05-15T21-24-43-488Z/inline-styles.json +7 -0
- package/docs/research/example.com/page-inspection/example.com-2026-05-15T21-24-43-488Z/motion-summary.json +18 -0
- package/docs/research/page-captures/example.com-2026-05-15T21-21-31-863Z/README.txt +16 -0
- package/docs/research/page-captures/example.com-2026-05-15T21-21-31-863Z/body-outer.html +2 -0
- package/docs/research/page-captures/example.com-2026-05-15T21-21-31-863Z/capture-meta.json +19 -0
- package/docs/research/page-captures/example.com-2026-05-15T21-21-31-863Z/document.html +2 -0
- package/docs/research/page-captures/example.com-2026-05-15T21-21-31-863Z/inline-styles.json +7 -0
- package/docs/research/page-captures/example.com-2026-05-15T21-21-31-863Z/motion-summary.json +18 -0
- package/package.json +5 -3
- package/scripts/page-inspection-dump.mjs +386 -0
- package/scripts/sync-agent-rules.sh +88 -88
- package/tsconfig.json +34 -34
package/.clinerules
CHANGED
|
@@ -10,7 +10,7 @@ This version has breaking changes — APIs, conventions, and file structure may
|
|
|
10
10
|
# Website Reverse-Engineer Template
|
|
11
11
|
|
|
12
12
|
## What This Is
|
|
13
|
-
A reusable template for reverse-engineering any website into a clean, modern Next.js codebase using AI coding agents. The Next.js + shadcn/ui + Tailwind v4 base is pre-scaffolded — use **`/launchframe <url> "saas idea"`** for the full pixel-perfect clone plus SaaS landing copy (`src/lib/launchframe-config.ts`, `launchframe.context.json`, `docs/research/LAUNCHFRAME.md`). For a **new empty folder** only, **`npx launchframe@latest`** unpacks this template; then run **`/launchframe`** in that project with your URL and pitch.
|
|
13
|
+
A reusable template for reverse-engineering any website into a clean, modern Next.js codebase using AI coding agents. The Next.js + shadcn/ui + Tailwind v4 base is pre-scaffolded — use **`/launchframe <url> "saas idea"`** for the full pixel-perfect clone plus SaaS landing copy (`src/lib/launchframe-config.ts`, `launchframe.context.json`, `docs/research/LAUNCHFRAME.md`). The agent executing **`/launchframe`** must follow **Step 0a** in that command: run **`npm run inspect:page`** once per reference URL (Playwright: `document.html`, network CSS, `motion-summary.json`) before Phase 1. For a **new empty folder** only, **`npx launchframe@latest`** unpacks this template; then run **`/launchframe`** in that project with your URL and pitch.
|
|
14
14
|
|
|
15
15
|
## Tech Stack
|
|
16
16
|
- **Framework:** Next.js 16 (App Router, React 19, TypeScript strict)
|
|
@@ -38,7 +38,7 @@ A reusable template for reverse-engineering any website into a clean, modern Nex
|
|
|
38
38
|
- **No personal aesthetic changes during emulation phase** — match 1:1 first, customize later
|
|
39
39
|
- **Real content** — use actual text and assets from the target site where they are interchangeable chrome; **`/launchframe`** overlays your SaaS pitch on headings and CTAs. **Marketing photographs and illustrative hero/feature imagery are not photocopied**: you **must** ship **committed files** under `public/images/` (etc.) for every such slot — **generate them yourself** with your host **image-generation** tool (prompts tied to the SaaS idea), wire into components, supplement with UI mock composites only if helpful. Blank placeholders count as unfinished. Record paths in `docs/research/LAUNCHFRAME.md`
|
|
40
40
|
- **Beauty-first** — every pixel matters
|
|
41
|
-
- **DOM
|
|
41
|
+
- **Inspection workflow (canonical)** — Follow the ordered **five steps** in `docs/research/INSPECTION_GUIDE.md`: (1) **Structure** — DOM as hierarchy reference, not pasted production HTML; (2) **Styles** — Computed/stylesheets and tokens; (3) **Motion** — `@keyframes`, transitions, timings, triggers; (4) **Assets** — rasters/SVGs with brand-safe originals for marketing slots when required; (5) **Implementation** — Next.js components rebuild. Within crawls (Chrome MCP / DevTools), still emphasize **images** (raster, responsive sources, CSS backgrounds), **SVGs** (inline, sprites, masks — **exact geometry**, not unrelated Lucide stand-ins), then **motion fidelity**. **Measure and mirror** from the DOM; scrape **permission-neutral** bytes when appropriate — **SVG and animation fidelity are not waived** when rasters are replaced
|
|
42
42
|
|
|
43
43
|
## Project Structure
|
|
44
44
|
```
|
|
@@ -71,89 +71,128 @@ scripts/ # Asset download scripts
|
|
|
71
71
|
|
|
72
72
|
## How to Reverse-Engineer Any Website
|
|
73
73
|
|
|
74
|
-
This guide
|
|
74
|
+
This guide is the **canonical workflow** when inspecting a target site (Chrome MCP, DevTools, or similar). Execute the steps **in order**: structure and styles establish the blueprint; motion and assets define feel and legality; implementation is always a deliberate rebuild—not a pasted dump.
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
---
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
## Step 1 — Structure (DOM hierarchy only)
|
|
79
79
|
|
|
80
|
-
|
|
81
|
-
2. **SVGs** — Inline `<svg>`, `<use>` / sprite sheets, **SVG in CSS** (`mask-image`, `background-image`), favicons as SVG, logo marks. Prefer extracting path/viewBox into React components or static files under `public/` — **recreate** from a screenshot/trace only when the markup is obfuscated or blocked.
|
|
82
|
-
3. **Motion & animation** — Inspect Styles for `animation`, `animation-name`, `animation-timeline`, `transition`, `transform`, `@keyframes`; check for libraries (Framer Motion, GSAP, Lottie, Lenis). Capture **durations, easings, delays, fill-modes**, scroll/view triggers, and `prefers-reduced-motion` handling. Motion often defines perceived quality — do not leave it as an afterthought.
|
|
80
|
+
Treat HTML as a **map of hierarchy**, not as shippable source code.
|
|
83
81
|
|
|
84
|
-
|
|
82
|
+
- **DevTools limitation:** Copying `<head>` and `<body>` with “Copy ▸ Copy outerHTML” gives **one frozen snapshot**. It omits most **stylesheet and script** behavior and may inline classes whose meaning lives in external bundles.
|
|
83
|
+
- **What to extract anyway:** Landmark regions, heading levels, nesting (sections → rows → cards), repeated patterns, form fields, navigation trees, semantic roles.
|
|
84
|
+
- **What not to do:** Do not paste a single giant HTML file into production or assume it reproduces routing, hydration, or data fetching.
|
|
85
85
|
|
|
86
|
-
|
|
86
|
+
### Component & layout checklist (supports Step 1)
|
|
87
|
+
|
|
88
|
+
**Component inventory** — For each distinct UI block, capture:
|
|
87
89
|
|
|
88
|
-
### Screenshots to Capture
|
|
89
|
-
- [ ] Every distinct page — desktop, tablet, mobile
|
|
90
|
-
- [ ] Dark mode variants (if applicable)
|
|
91
|
-
- [ ] Light mode variants (if applicable)
|
|
92
|
-
- [ ] Key interaction states (hover, active, open menus, modals)
|
|
93
|
-
- [ ] Loading/skeleton states
|
|
94
|
-
- [ ] Empty states
|
|
95
|
-
- [ ] Error states
|
|
96
|
-
|
|
97
|
-
### Design Tokens to Extract
|
|
98
|
-
- [ ] **Colors** — background, text (primary/secondary/muted), accent, border, hover, error, success, warning
|
|
99
|
-
- [ ] **Typography** — font family, sizes (h1-h6, body, caption, label), weights, line heights, letter spacing
|
|
100
|
-
- [ ] **Spacing** — padding/margin patterns (look for a scale: 4px, 8px, 12px, 16px, 24px, 32px, etc.)
|
|
101
|
-
- [ ] **Border radius** — buttons, cards, avatars, inputs
|
|
102
|
-
- [ ] **Shadows/elevation** — card shadows, dropdown shadows, modal overlay
|
|
103
|
-
- [ ] **Breakpoints** — when does the layout shift? (inspect with DevTools responsive mode)
|
|
104
|
-
- [ ] **Icons** — which icon library? custom SVGs? sizes?
|
|
105
|
-
- [ ] **Avatars** — sizes, shapes, fallback behavior
|
|
106
|
-
- [ ] **Buttons** — all variants (primary, secondary, ghost, icon-only, danger)
|
|
107
|
-
- [ ] **Inputs** — text fields, textareas, selects, checkboxes, toggles
|
|
108
|
-
|
|
109
|
-
## Phase 2: Component Inventory
|
|
110
|
-
|
|
111
|
-
For each distinct UI component, document:
|
|
112
90
|
1. **Name** — what would you call this component?
|
|
113
|
-
2. **Structure** —
|
|
114
|
-
3. **Variants** —
|
|
91
|
+
2. **Structure** — HTML elements / child components and order
|
|
92
|
+
3. **Variants** — sizes, tones, densities
|
|
115
93
|
4. **States** — default, hover, active, disabled, loading, error, empty
|
|
116
|
-
5. **Responsive behavior** —
|
|
117
|
-
6. **Interactions** — click, hover, focus, keyboard
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
-
|
|
122
|
-
-
|
|
123
|
-
-
|
|
124
|
-
-
|
|
125
|
-
-
|
|
126
|
-
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
-
|
|
131
|
-
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
- [ ] **
|
|
146
|
-
- [ ] **
|
|
147
|
-
- [ ] **
|
|
148
|
-
- [ ] **
|
|
149
|
-
- [ ] **
|
|
150
|
-
- [ ] **
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
94
|
+
5. **Responsive behavior** — changes per breakpoint
|
|
95
|
+
6. **Interactions** — click, hover, focus, keyboard
|
|
96
|
+
|
|
97
|
+
**Layout architecture**
|
|
98
|
+
|
|
99
|
+
- [ ] **Grid vs flex** — primary layout mechanism
|
|
100
|
+
- [ ] **Columns** — count per breakpoint
|
|
101
|
+
- [ ] **Max-width** — content well width
|
|
102
|
+
- [ ] **Sticky / fixed** — header, sidebars, floating CTAs
|
|
103
|
+
- [ ] **Z-index layers** — nav, overlays, tooltips
|
|
104
|
+
- [ ] **Scroll model** — normal, infinite, virtual lists, snap
|
|
105
|
+
|
|
106
|
+
**Screenshots** (tie each shot to a section in the hierarchy)
|
|
107
|
+
|
|
108
|
+
- [ ] Every distinct page — desktop, tablet, mobile
|
|
109
|
+
- [ ] Theme variants (light / dark if applicable)
|
|
110
|
+
- [ ] Hover, active, menus open, modals
|
|
111
|
+
- [ ] Loading / skeleton / empty / error states
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Step 2 — Styles (computed appearance + real CSS)
|
|
116
|
+
|
|
117
|
+
Rendered look comes from **CSS** (linked files, injected `<style>` blocks, build output)—not from raw element copy alone.
|
|
118
|
+
|
|
119
|
+
- **Per-element:** In DevTools **Styles** / **Computed**, capture what matters for fidelity: typography, spacing, colors, borders, shadows, breakpoints where rules change.
|
|
120
|
+
- **Global:** From **Sources** or **Network**, identify main stylesheets / CSS chunks; note filenames or URLs for the agents or scripts that will mirror tokens.
|
|
121
|
+
- **Design tokens to extract**
|
|
122
|
+
|
|
123
|
+
- [ ] **Colors** — background, text (primary / secondary / muted), accent, border, hover / focus, semantic (error, success, warning)
|
|
124
|
+
- [ ] **Typography** — families, scale (h1–h6, body, captions), weights, line-height, letter-spacing
|
|
125
|
+
- [ ] **Spacing** — padding/margin rhythm (e.g. 4/8/12/16…)
|
|
126
|
+
- [ ] **Radius & elevation** — cards, buttons, inputs, overlays
|
|
127
|
+
- [ ] **Breakpoints** — layout shifts (responsive mode)
|
|
128
|
+
- [ ] **Icons & avatars** — sizes, masks, fallbacks
|
|
129
|
+
|
|
130
|
+
**Technical CSS context** (informs Tailwind mapping)
|
|
131
|
+
|
|
132
|
+
- [ ] **CSS approach** — utilities vs modules vs styled components vs vanilla
|
|
133
|
+
- [ ] **Fonts** — Google, self-hosted, system stacks
|
|
134
|
+
- [ ] **Image CSS** — `object-fit`, `aspect-ratio`, background layers
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Step 3 — Motion (what moves and how)
|
|
139
|
+
|
|
140
|
+
Motion is rarely recoverable from HTML copy; it lives in **CSS animations/transitions** and often **JavaScript** (scroll, gestures, carousel timing).
|
|
141
|
+
|
|
142
|
+
- **Catalog behaviors:** Entrance, hover, focus, drag, scroll-linked, carousel stagger, modal open/close, page transitions.
|
|
143
|
+
- **From Styles / Sources:** `animation-*`, `@keyframes`, `transition`, `transform`, `will-change`; note **duration, easing, delay, fill-mode**.
|
|
144
|
+
- **Libraries:** Identify Framer Motion, GSAP, Lottie, Lenis, CSS-only, etc.
|
|
145
|
+
- **Accessibility:** Note `prefers-reduced-motion` behavior if present.
|
|
146
|
+
|
|
147
|
+
**Priority reminder:** Capture **motion early** alongside media—perceived polish depends on it; do not leave it until the end.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Step 4 — Assets (permission-neutral bytes + originals where required)
|
|
152
|
+
|
|
153
|
+
**Early capture**
|
|
154
|
+
|
|
155
|
+
1. **Raster imagery** — `<img>`, `<picture>` / `<source>`, `srcset` / `sizes`, CDN URLs, lazy `data-src`, `loading="lazy"`, **`background-image`** on elements and ancestors (including `::before` / `::after`), masks using `url()`, video posters / stills.
|
|
156
|
+
2. **SVGs** — Inline `<svg>`, `<use>` / sprites, **SVG in CSS** (`mask-image`, backgrounds), favicons. Prefer extracting path/viewBox into React components or files under `public/` — recreate from screenshot/trace only when markup is blocked or obfuscated.
|
|
157
|
+
3. **Brand-safe slots** — **Marketing photos and illustrative hero/feature art** must not be photocopied when policy requires originality: ship **committed** files under `public/images/` (etc.), generated for **your** product idea; document paths in `docs/research/LAUNCHFRAME.md`. Blank placeholders are unfinished.
|
|
158
|
+
4. **Fallbacks** — If URLs are gated, export a crisp screenshot of the element’s box (note DPR) and record the substitution in research notes.
|
|
159
|
+
|
|
160
|
+
**Technical**
|
|
161
|
+
|
|
162
|
+
- [ ] CDN vs origin paths
|
|
163
|
+
- [ ] Lazy loading and responsive image strategy
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Step 5 — Implementation (Next.js + components)
|
|
168
|
+
|
|
169
|
+
Rebuild deliberately in **this template’s stack** (Next.js App Router, React, TypeScript strict, shadcn/ui, Tailwind v4).
|
|
170
|
+
|
|
171
|
+
- **Do:** Small composable components, shared tokens, `cn()`, extracted icons in `src/components/icons.tsx` (or adjacent), routes under `src/app/`.
|
|
172
|
+
- **Don’t:** Ship one monolithic HTML string as the app or skip TypeScript/component boundaries.
|
|
173
|
+
|
|
174
|
+
### Stack parity (helps choose libraries)
|
|
175
|
+
|
|
176
|
+
- [ ] **Framework signals** — e.g. `__NEXT_DATA__`, `__NUXT__`, `ng-version`
|
|
177
|
+
- [ ] **State / data** — REST, GraphQL, client stores (infer from Network)
|
|
178
|
+
- [ ] **Animation stack** — match or approximate with CSS or an approved motion library
|
|
179
|
+
|
|
180
|
+
### Documentation output (`docs/research/`)
|
|
181
|
+
|
|
182
|
+
After inspection, produce durable notes:
|
|
183
|
+
|
|
184
|
+
1. `DESIGN_TOKENS.md` — colors, typography, spacing, radius, shadows
|
|
185
|
+
2. `COMPONENT_INVENTORY.md` — components with structure and states
|
|
186
|
+
3. `LAYOUT_ARCHITECTURE.md` — grids, breakpoints, sticky layers
|
|
187
|
+
4. `INTERACTION_PATTERNS.md` — motion, transitions, hover/focus
|
|
188
|
+
5. `TECH_STACK_ANALYSIS.md` — source stack vs chosen equivalents
|
|
189
|
+
|
|
190
|
+
### Common components to hunt for
|
|
191
|
+
|
|
192
|
+
Navigation (top/side/bottom), cards, buttons, links, forms, modals, menus, tabs, avatars/badges, skeletons, toasts, tooltips/popovers.
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Reference: Chrome MCP / agent crawl habits
|
|
197
|
+
|
|
198
|
+
Walk the DOM and network **top-down**. When multiple agents collaborate, reconcile tokens and animation specs in shared research files so Step 5 does not drift. For **`/launchframe`**, tie findings to `launchframe.context.json` and `docs/research/LAUNCHFRAME.md` per project conventions.
|
|
@@ -24,6 +24,22 @@ Before reconnaissance, write or update:
|
|
|
24
24
|
- `docs/research/LAUNCHFRAME.md` — URLs and SaaS idea
|
|
25
25
|
- **`docs/research/LAUNCHFRAME_SUBAGENTS.md`** — **before Phase 6**, ensure this runbook holds all four verifier prompts (**copy-ready**). When the bundled template differs from the latest SKILL rubrics (after skill edits), re-sync Section **Phase 6** rubrics **into this file**. Subagents receive prompts **only** from here.
|
|
26
26
|
|
|
27
|
+
### Step 0a — Automated page inspection dump (mandatory)
|
|
28
|
+
|
|
29
|
+
Right after Step 0 files are written, **from the repository root**, run the bundled **Playwright** capture **once per parsed reference URL** (before Phase 1 Chrome MCP). This produces `document.html`, network `*.css` bodies, `inline-styles.json`, and `motion-summary.json` — a frozen DOM/CSS/motion bundle to attach or diff alongside live `getComputedStyle` / WAAPI work (**this does not replace** Chrome MCP for numeric motion and interaction sweeps).
|
|
30
|
+
|
|
31
|
+
1. **One-time per machine:** `npx playwright install chromium`
|
|
32
|
+
2. **Per URL** — use the URL’s hostname for the folder (example hostname `www.example.com`):
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npm run inspect:page -- "https://www.example.com/" --scroll-full --wait-until networkidle --timeout 120000 --out-parent "docs/research/www.example.com/page-inspection"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
That creates `docs/research/<hostname>/page-inspection/<hostname>-<iso-stamp>/` with all artifacts. Omit `--out-parent` to use the default `docs/research/page-captures/<host>-<stamp>/`.
|
|
39
|
+
3. Append an **`Automated captures`** subsection to `docs/research/LAUNCHFRAME.md` listing every URL and its output directory path. Use those files in Phase 1 when structuring specs (DOM outline, stylesheet text, `@keyframes` from `motion-summary.json`) while still measuring behavior in the live tab.
|
|
40
|
+
|
|
41
|
+
If the dump fails (missing browsers, navigation timeout, TLS, bot wall), increase `--timeout`, retry with `domcontentloaded` only when necessary, or document the failure in `LAUNCHFRAME.md` and unblock before treating Phase 1 as complete.
|
|
42
|
+
|
|
27
43
|
## SaaS copy overlay (Phase 4 assembly and final polish)
|
|
28
44
|
|
|
29
45
|
After structure and styles match the reference, apply the **SaaS idea** to hero, headings, and primary CTAs where the reference uses interchangeable marketing copy, **without** changing layout grids, spacing, or **motion numbers** from extracted specs. **Icon shapes** and **animations** (`@keyframes`, transitions, staggers, scroll triggers) remain **parity goals** sourced from extraction — swapping narrative photos does **not** relax them. **Brand identity** (below) must be **original** for anything you ship as the user’s product — never pass off the reference company’s trademarks or distinctive marks.
|
|
@@ -25,6 +25,22 @@ Before reconnaissance, write or update:
|
|
|
25
25
|
- `docs/research/LAUNCHFRAME.md` — URLs and SaaS idea
|
|
26
26
|
- **`docs/research/LAUNCHFRAME_SUBAGENTS.md`** — **before Phase 6**, ensure this runbook holds all four verifier prompts (**copy-ready**). When the bundled template differs from the latest SKILL rubrics (after skill edits), re-sync Section **Phase 6** rubrics **into this file**. Subagents receive prompts **only** from here.
|
|
27
27
|
|
|
28
|
+
### Step 0a — Automated page inspection dump (mandatory)
|
|
29
|
+
|
|
30
|
+
Right after Step 0 files are written, **from the repository root**, run the bundled **Playwright** capture **once per parsed reference URL** (before Phase 1 Chrome MCP). This produces `document.html`, network `*.css` bodies, `inline-styles.json`, and `motion-summary.json` — a frozen DOM/CSS/motion bundle to attach or diff alongside live `getComputedStyle` / WAAPI work (**this does not replace** Chrome MCP for numeric motion and interaction sweeps).
|
|
31
|
+
|
|
32
|
+
1. **One-time per machine:** `npx playwright install chromium`
|
|
33
|
+
2. **Per URL** — use the URL’s hostname for the folder (example hostname `www.example.com`):
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npm run inspect:page -- "https://www.example.com/" --scroll-full --wait-until networkidle --timeout 120000 --out-parent "docs/research/www.example.com/page-inspection"
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
That creates `docs/research/<hostname>/page-inspection/<hostname>-<iso-stamp>/` with all artifacts. Omit `--out-parent` to use the default `docs/research/page-captures/<host>-<stamp>/`.
|
|
40
|
+
3. Append an **`Automated captures`** subsection to `docs/research/LAUNCHFRAME.md` listing every URL and its output directory path. Use those files in Phase 1 when structuring specs (DOM outline, stylesheet text, `@keyframes` from `motion-summary.json`) while still measuring behavior in the live tab.
|
|
41
|
+
|
|
42
|
+
If the dump fails (missing browsers, navigation timeout, TLS, bot wall), increase `--timeout`, retry with `domcontentloaded` only when necessary, or document the failure in `LAUNCHFRAME.md` and unblock before treating Phase 1 as complete.
|
|
43
|
+
|
|
28
44
|
## SaaS copy overlay (Phase 4 assembly and final polish)
|
|
29
45
|
|
|
30
46
|
After structure and styles match the reference, apply the **SaaS idea** to hero, headings, and primary CTAs where the reference uses interchangeable marketing copy, **without** changing layout grids, spacing, or **motion numbers** from extracted specs. **Icon shapes** and **animations** (`@keyframes`, transitions, staggers, scroll triggers) remain **parity goals** sourced from extraction — swapping narrative photos does **not** relax them. **Brand identity** (below) must be **original** for anything you ship as the user’s product — never pass off the reference company’s trademarks or distinctive marks.
|
|
@@ -14,7 +14,7 @@ This version has breaking changes — APIs, conventions, and file structure may
|
|
|
14
14
|
# Website Reverse-Engineer Template
|
|
15
15
|
|
|
16
16
|
## What This Is
|
|
17
|
-
A reusable template for reverse-engineering any website into a clean, modern Next.js codebase using AI coding agents. The Next.js + shadcn/ui + Tailwind v4 base is pre-scaffolded — use **`/launchframe <url> "saas idea"`** for the full pixel-perfect clone plus SaaS landing copy (`src/lib/launchframe-config.ts`, `launchframe.context.json`, `docs/research/LAUNCHFRAME.md`). For a **new empty folder** only, **`npx launchframe@latest`** unpacks this template; then run **`/launchframe`** in that project with your URL and pitch.
|
|
17
|
+
A reusable template for reverse-engineering any website into a clean, modern Next.js codebase using AI coding agents. The Next.js + shadcn/ui + Tailwind v4 base is pre-scaffolded — use **`/launchframe <url> "saas idea"`** for the full pixel-perfect clone plus SaaS landing copy (`src/lib/launchframe-config.ts`, `launchframe.context.json`, `docs/research/LAUNCHFRAME.md`). The agent executing **`/launchframe`** must follow **Step 0a** in that command: run **`npm run inspect:page`** once per reference URL (Playwright: `document.html`, network CSS, `motion-summary.json`) before Phase 1. For a **new empty folder** only, **`npx launchframe@latest`** unpacks this template; then run **`/launchframe`** in that project with your URL and pitch.
|
|
18
18
|
|
|
19
19
|
## Tech Stack
|
|
20
20
|
- **Framework:** Next.js 16 (App Router, React 19, TypeScript strict)
|
|
@@ -42,7 +42,7 @@ A reusable template for reverse-engineering any website into a clean, modern Nex
|
|
|
42
42
|
- **No personal aesthetic changes during emulation phase** — match 1:1 first, customize later
|
|
43
43
|
- **Real content** — use actual text and assets from the target site where they are interchangeable chrome; **`/launchframe`** overlays your SaaS pitch on headings and CTAs. **Marketing photographs and illustrative hero/feature imagery are not photocopied**: you **must** ship **committed files** under `public/images/` (etc.) for every such slot — **generate them yourself** with your host **image-generation** tool (prompts tied to the SaaS idea), wire into components, supplement with UI mock composites only if helpful. Blank placeholders count as unfinished. Record paths in `docs/research/LAUNCHFRAME.md`
|
|
44
44
|
- **Beauty-first** — every pixel matters
|
|
45
|
-
- **DOM
|
|
45
|
+
- **Inspection workflow (canonical)** — Follow the ordered **five steps** in `docs/research/INSPECTION_GUIDE.md`: (1) **Structure** — DOM as hierarchy reference, not pasted production HTML; (2) **Styles** — Computed/stylesheets and tokens; (3) **Motion** — `@keyframes`, transitions, timings, triggers; (4) **Assets** — rasters/SVGs with brand-safe originals for marketing slots when required; (5) **Implementation** — Next.js components rebuild. Within crawls (Chrome MCP / DevTools), still emphasize **images** (raster, responsive sources, CSS backgrounds), **SVGs** (inline, sprites, masks — **exact geometry**, not unrelated Lucide stand-ins), then **motion fidelity**. **Measure and mirror** from the DOM; scrape **permission-neutral** bytes when appropriate — **SVG and animation fidelity are not waived** when rasters are replaced
|
|
46
46
|
|
|
47
47
|
## Project Structure
|
|
48
48
|
```
|
|
@@ -75,89 +75,128 @@ scripts/ # Asset download scripts
|
|
|
75
75
|
|
|
76
76
|
## How to Reverse-Engineer Any Website
|
|
77
77
|
|
|
78
|
-
This guide
|
|
78
|
+
This guide is the **canonical workflow** when inspecting a target site (Chrome MCP, DevTools, or similar). Execute the steps **in order**: structure and styles establish the blueprint; motion and assets define feel and legality; implementation is always a deliberate rebuild—not a pasted dump.
|
|
79
79
|
|
|
80
|
-
|
|
80
|
+
---
|
|
81
81
|
|
|
82
|
-
|
|
82
|
+
## Step 1 — Structure (DOM hierarchy only)
|
|
83
83
|
|
|
84
|
-
|
|
85
|
-
2. **SVGs** — Inline `<svg>`, `<use>` / sprite sheets, **SVG in CSS** (`mask-image`, `background-image`), favicons as SVG, logo marks. Prefer extracting path/viewBox into React components or static files under `public/` — **recreate** from a screenshot/trace only when the markup is obfuscated or blocked.
|
|
86
|
-
3. **Motion & animation** — Inspect Styles for `animation`, `animation-name`, `animation-timeline`, `transition`, `transform`, `@keyframes`; check for libraries (Framer Motion, GSAP, Lottie, Lenis). Capture **durations, easings, delays, fill-modes**, scroll/view triggers, and `prefers-reduced-motion` handling. Motion often defines perceived quality — do not leave it as an afterthought.
|
|
84
|
+
Treat HTML as a **map of hierarchy**, not as shippable source code.
|
|
87
85
|
|
|
88
|
-
|
|
86
|
+
- **DevTools limitation:** Copying `<head>` and `<body>` with “Copy ▸ Copy outerHTML” gives **one frozen snapshot**. It omits most **stylesheet and script** behavior and may inline classes whose meaning lives in external bundles.
|
|
87
|
+
- **What to extract anyway:** Landmark regions, heading levels, nesting (sections → rows → cards), repeated patterns, form fields, navigation trees, semantic roles.
|
|
88
|
+
- **What not to do:** Do not paste a single giant HTML file into production or assume it reproduces routing, hydration, or data fetching.
|
|
89
89
|
|
|
90
|
-
|
|
90
|
+
### Component & layout checklist (supports Step 1)
|
|
91
|
+
|
|
92
|
+
**Component inventory** — For each distinct UI block, capture:
|
|
91
93
|
|
|
92
|
-
### Screenshots to Capture
|
|
93
|
-
- [ ] Every distinct page — desktop, tablet, mobile
|
|
94
|
-
- [ ] Dark mode variants (if applicable)
|
|
95
|
-
- [ ] Light mode variants (if applicable)
|
|
96
|
-
- [ ] Key interaction states (hover, active, open menus, modals)
|
|
97
|
-
- [ ] Loading/skeleton states
|
|
98
|
-
- [ ] Empty states
|
|
99
|
-
- [ ] Error states
|
|
100
|
-
|
|
101
|
-
### Design Tokens to Extract
|
|
102
|
-
- [ ] **Colors** — background, text (primary/secondary/muted), accent, border, hover, error, success, warning
|
|
103
|
-
- [ ] **Typography** — font family, sizes (h1-h6, body, caption, label), weights, line heights, letter spacing
|
|
104
|
-
- [ ] **Spacing** — padding/margin patterns (look for a scale: 4px, 8px, 12px, 16px, 24px, 32px, etc.)
|
|
105
|
-
- [ ] **Border radius** — buttons, cards, avatars, inputs
|
|
106
|
-
- [ ] **Shadows/elevation** — card shadows, dropdown shadows, modal overlay
|
|
107
|
-
- [ ] **Breakpoints** — when does the layout shift? (inspect with DevTools responsive mode)
|
|
108
|
-
- [ ] **Icons** — which icon library? custom SVGs? sizes?
|
|
109
|
-
- [ ] **Avatars** — sizes, shapes, fallback behavior
|
|
110
|
-
- [ ] **Buttons** — all variants (primary, secondary, ghost, icon-only, danger)
|
|
111
|
-
- [ ] **Inputs** — text fields, textareas, selects, checkboxes, toggles
|
|
112
|
-
|
|
113
|
-
## Phase 2: Component Inventory
|
|
114
|
-
|
|
115
|
-
For each distinct UI component, document:
|
|
116
94
|
1. **Name** — what would you call this component?
|
|
117
|
-
2. **Structure** —
|
|
118
|
-
3. **Variants** —
|
|
95
|
+
2. **Structure** — HTML elements / child components and order
|
|
96
|
+
3. **Variants** — sizes, tones, densities
|
|
119
97
|
4. **States** — default, hover, active, disabled, loading, error, empty
|
|
120
|
-
5. **Responsive behavior** —
|
|
121
|
-
6. **Interactions** — click, hover, focus, keyboard
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
-
|
|
126
|
-
-
|
|
127
|
-
-
|
|
128
|
-
-
|
|
129
|
-
-
|
|
130
|
-
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
-
|
|
135
|
-
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
- [ ] **
|
|
150
|
-
- [ ] **
|
|
151
|
-
- [ ] **
|
|
152
|
-
- [ ] **
|
|
153
|
-
- [ ] **
|
|
154
|
-
- [ ] **
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
98
|
+
5. **Responsive behavior** — changes per breakpoint
|
|
99
|
+
6. **Interactions** — click, hover, focus, keyboard
|
|
100
|
+
|
|
101
|
+
**Layout architecture**
|
|
102
|
+
|
|
103
|
+
- [ ] **Grid vs flex** — primary layout mechanism
|
|
104
|
+
- [ ] **Columns** — count per breakpoint
|
|
105
|
+
- [ ] **Max-width** — content well width
|
|
106
|
+
- [ ] **Sticky / fixed** — header, sidebars, floating CTAs
|
|
107
|
+
- [ ] **Z-index layers** — nav, overlays, tooltips
|
|
108
|
+
- [ ] **Scroll model** — normal, infinite, virtual lists, snap
|
|
109
|
+
|
|
110
|
+
**Screenshots** (tie each shot to a section in the hierarchy)
|
|
111
|
+
|
|
112
|
+
- [ ] Every distinct page — desktop, tablet, mobile
|
|
113
|
+
- [ ] Theme variants (light / dark if applicable)
|
|
114
|
+
- [ ] Hover, active, menus open, modals
|
|
115
|
+
- [ ] Loading / skeleton / empty / error states
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Step 2 — Styles (computed appearance + real CSS)
|
|
120
|
+
|
|
121
|
+
Rendered look comes from **CSS** (linked files, injected `<style>` blocks, build output)—not from raw element copy alone.
|
|
122
|
+
|
|
123
|
+
- **Per-element:** In DevTools **Styles** / **Computed**, capture what matters for fidelity: typography, spacing, colors, borders, shadows, breakpoints where rules change.
|
|
124
|
+
- **Global:** From **Sources** or **Network**, identify main stylesheets / CSS chunks; note filenames or URLs for the agents or scripts that will mirror tokens.
|
|
125
|
+
- **Design tokens to extract**
|
|
126
|
+
|
|
127
|
+
- [ ] **Colors** — background, text (primary / secondary / muted), accent, border, hover / focus, semantic (error, success, warning)
|
|
128
|
+
- [ ] **Typography** — families, scale (h1–h6, body, captions), weights, line-height, letter-spacing
|
|
129
|
+
- [ ] **Spacing** — padding/margin rhythm (e.g. 4/8/12/16…)
|
|
130
|
+
- [ ] **Radius & elevation** — cards, buttons, inputs, overlays
|
|
131
|
+
- [ ] **Breakpoints** — layout shifts (responsive mode)
|
|
132
|
+
- [ ] **Icons & avatars** — sizes, masks, fallbacks
|
|
133
|
+
|
|
134
|
+
**Technical CSS context** (informs Tailwind mapping)
|
|
135
|
+
|
|
136
|
+
- [ ] **CSS approach** — utilities vs modules vs styled components vs vanilla
|
|
137
|
+
- [ ] **Fonts** — Google, self-hosted, system stacks
|
|
138
|
+
- [ ] **Image CSS** — `object-fit`, `aspect-ratio`, background layers
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Step 3 — Motion (what moves and how)
|
|
143
|
+
|
|
144
|
+
Motion is rarely recoverable from HTML copy; it lives in **CSS animations/transitions** and often **JavaScript** (scroll, gestures, carousel timing).
|
|
145
|
+
|
|
146
|
+
- **Catalog behaviors:** Entrance, hover, focus, drag, scroll-linked, carousel stagger, modal open/close, page transitions.
|
|
147
|
+
- **From Styles / Sources:** `animation-*`, `@keyframes`, `transition`, `transform`, `will-change`; note **duration, easing, delay, fill-mode**.
|
|
148
|
+
- **Libraries:** Identify Framer Motion, GSAP, Lottie, Lenis, CSS-only, etc.
|
|
149
|
+
- **Accessibility:** Note `prefers-reduced-motion` behavior if present.
|
|
150
|
+
|
|
151
|
+
**Priority reminder:** Capture **motion early** alongside media—perceived polish depends on it; do not leave it until the end.
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Step 4 — Assets (permission-neutral bytes + originals where required)
|
|
156
|
+
|
|
157
|
+
**Early capture**
|
|
158
|
+
|
|
159
|
+
1. **Raster imagery** — `<img>`, `<picture>` / `<source>`, `srcset` / `sizes`, CDN URLs, lazy `data-src`, `loading="lazy"`, **`background-image`** on elements and ancestors (including `::before` / `::after`), masks using `url()`, video posters / stills.
|
|
160
|
+
2. **SVGs** — Inline `<svg>`, `<use>` / sprites, **SVG in CSS** (`mask-image`, backgrounds), favicons. Prefer extracting path/viewBox into React components or files under `public/` — recreate from screenshot/trace only when markup is blocked or obfuscated.
|
|
161
|
+
3. **Brand-safe slots** — **Marketing photos and illustrative hero/feature art** must not be photocopied when policy requires originality: ship **committed** files under `public/images/` (etc.), generated for **your** product idea; document paths in `docs/research/LAUNCHFRAME.md`. Blank placeholders are unfinished.
|
|
162
|
+
4. **Fallbacks** — If URLs are gated, export a crisp screenshot of the element’s box (note DPR) and record the substitution in research notes.
|
|
163
|
+
|
|
164
|
+
**Technical**
|
|
165
|
+
|
|
166
|
+
- [ ] CDN vs origin paths
|
|
167
|
+
- [ ] Lazy loading and responsive image strategy
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Step 5 — Implementation (Next.js + components)
|
|
172
|
+
|
|
173
|
+
Rebuild deliberately in **this template’s stack** (Next.js App Router, React, TypeScript strict, shadcn/ui, Tailwind v4).
|
|
174
|
+
|
|
175
|
+
- **Do:** Small composable components, shared tokens, `cn()`, extracted icons in `src/components/icons.tsx` (or adjacent), routes under `src/app/`.
|
|
176
|
+
- **Don’t:** Ship one monolithic HTML string as the app or skip TypeScript/component boundaries.
|
|
177
|
+
|
|
178
|
+
### Stack parity (helps choose libraries)
|
|
179
|
+
|
|
180
|
+
- [ ] **Framework signals** — e.g. `__NEXT_DATA__`, `__NUXT__`, `ng-version`
|
|
181
|
+
- [ ] **State / data** — REST, GraphQL, client stores (infer from Network)
|
|
182
|
+
- [ ] **Animation stack** — match or approximate with CSS or an approved motion library
|
|
183
|
+
|
|
184
|
+
### Documentation output (`docs/research/`)
|
|
185
|
+
|
|
186
|
+
After inspection, produce durable notes:
|
|
187
|
+
|
|
188
|
+
1. `DESIGN_TOKENS.md` — colors, typography, spacing, radius, shadows
|
|
189
|
+
2. `COMPONENT_INVENTORY.md` — components with structure and states
|
|
190
|
+
3. `LAYOUT_ARCHITECTURE.md` — grids, breakpoints, sticky layers
|
|
191
|
+
4. `INTERACTION_PATTERNS.md` — motion, transitions, hover/focus
|
|
192
|
+
5. `TECH_STACK_ANALYSIS.md` — source stack vs chosen equivalents
|
|
193
|
+
|
|
194
|
+
### Common components to hunt for
|
|
195
|
+
|
|
196
|
+
Navigation (top/side/bottom), cards, buttons, links, forms, modals, menus, tabs, avatars/badges, skeletons, toasts, tooltips/popovers.
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## Reference: Chrome MCP / agent crawl habits
|
|
201
|
+
|
|
202
|
+
Walk the DOM and network **top-down**. When multiple agents collaborate, reconcile tokens and animation specs in shared research files so Step 5 does not drift. For **`/launchframe`**, tie findings to `launchframe.context.json` and `docs/research/LAUNCHFRAME.md` per project conventions.
|
|
@@ -20,6 +20,22 @@ Before reconnaissance, write or update:
|
|
|
20
20
|
- `docs/research/LAUNCHFRAME.md` — URLs and SaaS idea
|
|
21
21
|
- **`docs/research/LAUNCHFRAME_SUBAGENTS.md`** — **before Phase 6**, ensure this runbook holds all four verifier prompts (**copy-ready**). When the bundled template differs from the latest SKILL rubrics (after skill edits), re-sync Section **Phase 6** rubrics **into this file**. Subagents receive prompts **only** from here.
|
|
22
22
|
|
|
23
|
+
### Step 0a — Automated page inspection dump (mandatory)
|
|
24
|
+
|
|
25
|
+
Right after Step 0 files are written, **from the repository root**, run the bundled **Playwright** capture **once per parsed reference URL** (before Phase 1 Chrome MCP). This produces `document.html`, network `*.css` bodies, `inline-styles.json`, and `motion-summary.json` — a frozen DOM/CSS/motion bundle to attach or diff alongside live `getComputedStyle` / WAAPI work (**this does not replace** Chrome MCP for numeric motion and interaction sweeps).
|
|
26
|
+
|
|
27
|
+
1. **One-time per machine:** `npx playwright install chromium`
|
|
28
|
+
2. **Per URL** — use the URL’s hostname for the folder (example hostname `www.example.com`):
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npm run inspect:page -- "https://www.example.com/" --scroll-full --wait-until networkidle --timeout 120000 --out-parent "docs/research/www.example.com/page-inspection"
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
That creates `docs/research/<hostname>/page-inspection/<hostname>-<iso-stamp>/` with all artifacts. Omit `--out-parent` to use the default `docs/research/page-captures/<host>-<stamp>/`.
|
|
35
|
+
3. Append an **`Automated captures`** subsection to `docs/research/LAUNCHFRAME.md` listing every URL and its output directory path. Use those files in Phase 1 when structuring specs (DOM outline, stylesheet text, `@keyframes` from `motion-summary.json`) while still measuring behavior in the live tab.
|
|
36
|
+
|
|
37
|
+
If the dump fails (missing browsers, navigation timeout, TLS, bot wall), increase `--timeout`, retry with `domcontentloaded` only when necessary, or document the failure in `LAUNCHFRAME.md` and unblock before treating Phase 1 as complete.
|
|
38
|
+
|
|
23
39
|
## SaaS copy overlay (Phase 4 assembly and final polish)
|
|
24
40
|
|
|
25
41
|
After structure and styles match the reference, apply the **SaaS idea** to hero, headings, and primary CTAs where the reference uses interchangeable marketing copy, **without** changing layout grids, spacing, or **motion numbers** from extracted specs. **Icon shapes** and **animations** (`@keyframes`, transitions, staggers, scroll triggers) remain **parity goals** sourced from extraction — swapping narrative photos does **not** relax them. **Brand identity** (below) must be **original** for anything you ship as the user’s product — never pass off the reference company’s trademarks or distinctive marks.
|
|
@@ -24,6 +24,22 @@ Before reconnaissance, write or update:
|
|
|
24
24
|
- `docs/research/LAUNCHFRAME.md` — URLs and SaaS idea
|
|
25
25
|
- **`docs/research/LAUNCHFRAME_SUBAGENTS.md`** — **before Phase 6**, ensure this runbook holds all four verifier prompts (**copy-ready**). When the bundled template differs from the latest SKILL rubrics (after skill edits), re-sync Section **Phase 6** rubrics **into this file**. Subagents receive prompts **only** from here.
|
|
26
26
|
|
|
27
|
+
### Step 0a — Automated page inspection dump (mandatory)
|
|
28
|
+
|
|
29
|
+
Right after Step 0 files are written, **from the repository root**, run the bundled **Playwright** capture **once per parsed reference URL** (before Phase 1 Chrome MCP). This produces `document.html`, network `*.css` bodies, `inline-styles.json`, and `motion-summary.json` — a frozen DOM/CSS/motion bundle to attach or diff alongside live `getComputedStyle` / WAAPI work (**this does not replace** Chrome MCP for numeric motion and interaction sweeps).
|
|
30
|
+
|
|
31
|
+
1. **One-time per machine:** `npx playwright install chromium`
|
|
32
|
+
2. **Per URL** — use the URL’s hostname for the folder (example hostname `www.example.com`):
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npm run inspect:page -- "https://www.example.com/" --scroll-full --wait-until networkidle --timeout 120000 --out-parent "docs/research/www.example.com/page-inspection"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
That creates `docs/research/<hostname>/page-inspection/<hostname>-<iso-stamp>/` with all artifacts. Omit `--out-parent` to use the default `docs/research/page-captures/<host>-<stamp>/`.
|
|
39
|
+
3. Append an **`Automated captures`** subsection to `docs/research/LAUNCHFRAME.md` listing every URL and its output directory path. Use those files in Phase 1 when structuring specs (DOM outline, stylesheet text, `@keyframes` from `motion-summary.json`) while still measuring behavior in the live tab.
|
|
40
|
+
|
|
41
|
+
If the dump fails (missing browsers, navigation timeout, TLS, bot wall), increase `--timeout`, retry with `domcontentloaded` only when necessary, or document the failure in `LAUNCHFRAME.md` and unblock before treating Phase 1 as complete.
|
|
42
|
+
|
|
27
43
|
## SaaS copy overlay (Phase 4 assembly and final polish)
|
|
28
44
|
|
|
29
45
|
After structure and styles match the reference, apply the **SaaS idea** to hero, headings, and primary CTAs where the reference uses interchangeable marketing copy, **without** changing layout grids, spacing, or **motion numbers** from extracted specs. **Icon shapes** and **animations** (`@keyframes`, transitions, staggers, scroll triggers) remain **parity goals** sourced from extraction — swapping narrative photos does **not** relax them. **Brand identity** (below) must be **original** for anything you ship as the user’s product — never pass off the reference company’s trademarks or distinctive marks.
|