launchframe 0.4.7 → 0.4.9
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 +2 -2
- package/.amazonq/rules/project.md +5 -4
- package/.augment/commands/launchframe.md +33 -19
- package/.claude/skills/launchframe/SKILL.md +33 -18
- package/.clinerules +5 -4
- package/.codex/skills/launchframe/SKILL.md +33 -18
- package/.continue/commands/launchframe.md +33 -19
- package/.continue/rules/project.md +5 -4
- package/.cursor/commands/launchframe.md +32 -18
- package/.gemini/commands/launchframe.toml +33 -19
- package/.github/copilot-instructions.md +5 -4
- package/.github/skills/launchframe/SKILL.md +33 -18
- package/.opencode/commands/launchframe.md +33 -19
- package/.windsurf/workflows/launchframe.md +32 -18
- package/AGENTS.md +5 -4
- package/docs/research/LAUNCHFRAME_SUBAGENTS.md +73 -0
- package/package.json +1 -1
- package/scripts/sync-skills.mjs +288 -117
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
name: launchframe
|
|
3
3
|
description: Pixel-perfect reverse-engineer of a reference URL into this repo, plus SaaS landing copy — the only clone slash command for this template. Invoked as /launchframe.
|
|
4
4
|
argument-hint: '<url> "<saas-idea>"'
|
|
5
|
+
argument-substitution: the reference URL(s) and SaaS idea the user passed with /launchframe
|
|
5
6
|
user-invocable: true
|
|
6
7
|
---
|
|
7
8
|
|
|
@@ -12,7 +13,7 @@ user-invocable: true
|
|
|
12
13
|
1. **Reference URL(s)** — Every `http://` or `https://` token (clone each site; use `docs/research/<hostname>/` when there are multiple).
|
|
13
14
|
2. **SaaS idea** — All remaining text that is not a URL (often quoted): product pitch for hero and key marketing lines.
|
|
14
15
|
|
|
15
|
-
You are a **foreman walking the job site** — write specs per section, dispatch builders in parallel where possible, **
|
|
16
|
+
You are a **foreman walking the job site** — write specs per section, dispatch builders in parallel where possible. After Phase 5, **`docs/research/LAUNCHFRAME_SUBAGENTS.md`** defines the **verbatim prompts** you must use to run verification (either four parallel **`Task`/subagents** fed one prompt each — **paste from that file only**, not from memory — or execute those four prompts **yourself sequentially**). Aggregate results only in **`docs/research/LAUNCHFRAME_VERIFICATION.md`**. **Never skip Phase 6** because subagents didn't auto-start — you initiate them explicitly from the Markdown prompt blocks. Narrative/marketing raster slots use **imagery your session generates itself** with the host’s **image-generation** tool (saved into `public/images/`), not missing assets — see **Brand identity**. Verification still covers raster slots, extracted **SVG/icons**, DOM, CSS, and **motion choreography**.
|
|
16
17
|
|
|
17
18
|
## Step 0 — Persist Launchframe inputs
|
|
18
19
|
|
|
@@ -21,10 +22,11 @@ Before reconnaissance, write or update:
|
|
|
21
22
|
- `src/lib/launchframe-config.ts` — `LAUNCHFRAME_SOURCE_URL` (primary URL, usually first), `LAUNCHFRAME_SAAS_IDEA`
|
|
22
23
|
- `launchframe.context.json`
|
|
23
24
|
- `docs/research/LAUNCHFRAME.md` — URLs and SaaS idea
|
|
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.
|
|
24
26
|
|
|
25
27
|
## SaaS copy overlay (Phase 4 assembly and final polish)
|
|
26
28
|
|
|
27
|
-
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 from extracted specs. **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.
|
|
29
|
+
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.
|
|
28
30
|
|
|
29
31
|
---
|
|
30
32
|
|
|
@@ -32,11 +34,12 @@ After structure and styles match the reference, apply the **SaaS idea** to hero,
|
|
|
32
34
|
|
|
33
35
|
The target page(s) are the URL(s) you parsed in Pre-Flight. Clone exactly what's visible at each URL. Unless the user specifies otherwise, use these defaults:
|
|
34
36
|
|
|
35
|
-
- **Fidelity level:** Pixel-perfect — exact match in colors, spacing, typography, animations, **
|
|
37
|
+
- **Fidelity level:** Pixel-perfect — exact match in colors, spacing, typography, **SVG icon presentation** (dimensions, strokes, fills, `viewBox`), **animations** (`@keyframes`, `animation*` / `transition*`, WA API timings, scroll timelines), raster **presentation** (responsive markup + CSS painting), **DOM structure**, and **authored CSS intent** (computed values must match after extraction)
|
|
36
38
|
- **In scope:** Visual layout and styling, component structure and interactions, responsive design, mock data for demo purposes
|
|
37
39
|
- **Out of scope:** Real backend / database, authentication, real-time features, SEO optimization, accessibility audit
|
|
38
40
|
- **Customization:** Structure and visuals — pure emulation of the reference. **Marketing copy** — apply the parsed **SaaS idea** where hero/headlines/CTAs are interchangeable (see “SaaS copy overlay” above); do not invent a different product than the user’s idea.
|
|
39
|
-
- **Brand identity:** The reference is a **pattern** for layout, motion, and UI craft — **not** permission to ship their brand. Unless the user **explicitly** asks for a faithful copy of the reference brand (e.g. licensed work, clearly labeled internal mock, private design audit), **invent an original brand** aligned with the SaaS idea: product name, wordmark or simple logomark (SVG or styled text) sized to the same logo slot, favicon / app icon, OG imagery, and a cohesive palette. Do **not** reuse their trademarked logo paths, mascot art, or distinctive illustrative brand assets; use originals or functional UI icons instead.
|
|
41
|
+
- **Brand identity:** The reference is a **pattern** for layout, motion, and UI craft — **not** permission to ship their brand. Unless the user **explicitly** asks for a faithful copy of the reference brand (e.g. licensed work, clearly labeled internal mock, private design audit), **invent an original brand** aligned with the SaaS idea: product name, wordmark or simple logomark (SVG or styled text) sized to the same logo slot, favicon / app icon, OG imagery, and a cohesive palette. Do **not** reuse their trademarked logo paths, mascot art, or distinctive illustrative brand assets; use originals or functional UI icons instead. **Every raster slot** that is a photograph, illustration, or narrative marketing image on the reference (hero, feature mockups, social proof portraits, decorative panels, card thumbnails) must ship as **new, original imagery** grounded in the **SaaS idea** — treat the reference shot as a **composition brief** (aspect ratio, mood, subject *role*: dashboard vs lifestyle vs avatar) and recreate with product-relevant scenes, UI surrogates, logosafe crops, or **supporting sub-frames** (detail insets, secondary panels) that read as one family. **Mandatory delivery:** those slots **must** have real raster files checked into `public/images/` (or another committed static path your build serves) — **no** omitted `<img>`/`<Image>`, **no** indefinite placeholder divs/colors standing in for a photo where the reference showed one, **no** broken `href/src`. **You generate these files yourself:** use your host's **built-in image generation** capability (explicit image prompts aligned to the SaaS idea + composition brief from each reference slot), write outputs into `public/images/`, wire them into JSX, and note each file in `docs/research/LAUNCHFRAME.md`. You may **supplement** with composites or screenshots of **your** product UI mocks you build in code, but you **do not** wait for the user to supply artwork. Preserve **exact** framing CSS (`object-fit`, `object-position`, masks, layering). Do **not** hotlink or ship their competitor lifestyle/brand photography bytes except when the user explicitly allows it. Note in `docs/research/LAUNCHFRAME.md` which marks and assets are **original brand** versus **layout-only** extraction, and **list paths** for every authored narrative image.
|
|
42
|
+
- **Functional icons & motion choreography:** Anything the reference treats as **UI iconography that is not a forbidden trademark** (chevrons, menu marks, inline pictograms, sprite symbols, repeating UI glyphs) — **lift path data / sprite refs / mask SVGs from the DOM** and reproduce **`viewBox`, stroke widths, joins, fills, `currentColor` behavior.** Do **not** swap in unrelated Lucide (or arbitrary stock SVG) guesses "that look close." **`@keyframes`**, **`transition` / `animation` longhands**, scroll-driven timelines, carousel timings, stagger delays, easing curves — **lift from live measurement + stylesheet text** per §0.3 — **omit or substitute timing only** when respecting `prefers-reduced-motion` or when the measured reference does the same. Product-themed raster replacements do **not** waive SVG or animation parity.
|
|
40
43
|
|
|
41
44
|
If the user provides additional instructions (specific fidelity level, customizations, extra context), honor those over the defaults.
|
|
42
45
|
|
|
@@ -59,9 +62,9 @@ When you traverse the DOM and the Network panel, do **not** treat all nodes equa
|
|
|
59
62
|
1. **Images (raster + video stills) — HTML, files, and CSS together** — Enumeration is not enough: the clone must match **how** each asset is mounted and styled.
|
|
60
63
|
- **Markup parity:** Preserve `<picture>` / `<source>` **order**, **`media` / `type`** attributes, and **`sizes`** where the reference uses them; preserve **`srcset`** descriptor patterns (w/x qualifiers) on `<img>` or **equivalent** `next/image` `sizes` + `srcSet` (document the mapping in the spec). Copy **`loading`**, **`decoding`**, **`fetchpriority`**, **`alt`**, **`role`/`aria-*`** when they affect layout or LCP. **`width` / `height`** (or intrinsic aspect + CSS `aspect-ratio`) must stop layout shift the same way as the reference; note **`width`/`height` attributes vs CSS** if both exist.
|
|
61
64
|
- **Box + painting:** Extract and reproduce **`object-fit`**, **`object-position`**, **parent `overflow`**, **clipping `border-radius`**, **masks**, **`filter`**, and **`mix-blend-mode`** on the same stacking context as the live node. **`background-image`** on the element or **`::before` / `::after`** must use the **same** cover/contain behavior, **position**, **size**, **repeat**, and **attachment** (record pseudo-elements explicitly in the spec).
|
|
62
|
-
- **Files:**
|
|
63
|
-
2. **SVGs & iconography
|
|
64
|
-
3. **Motion & animation (Chrome MCP)
|
|
65
|
+
- **Files:** For **structural/decorative or permission-neutral** imagery (textures, gradients, generic UI chrome where no competitor brand reads), download real bytes to `public/images/` (or videos/posters). **Provenance** in spec: URL hash or byte size so verifiers can confirm the correct asset. For **brand- or product-story** photos and illustrations per Scope Defaults, **do not** pass off the reference files as yours — replace with originals saved under `public/images/` with spec lines **substitute — product-themed** (describe intent vs reference role). No unrelated stock swaps unless similarly marked.
|
|
66
|
+
2. **SVGs & iconography — copy glyphs, don't improvise.** Inline `<svg>`, sprite `symbol` defs, **SVG used as masks/filters**, icon fonts (**prefer extracting vector paths**, not swapping fonts blindly). Convert to `@/components/icons.tsx` (or section-local components) with meaningful names. **Ship the reference geometry**: matching `viewBox`, path coordinates, strokes/caps/joins — verify at 1× and 2× DPR beside a screenshot overlay. Replacing forbidden trademark marks is done under Brand identity with **equivalent silhouette area + optical weight**, not a random different icon shape.
|
|
67
|
+
3. **Motion & animation (Chrome MCP) — copy choreography, omit nothing casually.** Treat this like color and spacing: **numeric fidelity**. If the reference animates **on load, hover, scroll, intersection, drag, carousel tick, or tab change**, capture and port it unless `prefers-reduced-motion` or an explicit exemption says otherwise — a static clone while the reference moves is wrong. In Chrome MCP, evaluate scripts against the live page to capture:
|
|
65
68
|
- Full **`animation`** shorthand plus **`animation-*` longhands** (`animation-name`, `-duration`, `-delay`, `-timing-function`, `-iteration-count`, `-direction`, `-fill-mode`, `-play-state`, **`animation-timeline`** / scroll timelines)
|
|
66
69
|
- Full **`transition`** shorthand plus **`transition-*` longhands**, and **`transform`** / **`will-change`** as applied during and after motion
|
|
67
70
|
- **Author `@keyframes`** — walk `document.styleSheets` / `cssRules` and copy `CSSKeyframesRule` bodies **where the browser exposes them** (same-origin stylesheets). For cross-origin CSS that throws on access, use DevTools **Sources** or fetch the CSS URL and paste the `@keyframes` into the spec — do not guess intermediate keyframe percentages
|
|
@@ -94,9 +97,7 @@ Look at each section and judge its complexity. A simple banner with a heading an
|
|
|
94
97
|
|
|
95
98
|
### 3. Real Content, Real Assets
|
|
96
99
|
|
|
97
|
-
Extract the
|
|
98
|
-
|
|
99
|
-
**Prioritize** (see §0): downloadable imagery and backgrounds first, then SVG/icon layers, then motion. If you must **fabricate** an asset, prefer screenshot-based exports or traced vectors tied to measured box sizes — avoid unrelated stock art.
|
|
100
|
+
Extract the **verbatim marketing copy only where it is layout boilerplate**; otherwise apply the SaaS idea. For **pixels**: extract **dimensions, layering, masks, responsive markup, and filenames/paths needed for parity**, but treat **marketing photos and illustrative brand art** per Scope Defaults — **authored originals** tied to the product (including cohesive **sub-images** where the reference uses a small secondary crop or inset), not a gallery of their stock photography. Structural assets (patterns, screenshots of generic UI motifs you rebuild) follow §0 extraction. **Functional icons (`<svg>`/sprites) and all motion choreography are copied from extraction** alongside that — originals-for-product applies to narrative **raster** slots, **not** to carte-blanche SVG or timing drift. Download every reference `<video>` poster and neutral asset you keep; extract inline `<svg>` elements as React components unless they encode trademark marks forbidden under Brand identity (replace with equivalent optical weight there). Fabricate raster/vector only when extraction is blocked — label **substitute** in specs and research notes — and **avoid unrelated stock**; stay on-theme for the SaaS idea.
|
|
100
101
|
|
|
101
102
|
**Layered assets matter.** A section that looks like one image is often multiple layers — a background watercolor/gradient, a foreground UI mockup PNG, an overlay icon. Inspect each container's full DOM tree and enumerate ALL `<img>` elements and background images within it, including absolutely-positioned overlays. Missing an overlay image makes the clone look empty even if the background is correct.
|
|
102
103
|
|
|
@@ -546,26 +547,37 @@ After assembly, do NOT declare the clone complete. Take side-by-side comparison
|
|
|
546
547
|
5. Test all interactive behaviors: scroll through the page, click every button/tab, hover over interactive elements
|
|
547
548
|
6. **Motion QA:** Re-run the **motion audit script** (or per-element `getAnimations`) on the reference and spot-check the clone in devtools — **durations, delays, and easing curves must match** (e.g. 320ms vs 300ms is a failure). Re-scroll hero and sticky headers; carousels and scroll-driven sections must trigger at the same thresholds documented in `BEHAVIORS.md`
|
|
548
549
|
|
|
549
|
-
Only after this visual QA pass is the clone ready for **
|
|
550
|
+
Only after this visual QA pass is the clone ready for **Phase 6 verification**. Immediately **confirm `docs/research/LAUNCHFRAME_SUBAGENTS.md`** contains four self-contained **`## Prompt — Pass N`** sections matching the Phase 6 rubrics; update that file whenever you change rubric wording locally.
|
|
551
|
+
|
|
552
|
+
## Phase 6: Verification passes (mandatory)
|
|
553
|
+
|
|
554
|
+
Foreman skim is insufficient — someone must execute **all four prompts in `LAUNCHFRAME_SUBAGENTS.md`** before you call Launchframe complete.
|
|
555
|
+
|
|
556
|
+
### How to run them (hosts differ)
|
|
550
557
|
|
|
551
|
-
|
|
558
|
+
| Host capability | What you must do |
|
|
559
|
+
|-----------------|------------------|
|
|
560
|
+
| **Parallel agents / Task / subagents** | Open **`docs/research/LAUNCHFRAME_SUBAGENTS.md`**. Dispatch **four** separate runs — each agent receives **exactly one** complete `## Prompt — Pass …` section copied **verbatim from that Markdown file**. Prefer **`explore`/readonly**. Do **not** paraphrase the rubric from chat memory. Claude Code-style teams: follow **`AGENTS.md`** — isolated **worktrees/branches per checker**, then merge after triage. |
|
|
561
|
+
| **Single agent / no spawning** | Open the same Markdown file and **execute prompts 1 → 4 yourself** in order, appending **`docs/research/LAUNCHFRAME_VERIFICATION.md`** after each (`### Pass N`, findings, **`VERDICT: PASS`** or **`FAIL`**) per that file's **Output contract**. |
|
|
552
562
|
|
|
553
|
-
|
|
563
|
+
**Do not** mark Launchframe done because verification “doesn’t apply” — it always applies. **Prompts live in Markdown** so runs are repeatable and auditable.
|
|
554
564
|
|
|
555
|
-
**Minimum four verification passes** (
|
|
565
|
+
**Minimum four verification passes** (four subagents **or** four self-executed steps — prompts sourced from **`LAUNCHFRAME_SUBAGENTS.md`;** the authoritative rubric text below must stay mirrored there):
|
|
556
566
|
|
|
557
|
-
1. **
|
|
567
|
+
1. **Raster media & icons** — **Narrative slots:** inventory every reference marketing/lifestyle/card/hero image role from specs vs **committed files** (`public/images/...`) actually referenced in JSX; **`FAIL`** if the reference showed a photo/panel thumbnail and this clone relies on placeholders or bare gradients. Then list every raster/video poster and **every authored SVG/component used as an icon** from `src/`. Confirm **files exist** under `public/` with **correct paths** where expected; compare presentation to specs: **`picture`/`source` behavior**, **`sizes` / responsive behavior**, **`object-fit` / `object-position`**, dimensions/aspect-ratio, **parent overflow and radius**, **`background-image`** and **pseudo-elements**. For SVGs/icons: **`viewBox`**, strokes/fills/`currentColor`, and sprite usage must match specs — reject opportunistic Lucide substitutions unless the spec explicitly allowed them. Flag wrong crops, missing layers, or lazy `next/image` `fill` misuse.
|
|
558
568
|
2. **HTML / DOM structure** — Diff **PAGE_TOPOLOGY.md** + component specs against the React tree: **section order**, **wrapper count**, **sibling order**, scroll/sticky containers. Any flattened structure that changes stacking or scroll must be **FAIL** until fixed.
|
|
559
569
|
3. **CSS parity** — Spot-check **hero, nav, first fold, footer** (and any section flagged risky) against spec CSS: tokens in **`globals.css`**, arbitrary Tailwind vs measured px, **keyframes** presence. Run **`npm run lint`** and **`npm run typecheck`** inside the verification worktree; failures = **FAIL** until green.
|
|
560
570
|
4. **Motion & interaction** — Re-walk **`docs/research/BEHAVIORS.md`** and motion audit JSON: headers, carousels, scroll-driven UI, smooth-scroll libs. Phase 5 motion QA must be **confirmed**, not assumed.
|
|
561
571
|
|
|
562
|
-
Each
|
|
572
|
+
Each pass (whether another agent or you) returns **`PASS` or `FAIL`**, a **bullet list** of issues with **`file:line`** pointers, and **suggested fixes**. The foreman **resolves or explicitly documents** every `FAIL` (deferred items listed in the completion report under **Known gaps**). **First rubric checklist includes:** confirm **every narrative image slot** from specs has **on-disk raster files** wired in JSX — **`FAIL`** if any slot is placeholder-only while the reference showed imagery. **Do not** declare Launchframe complete until all four passes **`PASS`** or gaps are accepted by the user context.
|
|
563
573
|
|
|
564
574
|
## Pre-Dispatch Checklist
|
|
565
575
|
|
|
566
576
|
Before dispatching ANY builder agent, verify you can check every box. If you can't, go back and extract more.
|
|
567
577
|
|
|
578
|
+
- [ ] **Authored narrative rasters planned:** list each marketing/lifestyle/card image slot vs **planned `public/images/...` path** (Brand identity originals). No section ships with “TODO image” once built
|
|
568
579
|
- [ ] **Image markup + styling** captured in spec: `picture`/`source`/`sizes`/`srcset` (or documented `next/image` mapping), `object-fit`/`object-position`, clipping parents, pseudo-element backgrounds if any
|
|
580
|
+
- [ ] **Icon/SVG snippets** inlined in spec where needed: dominant paths or sprite `id`s, **`viewBox`**, stroke/fill rules — enough that a builder does not guess Lucide substitutions
|
|
569
581
|
- [ ] **DOM outline** included for non-trivial sections (wrappers, order)
|
|
570
582
|
- [ ] Spec file written to `docs/research/components/<name>.spec.md` with ALL sections filled
|
|
571
583
|
- [ ] Every CSS value in the spec is from `getComputedStyle()`, not estimated
|
|
@@ -599,7 +611,9 @@ These are lessons from previous failed clones — each one cost hours of rework:
|
|
|
599
611
|
- **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.
|
|
600
612
|
- **Don't collapse responsive image markup.** Dropping `<picture>` / `<source media="…">` or `sizes` so “one JPEG is enough” changes which URL loads and breaks fidelity — mirror the reference’s responsive strategy.
|
|
601
613
|
- **Don't guess motion.** If `transition-duration` is 280ms with `cubic-bezier(0.4, 0, 0.2, 1)`, the clone must use those exact values from Chrome MCP — not "about 0.3s ease."
|
|
602
|
-
- **Don't
|
|
614
|
+
- **Don't swap reference-specific SVG/UI icons for random Lucide** (or unrelated stock glyphs) unless the spec proves geometric equivalence — extract the DOM paths/sprites instead.
|
|
615
|
+
- **Don't declare Launchframe finished without Phase 6.** Execute the four **`LAUNCHFRAME_SUBAGENTS.md`** prompts (via **Task**/subagents or yourself) and write **`LAUNCHFRAME_VERIFICATION.md`** with four **`PASS`**/**`FAIL`** verdicts — “subagents wouldn't start” is not an excuse to skip opening the Markdown runbook.
|
|
616
|
+
- **Don't ship marketing image slots empty.** Narrative raster roles need real files under **`public/images/`** (or equivalent): no permanent gray boxes where the reference had photography.
|
|
603
617
|
|
|
604
618
|
## Completion
|
|
605
619
|
|
|
@@ -608,7 +622,8 @@ When done, report:
|
|
|
608
622
|
- Total components created
|
|
609
623
|
- Total spec files written (should match components)
|
|
610
624
|
- Total assets downloaded (images, videos, SVGs, fonts)
|
|
625
|
+
- **`public/images/` (and similar)** — explicit list of **authored narrative** raster files produced for Brand identity slots (paths + intent)
|
|
611
626
|
- Build status (`npm run build` result)
|
|
612
627
|
- Visual QA results (any remaining discrepancies)
|
|
613
|
-
- **
|
|
628
|
+
- **Phase 6 verification:** cite **`docs/research/LAUNCHFRAME_SUBAGENTS.md`** (prompt source) **`docs/research/LAUNCHFRAME_VERIFICATION.md`** (results), summarize four passes with **PASS/FAIL** each; unresolved items under **Known gaps**
|
|
614
629
|
- Any known gaps or limitations
|
package/.clinerules
CHANGED
|
@@ -15,7 +15,7 @@ A reusable template for reverse-engineering any website into a clean, modern Nex
|
|
|
15
15
|
## Tech Stack
|
|
16
16
|
- **Framework:** Next.js 16 (App Router, React 19, TypeScript strict)
|
|
17
17
|
- **UI:** shadcn/ui (Radix primitives, Tailwind CSS v4, `cn()` utility)
|
|
18
|
-
- **Icons:** Lucide
|
|
18
|
+
- **Icons:** Lucide ships as a default only — **`/launchframe` clones must lift reference SVG sprites/paths/masks first** so UI icons match the source; Lucide fills gaps only where documented equivalent
|
|
19
19
|
- **Styling:** Tailwind CSS v4 with oklch design tokens
|
|
20
20
|
- **Deployment:** Vercel
|
|
21
21
|
|
|
@@ -36,9 +36,9 @@ A reusable template for reverse-engineering any website into a clean, modern Nex
|
|
|
36
36
|
## Design Principles
|
|
37
37
|
- **Pixel-perfect emulation** — match the target's spacing, colors, typography exactly
|
|
38
38
|
- **No personal aesthetic changes during emulation phase** — match 1:1 first, customize later
|
|
39
|
-
- **Real content** — use actual text and assets from the target site
|
|
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 crawl priority** — when walking the target page, emphasize **images** (raster, responsive sources, CSS backgrounds), **SVGs** (inline icons, sprites, masks), then **motion** (keyframes
|
|
41
|
+
- **DOM crawl priority** — when walking the target page, emphasize **images** (raster, responsive sources, CSS backgrounds), **SVGs** (inline icons, sprites, masks — **copy extracted geometry**, do not approximate with unrelated Lucide glyphs), then **motion** (**copy** `@keyframes`, `transition`/`animation` timings, scroll triggers, carousel staggers via Chrome MCP / CSS sources). **Measure and mirror** mounting and styling from the DOM; scrape **permission-neutral** bytes when appropriate. When a raster slot must be original for brand safety, **author** replacements and label them in research notes — **that never waives SVG or animation fidelity**
|
|
42
42
|
|
|
43
43
|
## Project Structure
|
|
44
44
|
```
|
|
@@ -63,8 +63,9 @@ scripts/ # Asset download scripts
|
|
|
63
63
|
|
|
64
64
|
## MOST IMPORTANT NOTES
|
|
65
65
|
- When launching Claude Code agent teams, ALWAYS have each teammate work in their own worktree branch and merge everyone's work at the end, resolving any merge conflicts smartly since you are basically serving the orchestrator role and have full context to our goals, work given, work achieved, and desired outcomes.
|
|
66
|
+
- **`/launchframe` Phase 6 verification** must always run: prompt text lives in **`docs/research/LAUNCHFRAME_SUBAGENTS.md`**; results in **`docs/research/LAUNCHFRAME_VERIFICATION.md`**. Use four parallel **Task**/subagents (paste one `## Prompt — Pass …` section per agent) or run all four sequentially yourself — never skip verification.
|
|
66
67
|
- After editing `AGENTS.md`, run `bash scripts/sync-agent-rules.sh` to regenerate platform-specific instruction files.
|
|
67
|
-
- After editing `.claude/skills
|
|
68
|
+
- After editing **any** `SKILL.md` under `.claude/skills/<skill-id>/`, run `node scripts/sync-skills.mjs` to regenerate that skill’s slash commands/workflows for **every supported platform** (discovered automatically).
|
|
68
69
|
|
|
69
70
|
# Website Inspection Guide
|
|
70
71
|
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
name: launchframe
|
|
3
3
|
description: Pixel-perfect reverse-engineer of a reference URL into this repo, plus SaaS landing copy — the only clone slash command for this template. Invoked as /launchframe.
|
|
4
4
|
argument-hint: '<url> "<saas-idea>"'
|
|
5
|
+
argument-substitution: the reference URL(s) and SaaS idea the user passed with /launchframe
|
|
5
6
|
user-invocable: true
|
|
6
7
|
---
|
|
7
8
|
|
|
@@ -12,7 +13,7 @@ user-invocable: true
|
|
|
12
13
|
1. **Reference URL(s)** — Every `http://` or `https://` token (clone each site; use `docs/research/<hostname>/` when there are multiple).
|
|
13
14
|
2. **SaaS idea** — All remaining text that is not a URL (often quoted): product pitch for hero and key marketing lines.
|
|
14
15
|
|
|
15
|
-
You are a **foreman walking the job site** — write specs per section, dispatch builders in parallel where possible, **
|
|
16
|
+
You are a **foreman walking the job site** — write specs per section, dispatch builders in parallel where possible. After Phase 5, **`docs/research/LAUNCHFRAME_SUBAGENTS.md`** defines the **verbatim prompts** you must use to run verification (either four parallel **`Task`/subagents** fed one prompt each — **paste from that file only**, not from memory — or execute those four prompts **yourself sequentially**). Aggregate results only in **`docs/research/LAUNCHFRAME_VERIFICATION.md`**. **Never skip Phase 6** because subagents didn't auto-start — you initiate them explicitly from the Markdown prompt blocks. Narrative/marketing raster slots use **imagery your session generates itself** with the host’s **image-generation** tool (saved into `public/images/`), not missing assets — see **Brand identity**. Verification still covers raster slots, extracted **SVG/icons**, DOM, CSS, and **motion choreography**.
|
|
16
17
|
|
|
17
18
|
## Step 0 — Persist Launchframe inputs
|
|
18
19
|
|
|
@@ -21,10 +22,11 @@ Before reconnaissance, write or update:
|
|
|
21
22
|
- `src/lib/launchframe-config.ts` — `LAUNCHFRAME_SOURCE_URL` (primary URL, usually first), `LAUNCHFRAME_SAAS_IDEA`
|
|
22
23
|
- `launchframe.context.json`
|
|
23
24
|
- `docs/research/LAUNCHFRAME.md` — URLs and SaaS idea
|
|
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.
|
|
24
26
|
|
|
25
27
|
## SaaS copy overlay (Phase 4 assembly and final polish)
|
|
26
28
|
|
|
27
|
-
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 from extracted specs. **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.
|
|
29
|
+
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.
|
|
28
30
|
|
|
29
31
|
---
|
|
30
32
|
|
|
@@ -32,11 +34,12 @@ After structure and styles match the reference, apply the **SaaS idea** to hero,
|
|
|
32
34
|
|
|
33
35
|
The target page(s) are the URL(s) you parsed in Pre-Flight. Clone exactly what's visible at each URL. Unless the user specifies otherwise, use these defaults:
|
|
34
36
|
|
|
35
|
-
- **Fidelity level:** Pixel-perfect — exact match in colors, spacing, typography, animations, **
|
|
37
|
+
- **Fidelity level:** Pixel-perfect — exact match in colors, spacing, typography, **SVG icon presentation** (dimensions, strokes, fills, `viewBox`), **animations** (`@keyframes`, `animation*` / `transition*`, WA API timings, scroll timelines), raster **presentation** (responsive markup + CSS painting), **DOM structure**, and **authored CSS intent** (computed values must match after extraction)
|
|
36
38
|
- **In scope:** Visual layout and styling, component structure and interactions, responsive design, mock data for demo purposes
|
|
37
39
|
- **Out of scope:** Real backend / database, authentication, real-time features, SEO optimization, accessibility audit
|
|
38
40
|
- **Customization:** Structure and visuals — pure emulation of the reference. **Marketing copy** — apply the parsed **SaaS idea** where hero/headlines/CTAs are interchangeable (see “SaaS copy overlay” above); do not invent a different product than the user’s idea.
|
|
39
|
-
- **Brand identity:** The reference is a **pattern** for layout, motion, and UI craft — **not** permission to ship their brand. Unless the user **explicitly** asks for a faithful copy of the reference brand (e.g. licensed work, clearly labeled internal mock, private design audit), **invent an original brand** aligned with the SaaS idea: product name, wordmark or simple logomark (SVG or styled text) sized to the same logo slot, favicon / app icon, OG imagery, and a cohesive palette. Do **not** reuse their trademarked logo paths, mascot art, or distinctive illustrative brand assets; use originals or functional UI icons instead.
|
|
41
|
+
- **Brand identity:** The reference is a **pattern** for layout, motion, and UI craft — **not** permission to ship their brand. Unless the user **explicitly** asks for a faithful copy of the reference brand (e.g. licensed work, clearly labeled internal mock, private design audit), **invent an original brand** aligned with the SaaS idea: product name, wordmark or simple logomark (SVG or styled text) sized to the same logo slot, favicon / app icon, OG imagery, and a cohesive palette. Do **not** reuse their trademarked logo paths, mascot art, or distinctive illustrative brand assets; use originals or functional UI icons instead. **Every raster slot** that is a photograph, illustration, or narrative marketing image on the reference (hero, feature mockups, social proof portraits, decorative panels, card thumbnails) must ship as **new, original imagery** grounded in the **SaaS idea** — treat the reference shot as a **composition brief** (aspect ratio, mood, subject *role*: dashboard vs lifestyle vs avatar) and recreate with product-relevant scenes, UI surrogates, logosafe crops, or **supporting sub-frames** (detail insets, secondary panels) that read as one family. **Mandatory delivery:** those slots **must** have real raster files checked into `public/images/` (or another committed static path your build serves) — **no** omitted `<img>`/`<Image>`, **no** indefinite placeholder divs/colors standing in for a photo where the reference showed one, **no** broken `href/src`. **You generate these files yourself:** use your host's **built-in image generation** capability (explicit image prompts aligned to the SaaS idea + composition brief from each reference slot), write outputs into `public/images/`, wire them into JSX, and note each file in `docs/research/LAUNCHFRAME.md`. You may **supplement** with composites or screenshots of **your** product UI mocks you build in code, but you **do not** wait for the user to supply artwork. Preserve **exact** framing CSS (`object-fit`, `object-position`, masks, layering). Do **not** hotlink or ship their competitor lifestyle/brand photography bytes except when the user explicitly allows it. Note in `docs/research/LAUNCHFRAME.md` which marks and assets are **original brand** versus **layout-only** extraction, and **list paths** for every authored narrative image.
|
|
42
|
+
- **Functional icons & motion choreography:** Anything the reference treats as **UI iconography that is not a forbidden trademark** (chevrons, menu marks, inline pictograms, sprite symbols, repeating UI glyphs) — **lift path data / sprite refs / mask SVGs from the DOM** and reproduce **`viewBox`, stroke widths, joins, fills, `currentColor` behavior.** Do **not** swap in unrelated Lucide (or arbitrary stock SVG) guesses "that look close." **`@keyframes`**, **`transition` / `animation` longhands**, scroll-driven timelines, carousel timings, stagger delays, easing curves — **lift from live measurement + stylesheet text** per §0.3 — **omit or substitute timing only** when respecting `prefers-reduced-motion` or when the measured reference does the same. Product-themed raster replacements do **not** waive SVG or animation parity.
|
|
40
43
|
|
|
41
44
|
If the user provides additional instructions (specific fidelity level, customizations, extra context), honor those over the defaults.
|
|
42
45
|
|
|
@@ -59,9 +62,9 @@ When you traverse the DOM and the Network panel, do **not** treat all nodes equa
|
|
|
59
62
|
1. **Images (raster + video stills) — HTML, files, and CSS together** — Enumeration is not enough: the clone must match **how** each asset is mounted and styled.
|
|
60
63
|
- **Markup parity:** Preserve `<picture>` / `<source>` **order**, **`media` / `type`** attributes, and **`sizes`** where the reference uses them; preserve **`srcset`** descriptor patterns (w/x qualifiers) on `<img>` or **equivalent** `next/image` `sizes` + `srcSet` (document the mapping in the spec). Copy **`loading`**, **`decoding`**, **`fetchpriority`**, **`alt`**, **`role`/`aria-*`** when they affect layout or LCP. **`width` / `height`** (or intrinsic aspect + CSS `aspect-ratio`) must stop layout shift the same way as the reference; note **`width`/`height` attributes vs CSS** if both exist.
|
|
61
64
|
- **Box + painting:** Extract and reproduce **`object-fit`**, **`object-position`**, **parent `overflow`**, **clipping `border-radius`**, **masks**, **`filter`**, and **`mix-blend-mode`** on the same stacking context as the live node. **`background-image`** on the element or **`::before` / `::after`** must use the **same** cover/contain behavior, **position**, **size**, **repeat**, and **attachment** (record pseudo-elements explicitly in the spec).
|
|
62
|
-
- **Files:**
|
|
63
|
-
2. **SVGs & iconography
|
|
64
|
-
3. **Motion & animation (Chrome MCP)
|
|
65
|
+
- **Files:** For **structural/decorative or permission-neutral** imagery (textures, gradients, generic UI chrome where no competitor brand reads), download real bytes to `public/images/` (or videos/posters). **Provenance** in spec: URL hash or byte size so verifiers can confirm the correct asset. For **brand- or product-story** photos and illustrations per Scope Defaults, **do not** pass off the reference files as yours — replace with originals saved under `public/images/` with spec lines **substitute — product-themed** (describe intent vs reference role). No unrelated stock swaps unless similarly marked.
|
|
66
|
+
2. **SVGs & iconography — copy glyphs, don't improvise.** Inline `<svg>`, sprite `symbol` defs, **SVG used as masks/filters**, icon fonts (**prefer extracting vector paths**, not swapping fonts blindly). Convert to `@/components/icons.tsx` (or section-local components) with meaningful names. **Ship the reference geometry**: matching `viewBox`, path coordinates, strokes/caps/joins — verify at 1× and 2× DPR beside a screenshot overlay. Replacing forbidden trademark marks is done under Brand identity with **equivalent silhouette area + optical weight**, not a random different icon shape.
|
|
67
|
+
3. **Motion & animation (Chrome MCP) — copy choreography, omit nothing casually.** Treat this like color and spacing: **numeric fidelity**. If the reference animates **on load, hover, scroll, intersection, drag, carousel tick, or tab change**, capture and port it unless `prefers-reduced-motion` or an explicit exemption says otherwise — a static clone while the reference moves is wrong. In Chrome MCP, evaluate scripts against the live page to capture:
|
|
65
68
|
- Full **`animation`** shorthand plus **`animation-*` longhands** (`animation-name`, `-duration`, `-delay`, `-timing-function`, `-iteration-count`, `-direction`, `-fill-mode`, `-play-state`, **`animation-timeline`** / scroll timelines)
|
|
66
69
|
- Full **`transition`** shorthand plus **`transition-*` longhands**, and **`transform`** / **`will-change`** as applied during and after motion
|
|
67
70
|
- **Author `@keyframes`** — walk `document.styleSheets` / `cssRules` and copy `CSSKeyframesRule` bodies **where the browser exposes them** (same-origin stylesheets). For cross-origin CSS that throws on access, use DevTools **Sources** or fetch the CSS URL and paste the `@keyframes` into the spec — do not guess intermediate keyframe percentages
|
|
@@ -94,9 +97,7 @@ Look at each section and judge its complexity. A simple banner with a heading an
|
|
|
94
97
|
|
|
95
98
|
### 3. Real Content, Real Assets
|
|
96
99
|
|
|
97
|
-
Extract the
|
|
98
|
-
|
|
99
|
-
**Prioritize** (see §0): downloadable imagery and backgrounds first, then SVG/icon layers, then motion. If you must **fabricate** an asset, prefer screenshot-based exports or traced vectors tied to measured box sizes — avoid unrelated stock art.
|
|
100
|
+
Extract the **verbatim marketing copy only where it is layout boilerplate**; otherwise apply the SaaS idea. For **pixels**: extract **dimensions, layering, masks, responsive markup, and filenames/paths needed for parity**, but treat **marketing photos and illustrative brand art** per Scope Defaults — **authored originals** tied to the product (including cohesive **sub-images** where the reference uses a small secondary crop or inset), not a gallery of their stock photography. Structural assets (patterns, screenshots of generic UI motifs you rebuild) follow §0 extraction. **Functional icons (`<svg>`/sprites) and all motion choreography are copied from extraction** alongside that — originals-for-product applies to narrative **raster** slots, **not** to carte-blanche SVG or timing drift. Download every reference `<video>` poster and neutral asset you keep; extract inline `<svg>` elements as React components unless they encode trademark marks forbidden under Brand identity (replace with equivalent optical weight there). Fabricate raster/vector only when extraction is blocked — label **substitute** in specs and research notes — and **avoid unrelated stock**; stay on-theme for the SaaS idea.
|
|
100
101
|
|
|
101
102
|
**Layered assets matter.** A section that looks like one image is often multiple layers — a background watercolor/gradient, a foreground UI mockup PNG, an overlay icon. Inspect each container's full DOM tree and enumerate ALL `<img>` elements and background images within it, including absolutely-positioned overlays. Missing an overlay image makes the clone look empty even if the background is correct.
|
|
102
103
|
|
|
@@ -546,26 +547,37 @@ After assembly, do NOT declare the clone complete. Take side-by-side comparison
|
|
|
546
547
|
5. Test all interactive behaviors: scroll through the page, click every button/tab, hover over interactive elements
|
|
547
548
|
6. **Motion QA:** Re-run the **motion audit script** (or per-element `getAnimations`) on the reference and spot-check the clone in devtools — **durations, delays, and easing curves must match** (e.g. 320ms vs 300ms is a failure). Re-scroll hero and sticky headers; carousels and scroll-driven sections must trigger at the same thresholds documented in `BEHAVIORS.md`
|
|
548
549
|
|
|
549
|
-
Only after this visual QA pass is the clone ready for **
|
|
550
|
+
Only after this visual QA pass is the clone ready for **Phase 6 verification**. Immediately **confirm `docs/research/LAUNCHFRAME_SUBAGENTS.md`** contains four self-contained **`## Prompt — Pass N`** sections matching the Phase 6 rubrics; update that file whenever you change rubric wording locally.
|
|
551
|
+
|
|
552
|
+
## Phase 6: Verification passes (mandatory)
|
|
553
|
+
|
|
554
|
+
Foreman skim is insufficient — someone must execute **all four prompts in `LAUNCHFRAME_SUBAGENTS.md`** before you call Launchframe complete.
|
|
555
|
+
|
|
556
|
+
### How to run them (hosts differ)
|
|
550
557
|
|
|
551
|
-
|
|
558
|
+
| Host capability | What you must do |
|
|
559
|
+
|-----------------|------------------|
|
|
560
|
+
| **Parallel agents / Task / subagents** | Open **`docs/research/LAUNCHFRAME_SUBAGENTS.md`**. Dispatch **four** separate runs — each agent receives **exactly one** complete `## Prompt — Pass …` section copied **verbatim from that Markdown file**. Prefer **`explore`/readonly**. Do **not** paraphrase the rubric from chat memory. Claude Code-style teams: follow **`AGENTS.md`** — isolated **worktrees/branches per checker**, then merge after triage. |
|
|
561
|
+
| **Single agent / no spawning** | Open the same Markdown file and **execute prompts 1 → 4 yourself** in order, appending **`docs/research/LAUNCHFRAME_VERIFICATION.md`** after each (`### Pass N`, findings, **`VERDICT: PASS`** or **`FAIL`**) per that file's **Output contract**. |
|
|
552
562
|
|
|
553
|
-
|
|
563
|
+
**Do not** mark Launchframe done because verification “doesn’t apply” — it always applies. **Prompts live in Markdown** so runs are repeatable and auditable.
|
|
554
564
|
|
|
555
|
-
**Minimum four verification passes** (
|
|
565
|
+
**Minimum four verification passes** (four subagents **or** four self-executed steps — prompts sourced from **`LAUNCHFRAME_SUBAGENTS.md`;** the authoritative rubric text below must stay mirrored there):
|
|
556
566
|
|
|
557
|
-
1. **
|
|
567
|
+
1. **Raster media & icons** — **Narrative slots:** inventory every reference marketing/lifestyle/card/hero image role from specs vs **committed files** (`public/images/...`) actually referenced in JSX; **`FAIL`** if the reference showed a photo/panel thumbnail and this clone relies on placeholders or bare gradients. Then list every raster/video poster and **every authored SVG/component used as an icon** from `src/`. Confirm **files exist** under `public/` with **correct paths** where expected; compare presentation to specs: **`picture`/`source` behavior**, **`sizes` / responsive behavior**, **`object-fit` / `object-position`**, dimensions/aspect-ratio, **parent overflow and radius**, **`background-image`** and **pseudo-elements**. For SVGs/icons: **`viewBox`**, strokes/fills/`currentColor`, and sprite usage must match specs — reject opportunistic Lucide substitutions unless the spec explicitly allowed them. Flag wrong crops, missing layers, or lazy `next/image` `fill` misuse.
|
|
558
568
|
2. **HTML / DOM structure** — Diff **PAGE_TOPOLOGY.md** + component specs against the React tree: **section order**, **wrapper count**, **sibling order**, scroll/sticky containers. Any flattened structure that changes stacking or scroll must be **FAIL** until fixed.
|
|
559
569
|
3. **CSS parity** — Spot-check **hero, nav, first fold, footer** (and any section flagged risky) against spec CSS: tokens in **`globals.css`**, arbitrary Tailwind vs measured px, **keyframes** presence. Run **`npm run lint`** and **`npm run typecheck`** inside the verification worktree; failures = **FAIL** until green.
|
|
560
570
|
4. **Motion & interaction** — Re-walk **`docs/research/BEHAVIORS.md`** and motion audit JSON: headers, carousels, scroll-driven UI, smooth-scroll libs. Phase 5 motion QA must be **confirmed**, not assumed.
|
|
561
571
|
|
|
562
|
-
Each
|
|
572
|
+
Each pass (whether another agent or you) returns **`PASS` or `FAIL`**, a **bullet list** of issues with **`file:line`** pointers, and **suggested fixes**. The foreman **resolves or explicitly documents** every `FAIL` (deferred items listed in the completion report under **Known gaps**). **First rubric checklist includes:** confirm **every narrative image slot** from specs has **on-disk raster files** wired in JSX — **`FAIL`** if any slot is placeholder-only while the reference showed imagery. **Do not** declare Launchframe complete until all four passes **`PASS`** or gaps are accepted by the user context.
|
|
563
573
|
|
|
564
574
|
## Pre-Dispatch Checklist
|
|
565
575
|
|
|
566
576
|
Before dispatching ANY builder agent, verify you can check every box. If you can't, go back and extract more.
|
|
567
577
|
|
|
578
|
+
- [ ] **Authored narrative rasters planned:** list each marketing/lifestyle/card image slot vs **planned `public/images/...` path** (Brand identity originals). No section ships with “TODO image” once built
|
|
568
579
|
- [ ] **Image markup + styling** captured in spec: `picture`/`source`/`sizes`/`srcset` (or documented `next/image` mapping), `object-fit`/`object-position`, clipping parents, pseudo-element backgrounds if any
|
|
580
|
+
- [ ] **Icon/SVG snippets** inlined in spec where needed: dominant paths or sprite `id`s, **`viewBox`**, stroke/fill rules — enough that a builder does not guess Lucide substitutions
|
|
569
581
|
- [ ] **DOM outline** included for non-trivial sections (wrappers, order)
|
|
570
582
|
- [ ] Spec file written to `docs/research/components/<name>.spec.md` with ALL sections filled
|
|
571
583
|
- [ ] Every CSS value in the spec is from `getComputedStyle()`, not estimated
|
|
@@ -599,7 +611,9 @@ These are lessons from previous failed clones — each one cost hours of rework:
|
|
|
599
611
|
- **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.
|
|
600
612
|
- **Don't collapse responsive image markup.** Dropping `<picture>` / `<source media="…">` or `sizes` so “one JPEG is enough” changes which URL loads and breaks fidelity — mirror the reference’s responsive strategy.
|
|
601
613
|
- **Don't guess motion.** If `transition-duration` is 280ms with `cubic-bezier(0.4, 0, 0.2, 1)`, the clone must use those exact values from Chrome MCP — not "about 0.3s ease."
|
|
602
|
-
- **Don't
|
|
614
|
+
- **Don't swap reference-specific SVG/UI icons for random Lucide** (or unrelated stock glyphs) unless the spec proves geometric equivalence — extract the DOM paths/sprites instead.
|
|
615
|
+
- **Don't declare Launchframe finished without Phase 6.** Execute the four **`LAUNCHFRAME_SUBAGENTS.md`** prompts (via **Task**/subagents or yourself) and write **`LAUNCHFRAME_VERIFICATION.md`** with four **`PASS`**/**`FAIL`** verdicts — “subagents wouldn't start” is not an excuse to skip opening the Markdown runbook.
|
|
616
|
+
- **Don't ship marketing image slots empty.** Narrative raster roles need real files under **`public/images/`** (or equivalent): no permanent gray boxes where the reference had photography.
|
|
603
617
|
|
|
604
618
|
## Completion
|
|
605
619
|
|
|
@@ -608,7 +622,8 @@ When done, report:
|
|
|
608
622
|
- Total components created
|
|
609
623
|
- Total spec files written (should match components)
|
|
610
624
|
- Total assets downloaded (images, videos, SVGs, fonts)
|
|
625
|
+
- **`public/images/` (and similar)** — explicit list of **authored narrative** raster files produced for Brand identity slots (paths + intent)
|
|
611
626
|
- Build status (`npm run build` result)
|
|
612
627
|
- Visual QA results (any remaining discrepancies)
|
|
613
|
-
- **
|
|
628
|
+
- **Phase 6 verification:** cite **`docs/research/LAUNCHFRAME_SUBAGENTS.md`** (prompt source) **`docs/research/LAUNCHFRAME_VERIFICATION.md`** (results), summarize four passes with **PASS/FAIL** each; unresolved items under **Known gaps**
|
|
614
629
|
- Any known gaps or limitations
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: launchframe
|
|
3
|
-
description: "
|
|
3
|
+
description: "Pixel-perfect reverse-engineer of a reference URL into this repo, plus SaaS landing copy — the only clone slash command for this template. Invoked as /launchframe."
|
|
4
4
|
invokable: true
|
|
5
5
|
---
|
|
6
6
|
<!-- AUTO-GENERATED from .claude/skills/launchframe/SKILL.md — do not edit directly.
|
|
@@ -14,7 +14,7 @@ invokable: true
|
|
|
14
14
|
1. **Reference URL(s)** — Every `http://` or `https://` token (clone each site; use `docs/research/<hostname>/` when there are multiple).
|
|
15
15
|
2. **SaaS idea** — All remaining text that is not a URL (often quoted): product pitch for hero and key marketing lines.
|
|
16
16
|
|
|
17
|
-
You are a **foreman walking the job site** — write specs per section, dispatch builders in parallel where possible, **
|
|
17
|
+
You are a **foreman walking the job site** — write specs per section, dispatch builders in parallel where possible. After Phase 5, **`docs/research/LAUNCHFRAME_SUBAGENTS.md`** defines the **verbatim prompts** you must use to run verification (either four parallel **`Task`/subagents** fed one prompt each — **paste from that file only**, not from memory — or execute those four prompts **yourself sequentially**). Aggregate results only in **`docs/research/LAUNCHFRAME_VERIFICATION.md`**. **Never skip Phase 6** because subagents didn't auto-start — you initiate them explicitly from the Markdown prompt blocks. Narrative/marketing raster slots use **imagery your session generates itself** with the host’s **image-generation** tool (saved into `public/images/`), not missing assets — see **Brand identity**. Verification still covers raster slots, extracted **SVG/icons**, DOM, CSS, and **motion choreography**.
|
|
18
18
|
|
|
19
19
|
## Step 0 — Persist Launchframe inputs
|
|
20
20
|
|
|
@@ -23,10 +23,11 @@ Before reconnaissance, write or update:
|
|
|
23
23
|
- `src/lib/launchframe-config.ts` — `LAUNCHFRAME_SOURCE_URL` (primary URL, usually first), `LAUNCHFRAME_SAAS_IDEA`
|
|
24
24
|
- `launchframe.context.json`
|
|
25
25
|
- `docs/research/LAUNCHFRAME.md` — URLs and SaaS idea
|
|
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.
|
|
26
27
|
|
|
27
28
|
## SaaS copy overlay (Phase 4 assembly and final polish)
|
|
28
29
|
|
|
29
|
-
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 from extracted specs. **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.
|
|
30
|
+
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.
|
|
30
31
|
|
|
31
32
|
---
|
|
32
33
|
|
|
@@ -34,11 +35,12 @@ After structure and styles match the reference, apply the **SaaS idea** to hero,
|
|
|
34
35
|
|
|
35
36
|
The target page(s) are the URL(s) you parsed in Pre-Flight. Clone exactly what's visible at each URL. Unless the user specifies otherwise, use these defaults:
|
|
36
37
|
|
|
37
|
-
- **Fidelity level:** Pixel-perfect — exact match in colors, spacing, typography, animations, **
|
|
38
|
+
- **Fidelity level:** Pixel-perfect — exact match in colors, spacing, typography, **SVG icon presentation** (dimensions, strokes, fills, `viewBox`), **animations** (`@keyframes`, `animation*` / `transition*`, WA API timings, scroll timelines), raster **presentation** (responsive markup + CSS painting), **DOM structure**, and **authored CSS intent** (computed values must match after extraction)
|
|
38
39
|
- **In scope:** Visual layout and styling, component structure and interactions, responsive design, mock data for demo purposes
|
|
39
40
|
- **Out of scope:** Real backend / database, authentication, real-time features, SEO optimization, accessibility audit
|
|
40
41
|
- **Customization:** Structure and visuals — pure emulation of the reference. **Marketing copy** — apply the parsed **SaaS idea** where hero/headlines/CTAs are interchangeable (see “SaaS copy overlay” above); do not invent a different product than the user’s idea.
|
|
41
|
-
- **Brand identity:** The reference is a **pattern** for layout, motion, and UI craft — **not** permission to ship their brand. Unless the user **explicitly** asks for a faithful copy of the reference brand (e.g. licensed work, clearly labeled internal mock, private design audit), **invent an original brand** aligned with the SaaS idea: product name, wordmark or simple logomark (SVG or styled text) sized to the same logo slot, favicon / app icon, OG imagery, and a cohesive palette. Do **not** reuse their trademarked logo paths, mascot art, or distinctive illustrative brand assets; use originals or functional UI icons instead.
|
|
42
|
+
- **Brand identity:** The reference is a **pattern** for layout, motion, and UI craft — **not** permission to ship their brand. Unless the user **explicitly** asks for a faithful copy of the reference brand (e.g. licensed work, clearly labeled internal mock, private design audit), **invent an original brand** aligned with the SaaS idea: product name, wordmark or simple logomark (SVG or styled text) sized to the same logo slot, favicon / app icon, OG imagery, and a cohesive palette. Do **not** reuse their trademarked logo paths, mascot art, or distinctive illustrative brand assets; use originals or functional UI icons instead. **Every raster slot** that is a photograph, illustration, or narrative marketing image on the reference (hero, feature mockups, social proof portraits, decorative panels, card thumbnails) must ship as **new, original imagery** grounded in the **SaaS idea** — treat the reference shot as a **composition brief** (aspect ratio, mood, subject *role*: dashboard vs lifestyle vs avatar) and recreate with product-relevant scenes, UI surrogates, logosafe crops, or **supporting sub-frames** (detail insets, secondary panels) that read as one family. **Mandatory delivery:** those slots **must** have real raster files checked into `public/images/` (or another committed static path your build serves) — **no** omitted `<img>`/`<Image>`, **no** indefinite placeholder divs/colors standing in for a photo where the reference showed one, **no** broken `href/src`. **You generate these files yourself:** use your host's **built-in image generation** capability (explicit image prompts aligned to the SaaS idea + composition brief from each reference slot), write outputs into `public/images/`, wire them into JSX, and note each file in `docs/research/LAUNCHFRAME.md`. You may **supplement** with composites or screenshots of **your** product UI mocks you build in code, but you **do not** wait for the user to supply artwork. Preserve **exact** framing CSS (`object-fit`, `object-position`, masks, layering). Do **not** hotlink or ship their competitor lifestyle/brand photography bytes except when the user explicitly allows it. Note in `docs/research/LAUNCHFRAME.md` which marks and assets are **original brand** versus **layout-only** extraction, and **list paths** for every authored narrative image.
|
|
43
|
+
- **Functional icons & motion choreography:** Anything the reference treats as **UI iconography that is not a forbidden trademark** (chevrons, menu marks, inline pictograms, sprite symbols, repeating UI glyphs) — **lift path data / sprite refs / mask SVGs from the DOM** and reproduce **`viewBox`, stroke widths, joins, fills, `currentColor` behavior.** Do **not** swap in unrelated Lucide (or arbitrary stock SVG) guesses "that look close." **`@keyframes`**, **`transition` / `animation` longhands**, scroll-driven timelines, carousel timings, stagger delays, easing curves — **lift from live measurement + stylesheet text** per §0.3 — **omit or substitute timing only** when respecting `prefers-reduced-motion` or when the measured reference does the same. Product-themed raster replacements do **not** waive SVG or animation parity.
|
|
42
44
|
|
|
43
45
|
If the user provides additional instructions (specific fidelity level, customizations, extra context), honor those over the defaults.
|
|
44
46
|
|
|
@@ -61,9 +63,9 @@ When you traverse the DOM and the Network panel, do **not** treat all nodes equa
|
|
|
61
63
|
1. **Images (raster + video stills) — HTML, files, and CSS together** — Enumeration is not enough: the clone must match **how** each asset is mounted and styled.
|
|
62
64
|
- **Markup parity:** Preserve `<picture>` / `<source>` **order**, **`media` / `type`** attributes, and **`sizes`** where the reference uses them; preserve **`srcset`** descriptor patterns (w/x qualifiers) on `<img>` or **equivalent** `next/image` `sizes` + `srcSet` (document the mapping in the spec). Copy **`loading`**, **`decoding`**, **`fetchpriority`**, **`alt`**, **`role`/`aria-*`** when they affect layout or LCP. **`width` / `height`** (or intrinsic aspect + CSS `aspect-ratio`) must stop layout shift the same way as the reference; note **`width`/`height` attributes vs CSS** if both exist.
|
|
63
65
|
- **Box + painting:** Extract and reproduce **`object-fit`**, **`object-position`**, **parent `overflow`**, **clipping `border-radius`**, **masks**, **`filter`**, and **`mix-blend-mode`** on the same stacking context as the live node. **`background-image`** on the element or **`::before` / `::after`** must use the **same** cover/contain behavior, **position**, **size**, **repeat**, and **attachment** (record pseudo-elements explicitly in the spec).
|
|
64
|
-
- **Files:**
|
|
65
|
-
2. **SVGs & iconography
|
|
66
|
-
3. **Motion & animation (Chrome MCP)
|
|
66
|
+
- **Files:** For **structural/decorative or permission-neutral** imagery (textures, gradients, generic UI chrome where no competitor brand reads), download real bytes to `public/images/` (or videos/posters). **Provenance** in spec: URL hash or byte size so verifiers can confirm the correct asset. For **brand- or product-story** photos and illustrations per Scope Defaults, **do not** pass off the reference files as yours — replace with originals saved under `public/images/` with spec lines **substitute — product-themed** (describe intent vs reference role). No unrelated stock swaps unless similarly marked.
|
|
67
|
+
2. **SVGs & iconography — copy glyphs, don't improvise.** Inline `<svg>`, sprite `symbol` defs, **SVG used as masks/filters**, icon fonts (**prefer extracting vector paths**, not swapping fonts blindly). Convert to `@/components/icons.tsx` (or section-local components) with meaningful names. **Ship the reference geometry**: matching `viewBox`, path coordinates, strokes/caps/joins — verify at 1× and 2× DPR beside a screenshot overlay. Replacing forbidden trademark marks is done under Brand identity with **equivalent silhouette area + optical weight**, not a random different icon shape.
|
|
68
|
+
3. **Motion & animation (Chrome MCP) — copy choreography, omit nothing casually.** Treat this like color and spacing: **numeric fidelity**. If the reference animates **on load, hover, scroll, intersection, drag, carousel tick, or tab change**, capture and port it unless `prefers-reduced-motion` or an explicit exemption says otherwise — a static clone while the reference moves is wrong. In Chrome MCP, evaluate scripts against the live page to capture:
|
|
67
69
|
- Full **`animation`** shorthand plus **`animation-*` longhands** (`animation-name`, `-duration`, `-delay`, `-timing-function`, `-iteration-count`, `-direction`, `-fill-mode`, `-play-state`, **`animation-timeline`** / scroll timelines)
|
|
68
70
|
- Full **`transition`** shorthand plus **`transition-*` longhands**, and **`transform`** / **`will-change`** as applied during and after motion
|
|
69
71
|
- **Author `@keyframes`** — walk `document.styleSheets` / `cssRules` and copy `CSSKeyframesRule` bodies **where the browser exposes them** (same-origin stylesheets). For cross-origin CSS that throws on access, use DevTools **Sources** or fetch the CSS URL and paste the `@keyframes` into the spec — do not guess intermediate keyframe percentages
|
|
@@ -96,9 +98,7 @@ Look at each section and judge its complexity. A simple banner with a heading an
|
|
|
96
98
|
|
|
97
99
|
### 3. Real Content, Real Assets
|
|
98
100
|
|
|
99
|
-
Extract the
|
|
100
|
-
|
|
101
|
-
**Prioritize** (see §0): downloadable imagery and backgrounds first, then SVG/icon layers, then motion. If you must **fabricate** an asset, prefer screenshot-based exports or traced vectors tied to measured box sizes — avoid unrelated stock art.
|
|
101
|
+
Extract the **verbatim marketing copy only where it is layout boilerplate**; otherwise apply the SaaS idea. For **pixels**: extract **dimensions, layering, masks, responsive markup, and filenames/paths needed for parity**, but treat **marketing photos and illustrative brand art** per Scope Defaults — **authored originals** tied to the product (including cohesive **sub-images** where the reference uses a small secondary crop or inset), not a gallery of their stock photography. Structural assets (patterns, screenshots of generic UI motifs you rebuild) follow §0 extraction. **Functional icons (`<svg>`/sprites) and all motion choreography are copied from extraction** alongside that — originals-for-product applies to narrative **raster** slots, **not** to carte-blanche SVG or timing drift. Download every reference `<video>` poster and neutral asset you keep; extract inline `<svg>` elements as React components unless they encode trademark marks forbidden under Brand identity (replace with equivalent optical weight there). Fabricate raster/vector only when extraction is blocked — label **substitute** in specs and research notes — and **avoid unrelated stock**; stay on-theme for the SaaS idea.
|
|
102
102
|
|
|
103
103
|
**Layered assets matter.** A section that looks like one image is often multiple layers — a background watercolor/gradient, a foreground UI mockup PNG, an overlay icon. Inspect each container's full DOM tree and enumerate ALL `<img>` elements and background images within it, including absolutely-positioned overlays. Missing an overlay image makes the clone look empty even if the background is correct.
|
|
104
104
|
|
|
@@ -548,26 +548,37 @@ After assembly, do NOT declare the clone complete. Take side-by-side comparison
|
|
|
548
548
|
5. Test all interactive behaviors: scroll through the page, click every button/tab, hover over interactive elements
|
|
549
549
|
6. **Motion QA:** Re-run the **motion audit script** (or per-element `getAnimations`) on the reference and spot-check the clone in devtools — **durations, delays, and easing curves must match** (e.g. 320ms vs 300ms is a failure). Re-scroll hero and sticky headers; carousels and scroll-driven sections must trigger at the same thresholds documented in `BEHAVIORS.md`
|
|
550
550
|
|
|
551
|
-
Only after this visual QA pass is the clone ready for **
|
|
551
|
+
Only after this visual QA pass is the clone ready for **Phase 6 verification**. Immediately **confirm `docs/research/LAUNCHFRAME_SUBAGENTS.md`** contains four self-contained **`## Prompt — Pass N`** sections matching the Phase 6 rubrics; update that file whenever you change rubric wording locally.
|
|
552
|
+
|
|
553
|
+
## Phase 6: Verification passes (mandatory)
|
|
554
|
+
|
|
555
|
+
Foreman skim is insufficient — someone must execute **all four prompts in `LAUNCHFRAME_SUBAGENTS.md`** before you call Launchframe complete.
|
|
556
|
+
|
|
557
|
+
### How to run them (hosts differ)
|
|
552
558
|
|
|
553
|
-
|
|
559
|
+
| Host capability | What you must do |
|
|
560
|
+
|-----------------|------------------|
|
|
561
|
+
| **Parallel agents / Task / subagents** | Open **`docs/research/LAUNCHFRAME_SUBAGENTS.md`**. Dispatch **four** separate runs — each agent receives **exactly one** complete `## Prompt — Pass …` section copied **verbatim from that Markdown file**. Prefer **`explore`/readonly**. Do **not** paraphrase the rubric from chat memory. Claude Code-style teams: follow **`AGENTS.md`** — isolated **worktrees/branches per checker**, then merge after triage. |
|
|
562
|
+
| **Single agent / no spawning** | Open the same Markdown file and **execute prompts 1 → 4 yourself** in order, appending **`docs/research/LAUNCHFRAME_VERIFICATION.md`** after each (`### Pass N`, findings, **`VERDICT: PASS`** or **`FAIL`**) per that file's **Output contract**. |
|
|
554
563
|
|
|
555
|
-
|
|
564
|
+
**Do not** mark Launchframe done because verification “doesn’t apply” — it always applies. **Prompts live in Markdown** so runs are repeatable and auditable.
|
|
556
565
|
|
|
557
|
-
**Minimum four verification passes** (
|
|
566
|
+
**Minimum four verification passes** (four subagents **or** four self-executed steps — prompts sourced from **`LAUNCHFRAME_SUBAGENTS.md`;** the authoritative rubric text below must stay mirrored there):
|
|
558
567
|
|
|
559
|
-
1. **
|
|
568
|
+
1. **Raster media & icons** — **Narrative slots:** inventory every reference marketing/lifestyle/card/hero image role from specs vs **committed files** (`public/images/...`) actually referenced in JSX; **`FAIL`** if the reference showed a photo/panel thumbnail and this clone relies on placeholders or bare gradients. Then list every raster/video poster and **every authored SVG/component used as an icon** from `src/`. Confirm **files exist** under `public/` with **correct paths** where expected; compare presentation to specs: **`picture`/`source` behavior**, **`sizes` / responsive behavior**, **`object-fit` / `object-position`**, dimensions/aspect-ratio, **parent overflow and radius**, **`background-image`** and **pseudo-elements**. For SVGs/icons: **`viewBox`**, strokes/fills/`currentColor`, and sprite usage must match specs — reject opportunistic Lucide substitutions unless the spec explicitly allowed them. Flag wrong crops, missing layers, or lazy `next/image` `fill` misuse.
|
|
560
569
|
2. **HTML / DOM structure** — Diff **PAGE_TOPOLOGY.md** + component specs against the React tree: **section order**, **wrapper count**, **sibling order**, scroll/sticky containers. Any flattened structure that changes stacking or scroll must be **FAIL** until fixed.
|
|
561
570
|
3. **CSS parity** — Spot-check **hero, nav, first fold, footer** (and any section flagged risky) against spec CSS: tokens in **`globals.css`**, arbitrary Tailwind vs measured px, **keyframes** presence. Run **`npm run lint`** and **`npm run typecheck`** inside the verification worktree; failures = **FAIL** until green.
|
|
562
571
|
4. **Motion & interaction** — Re-walk **`docs/research/BEHAVIORS.md`** and motion audit JSON: headers, carousels, scroll-driven UI, smooth-scroll libs. Phase 5 motion QA must be **confirmed**, not assumed.
|
|
563
572
|
|
|
564
|
-
Each
|
|
573
|
+
Each pass (whether another agent or you) returns **`PASS` or `FAIL`**, a **bullet list** of issues with **`file:line`** pointers, and **suggested fixes**. The foreman **resolves or explicitly documents** every `FAIL` (deferred items listed in the completion report under **Known gaps**). **First rubric checklist includes:** confirm **every narrative image slot** from specs has **on-disk raster files** wired in JSX — **`FAIL`** if any slot is placeholder-only while the reference showed imagery. **Do not** declare Launchframe complete until all four passes **`PASS`** or gaps are accepted by the user context.
|
|
565
574
|
|
|
566
575
|
## Pre-Dispatch Checklist
|
|
567
576
|
|
|
568
577
|
Before dispatching ANY builder agent, verify you can check every box. If you can't, go back and extract more.
|
|
569
578
|
|
|
579
|
+
- [ ] **Authored narrative rasters planned:** list each marketing/lifestyle/card image slot vs **planned `public/images/...` path** (Brand identity originals). No section ships with “TODO image” once built
|
|
570
580
|
- [ ] **Image markup + styling** captured in spec: `picture`/`source`/`sizes`/`srcset` (or documented `next/image` mapping), `object-fit`/`object-position`, clipping parents, pseudo-element backgrounds if any
|
|
581
|
+
- [ ] **Icon/SVG snippets** inlined in spec where needed: dominant paths or sprite `id`s, **`viewBox`**, stroke/fill rules — enough that a builder does not guess Lucide substitutions
|
|
571
582
|
- [ ] **DOM outline** included for non-trivial sections (wrappers, order)
|
|
572
583
|
- [ ] Spec file written to `docs/research/components/<name>.spec.md` with ALL sections filled
|
|
573
584
|
- [ ] Every CSS value in the spec is from `getComputedStyle()`, not estimated
|
|
@@ -601,7 +612,9 @@ These are lessons from previous failed clones — each one cost hours of rework:
|
|
|
601
612
|
- **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.
|
|
602
613
|
- **Don't collapse responsive image markup.** Dropping `<picture>` / `<source media="…">` or `sizes` so “one JPEG is enough” changes which URL loads and breaks fidelity — mirror the reference’s responsive strategy.
|
|
603
614
|
- **Don't guess motion.** If `transition-duration` is 280ms with `cubic-bezier(0.4, 0, 0.2, 1)`, the clone must use those exact values from Chrome MCP — not "about 0.3s ease."
|
|
604
|
-
- **Don't
|
|
615
|
+
- **Don't swap reference-specific SVG/UI icons for random Lucide** (or unrelated stock glyphs) unless the spec proves geometric equivalence — extract the DOM paths/sprites instead.
|
|
616
|
+
- **Don't declare Launchframe finished without Phase 6.** Execute the four **`LAUNCHFRAME_SUBAGENTS.md`** prompts (via **Task**/subagents or yourself) and write **`LAUNCHFRAME_VERIFICATION.md`** with four **`PASS`**/**`FAIL`** verdicts — “subagents wouldn't start” is not an excuse to skip opening the Markdown runbook.
|
|
617
|
+
- **Don't ship marketing image slots empty.** Narrative raster roles need real files under **`public/images/`** (or equivalent): no permanent gray boxes where the reference had photography.
|
|
605
618
|
|
|
606
619
|
## Completion
|
|
607
620
|
|
|
@@ -610,7 +623,8 @@ When done, report:
|
|
|
610
623
|
- Total components created
|
|
611
624
|
- Total spec files written (should match components)
|
|
612
625
|
- Total assets downloaded (images, videos, SVGs, fonts)
|
|
626
|
+
- **`public/images/` (and similar)** — explicit list of **authored narrative** raster files produced for Brand identity slots (paths + intent)
|
|
613
627
|
- Build status (`npm run build` result)
|
|
614
628
|
- Visual QA results (any remaining discrepancies)
|
|
615
|
-
- **
|
|
629
|
+
- **Phase 6 verification:** cite **`docs/research/LAUNCHFRAME_SUBAGENTS.md`** (prompt source) **`docs/research/LAUNCHFRAME_VERIFICATION.md`** (results), summarize four passes with **PASS/FAIL** each; unresolved items under **Known gaps**
|
|
616
630
|
- Any known gaps or limitations
|
|
@@ -19,7 +19,7 @@ A reusable template for reverse-engineering any website into a clean, modern Nex
|
|
|
19
19
|
## Tech Stack
|
|
20
20
|
- **Framework:** Next.js 16 (App Router, React 19, TypeScript strict)
|
|
21
21
|
- **UI:** shadcn/ui (Radix primitives, Tailwind CSS v4, `cn()` utility)
|
|
22
|
-
- **Icons:** Lucide
|
|
22
|
+
- **Icons:** Lucide ships as a default only — **`/launchframe` clones must lift reference SVG sprites/paths/masks first** so UI icons match the source; Lucide fills gaps only where documented equivalent
|
|
23
23
|
- **Styling:** Tailwind CSS v4 with oklch design tokens
|
|
24
24
|
- **Deployment:** Vercel
|
|
25
25
|
|
|
@@ -40,9 +40,9 @@ A reusable template for reverse-engineering any website into a clean, modern Nex
|
|
|
40
40
|
## Design Principles
|
|
41
41
|
- **Pixel-perfect emulation** — match the target's spacing, colors, typography exactly
|
|
42
42
|
- **No personal aesthetic changes during emulation phase** — match 1:1 first, customize later
|
|
43
|
-
- **Real content** — use actual text and assets from the target site
|
|
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 crawl priority** — when walking the target page, emphasize **images** (raster, responsive sources, CSS backgrounds), **SVGs** (inline icons, sprites, masks), then **motion** (keyframes
|
|
45
|
+
- **DOM crawl priority** — when walking the target page, emphasize **images** (raster, responsive sources, CSS backgrounds), **SVGs** (inline icons, sprites, masks — **copy extracted geometry**, do not approximate with unrelated Lucide glyphs), then **motion** (**copy** `@keyframes`, `transition`/`animation` timings, scroll triggers, carousel staggers via Chrome MCP / CSS sources). **Measure and mirror** mounting and styling from the DOM; scrape **permission-neutral** bytes when appropriate. When a raster slot must be original for brand safety, **author** replacements and label them in research notes — **that never waives SVG or animation fidelity**
|
|
46
46
|
|
|
47
47
|
## Project Structure
|
|
48
48
|
```
|
|
@@ -67,8 +67,9 @@ scripts/ # Asset download scripts
|
|
|
67
67
|
|
|
68
68
|
## MOST IMPORTANT NOTES
|
|
69
69
|
- When launching Claude Code agent teams, ALWAYS have each teammate work in their own worktree branch and merge everyone's work at the end, resolving any merge conflicts smartly since you are basically serving the orchestrator role and have full context to our goals, work given, work achieved, and desired outcomes.
|
|
70
|
+
- **`/launchframe` Phase 6 verification** must always run: prompt text lives in **`docs/research/LAUNCHFRAME_SUBAGENTS.md`**; results in **`docs/research/LAUNCHFRAME_VERIFICATION.md`**. Use four parallel **Task**/subagents (paste one `## Prompt — Pass …` section per agent) or run all four sequentially yourself — never skip verification.
|
|
70
71
|
- After editing `AGENTS.md`, run `bash scripts/sync-agent-rules.sh` to regenerate platform-specific instruction files.
|
|
71
|
-
- After editing `.claude/skills
|
|
72
|
+
- After editing **any** `SKILL.md` under `.claude/skills/<skill-id>/`, run `node scripts/sync-skills.mjs` to regenerate that skill’s slash commands/workflows for **every supported platform** (discovered automatically).
|
|
72
73
|
|
|
73
74
|
# Website Inspection Guide
|
|
74
75
|
|