launchframe 0.1.11 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +126 -181
- package/bin/launchframe.mjs +5 -5
- package/package.json +4 -2
- package/packages/extract/automated-clone-pass.ts +353 -0
- package/packages/extract/cloner-research-emit.ts +270 -0
- package/packages/extract/emit.ts +24 -5
- package/packages/extract/extract.ts +127 -23
- package/packages/extract/host-slug.ts +5 -0
- package/packages/extract/mirror-emit.ts +4 -1
- package/packages/extract/types.ts +5 -0
package/README.md
CHANGED
|
@@ -1,158 +1,147 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Landingfram
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
> shadcn/ui design system you can build your own UI on top of —
|
|
5
|
-
> with a ready-made handoff for Cursor or Claude Code.
|
|
3
|
+
A reusable workflow for reverse-engineering live marketing sites into a **shadcn-style token theme**, **reference dumps** (DOM, copy index, media index), and a **layout-mirror** React scaffold — optimized for AI coding agents (same orchestration model as [ai-website-cloner-template](https://github.com/JCodesMore/ai-website-cloner-template)).
|
|
6
4
|
|
|
7
|
-
|
|
8
|
-
**computed appearance** of the rendered page (colors, type, spacing,
|
|
9
|
-
radii, shadows), and synthesizes an original design system as
|
|
10
|
-
`tailwind.config.ts` + `globals.css` + `tokens.json` + a Markdown
|
|
11
|
-
report and an AI-handoff file.
|
|
5
|
+
**Recommended:** [Claude Code](https://docs.anthropic.com/en/docs/claude-code) or **Cursor** for multi-phase builds — but Landingfram output works with any agent that can read Markdown and TypeScript.
|
|
12
6
|
|
|
13
|
-
|
|
14
|
-
**layout-mirror page** per source: a Next.js component that reconstructs
|
|
15
|
-
the source's section tree, grid, and density from typed primitives, with
|
|
16
|
-
`<TextSlot>` / `<MediaSlot>` placeholders where the source had copy,
|
|
17
|
-
logos, illustrations, or product imagery. The mirror does **not** embed
|
|
18
|
-
the source's copy text, brand assets, or product screenshots — fill those
|
|
19
|
-
slots with your own content before shipping. Proprietary type families
|
|
20
|
-
are substituted with open-source equivalents.
|
|
21
|
-
|
|
22
|
-
---
|
|
7
|
+
Point the CLI at a URL, run **`npx launchframe@latest <url> "<SaaS idea>"`**, then drive the same **spec → parallel builders → merge → QA** rhythm. In Cursor, use the **Clone Website** command (`.cursor/commands/clone-website.md`); in Claude Code / Codex, use the **`clone-website`** skill. Those workflows merge [ai-website-cloner-template](https://github.com/JCodesMore/ai-website-cloner-template) discipline with **automated** Playwright recon. The same npm package also exposes a **`landingfram`** bin shim for older scripts.
|
|
23
8
|
|
|
24
9
|
## Quick start (any folder)
|
|
25
10
|
|
|
26
|
-
The design system is written to **`./output/<runId>/`** in whatever
|
|
27
|
-
directory you run the command from — not inside the package.
|
|
28
|
-
|
|
29
11
|
**One time per machine** (Chromium for Playwright):
|
|
30
12
|
|
|
31
13
|
```bash
|
|
32
14
|
npx playwright install chromium
|
|
33
15
|
```
|
|
34
16
|
|
|
35
|
-
**Every
|
|
17
|
+
**Every extraction** (writes to **`./output/<runId>/`** in the current working directory):
|
|
36
18
|
|
|
37
19
|
```bash
|
|
38
20
|
cd path/to/your-app-or-empty-folder
|
|
39
|
-
npx launchframe@latest https://
|
|
21
|
+
npx launchframe@latest https://example.com "Your SaaS idea"
|
|
40
22
|
```
|
|
41
23
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
design
|
|
24
|
+
Pass multiple URLs for a combined token synthesis (see CLI reference below). Your **SaaS idea** string is stored in `run.json`, `FOR_AI.md`, and `docs/research/`.
|
|
25
|
+
|
|
26
|
+
**Then hand output to your agent:** attach **`FOR_AI.md`**, **`reference/<host>/`** (especially **`dom-structure.json`**), **`mirror/<host>/`**, **`tokens.json`**, and **`docs/design-references/<host-slug>/`**. For the full builder orchestration checklist, open **`AGENTS.md`** or run the **Clone Website** Cursor command.
|
|
27
|
+
|
|
28
|
+
## Supported platforms
|
|
29
|
+
|
|
30
|
+
| Agent | Status |
|
|
31
|
+
| ----- | ------ |
|
|
32
|
+
| [Claude Code](https://docs.anthropic.com/en/docs/claude-code) | Recommended — align with upstream template |
|
|
33
|
+
| [Codex CLI](https://github.com/openai/codex) | Supported — `.codex/skills/clone-website/` |
|
|
34
|
+
| [OpenCode](https://opencode.ai/) | Supported |
|
|
35
|
+
| [GitHub Copilot](https://github.com/features/copilot) | Supported — `AGENTS.md` → `npm run sync:agents` |
|
|
36
|
+
| [Cursor](https://cursor.com/) | Supported — `.cursor/commands/clone-website.md` |
|
|
37
|
+
| [Windsurf](https://codeium.com/windsurf) | Supported |
|
|
38
|
+
| [Gemini CLI](https://github.com/google-gemini/gemini-cli) | Supported (`GEMINI.md`) |
|
|
39
|
+
| [Cline](https://github.com/cline/cline) | Supported |
|
|
40
|
+
| [Roo Code](https://github.com/RooCodeInc/Roo-Code) | Supported |
|
|
41
|
+
| [Continue](https://continue.dev/) | Supported |
|
|
42
|
+
| [Amazon Q](https://aws.amazon.com/q/developer/) | Supported |
|
|
43
|
+
| [Augment Code](https://www.augmentcode.com/) | Supported |
|
|
44
|
+
| [Aider](https://aider.chat/) | Supported |
|
|
45
|
+
| … | Any agent that reads `AGENTS.md` |
|
|
46
|
+
|
|
47
|
+
## Prerequisites
|
|
48
|
+
|
|
49
|
+
- [Node.js](https://nodejs.org/) **20+**
|
|
50
|
+
- Chromium via Playwright (`npx playwright install chromium`)
|
|
51
|
+
- **From a git clone of this monorepo:** initialize the upstream template submodule with `git submodule update --init --recursive` (or clone with `git clone --recurse-submodules …`) so `vendor/ai-website-cloner-template` is available for reference.
|
|
52
|
+
|
|
53
|
+
## Tech stack
|
|
54
|
+
|
|
55
|
+
- **Extract:** Node.js, Playwright, TypeScript
|
|
56
|
+
- **Published CLI:** `npx launchframe` → `packages/extract/` (`landingfram` is a bin alias on install)
|
|
57
|
+
- **Studio (optional):** Next.js App Router in `apps/studio/` (**Next.js 16**, **React 19**, Tailwind CSS, **Lucide** via `@framework/blocks` / direct imports — aligned with [ai-website-cloner-template](https://github.com/JCodesMore/ai-website-cloner-template); studio Tailwind is v3 today while their README cites **v4**; emitted run artifacts remain drop-in CSS/token bundles.)
|
|
58
|
+
- **Mirror output:** React, Framer Motion, Phosphor (generated `page.tsx`)
|
|
59
|
+
- **Tokens:** `tailwind.config.ts`, `globals.css`, `tokens.json`, `REPORT.md`
|
|
60
|
+
|
|
61
|
+
## Parity with [ai-website-cloner-template](https://github.com/JCodesMore/ai-website-cloner-template)
|
|
62
|
+
|
|
63
|
+
Landingfram mirrors that template’s **phases and artifact roles**, not its single-repo layout:
|
|
64
|
+
|
|
65
|
+
| Aspect | What they do | What Landingfram does (same intent) |
|
|
66
|
+
| -------- | ------------------ | ------------------------------------- |
|
|
67
|
+
| **Phase 1 recon** | `/clone-website` drives screenshots, tokens, interaction sweep | **`npx launchframe`** performs automated recon (Playwright) into a run folder; optional Browser MCP passes match their sweep discipline (**Clone Website** in Cursor / **`clone-website`** skill elsewhere ≈ orchestration checklist) |
|
|
68
|
+
| **Repo shape** | One Next.js app (`src/app`, `components`, …) | **Monorepo:** CLI (`packages/extract`) + optional **`apps/studio`** + **`packages/blocks`**; published CLI ships separately |
|
|
69
|
+
| **Where artifacts live** | `docs/research/`, `docs/design-references/`, `public/` | Same tree **inside** `./output/<runId>/` (gitignored by default). To match their repo layout, run with **`--out path/to/your-next-app/extraction-<slug>`** or merge **`docs/`** + **`downloaded_assets/`** into your app’s **`docs/`** and **`public/images`** (and **`public/videos`**, **`public/seo`**) when integrating |
|
|
70
|
+
| **Stack** | Next 16, React 19, Tailwind v4, Lucide | **Next 16 + React 19 + Lucide** in studio/blocks; Tailwind **v3** in-studio until upgraded to v4 |
|
|
71
|
+
|
|
72
|
+
## How it works
|
|
73
|
+
|
|
74
|
+
Same multi-phase pipeline as [ai-website-cloner-template](https://github.com/JCodesMore/ai-website-cloner-template) (`vendor/ai-website-cloner-template` in this repo):
|
|
75
|
+
|
|
76
|
+
1. **Reconnaissance** — screenshots, design token extraction, interaction sweep (scroll, click, hover, responsive). **Launchfram:** run **`npx launchframe@latest <url> "<SaaS idea>"`** first for an automated baseline into **`./output/<runId>/`**; agents still use browser MCP for the mandatory sweep where needed (see **`.cursor/commands/clone-website.md`**).
|
|
77
|
+
2. **Foundation** — updates fonts, colors, globals, downloads all assets (merge emitted `globals.css` / `tailwind.config.ts` / `tokens.json` from the run when present).
|
|
78
|
+
3. **Component specs** — detailed spec files (`docs/research/components/`) with exact computed CSS values, states, behaviors, and content.
|
|
79
|
+
4. **Parallel build** — dispatches builder agents in git worktrees, one per section/component.
|
|
80
|
+
5. **Assembly & QA** — merges worktrees, wires up the page, runs visual diff against the original.
|
|
81
|
+
|
|
82
|
+
Each builder agent receives the full component specification **inline** — exact `getComputedStyle()` values, interaction models, multi-state content, responsive breakpoints, and asset paths. Authority order: **`FOR_AI.md`** and **`AGENTS.md`**.
|
|
83
|
+
|
|
84
|
+
## Use cases
|
|
85
|
+
|
|
86
|
+
- Seeding a **design system** from sites you’re allowed to analyze
|
|
87
|
+
- **Layout research** with a typed mirror and DOM reference
|
|
88
|
+
- **Rebuilding** properties you own when only the public site remains
|
|
89
|
+
|
|
90
|
+
## Not intended for
|
|
91
|
+
|
|
92
|
+
- **Impersonation or phishing**
|
|
93
|
+
- **Passing off** another brand’s identity, trademarks, or licensed media
|
|
94
|
+
- **Violating robots.txt or site terms** — Landingfram checks robots by default (`--no-robots` is discouraged)
|
|
95
|
+
|
|
96
|
+
## Output layout
|
|
45
97
|
|
|
46
98
|
```txt
|
|
47
99
|
output/<runId>/
|
|
48
|
-
├── FOR_AI.md
|
|
49
|
-
├── tokens.json
|
|
50
|
-
├── tailwind.config.ts
|
|
51
|
-
├── globals.css
|
|
52
|
-
├── theme-preview.tsx
|
|
53
|
-
├── REPORT.md
|
|
54
|
-
├── run.json
|
|
55
|
-
├── screenshots/
|
|
56
|
-
├── raw/
|
|
57
|
-
├── reference/
|
|
100
|
+
├── FOR_AI.md
|
|
101
|
+
├── tokens.json
|
|
102
|
+
├── tailwind.config.ts
|
|
103
|
+
├── globals.css
|
|
104
|
+
├── theme-preview.tsx
|
|
105
|
+
├── REPORT.md
|
|
106
|
+
├── run.json
|
|
107
|
+
├── screenshots/
|
|
108
|
+
├── raw/
|
|
109
|
+
├── reference/
|
|
58
110
|
│ └── <host>/
|
|
111
|
+
│ ├── dom-structure.json
|
|
59
112
|
│ ├── page.html
|
|
60
|
-
│ ├──
|
|
61
|
-
│ ├── structure-outline.txt ← tag skeleton for quick scanning
|
|
62
|
-
│ ├── visible-text.txt
|
|
63
|
-
│ ├── visible-text.json
|
|
113
|
+
│ ├── visible-text.txt / .json
|
|
64
114
|
│ ├── media.json
|
|
65
|
-
│ ├── meta.json
|
|
66
115
|
│ └── FOR_AI_REFERENCE.md
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
116
|
+
├── mirror/
|
|
117
|
+
│ └── <host>/
|
|
118
|
+
│ ├── page.tsx
|
|
119
|
+
│ └── MIRROR_NOTES.md
|
|
120
|
+
├── docs/
|
|
121
|
+
│ ├── design-references/<host-slug>/ # PNGs, probes, hints
|
|
122
|
+
│ └── research/<host-slug>/ # PAGE_TOPOLOGY, BEHAVIORS, components/*.spec.md
|
|
123
|
+
└── downloaded_assets/<host-slug>/ # when enabled
|
|
72
124
|
```
|
|
73
125
|
|
|
74
|
-
---
|
|
75
|
-
|
|
76
|
-
## Hand the output to your AI
|
|
77
|
-
|
|
78
|
-
1. Run the command above so `output/<runId>/` exists.
|
|
79
|
-
2. Attach **`reference/<host>/`**, especially **`dom-structure.json`** (exact tree) and **`visible-text.*`**, plus **`page.html`** and **`media.json`** so the model sees **exact structure and copy** from the crawl.
|
|
80
|
-
3. Pick the mirror folder: `output/<runId>/mirror/<host>/`.
|
|
81
|
-
4. Either:
|
|
82
|
-
- **Cursor:** `@`-attach `reference/<host>/`, `mirror/<host>/`, `FOR_AI.md`, and
|
|
83
|
-
`tokens.json`, then ask the agent to port copy from `visible-text.txt` into
|
|
84
|
-
`page.tsx` and wire media from `media.json`.
|
|
85
|
-
- **Claude Code:** copy both folders into your project, then ask the same.
|
|
86
|
-
5. The AI's authority order is **`dom-structure.json` (nesting) → `structure-outline.txt` / `page.html` → `visible-text.*` →
|
|
87
|
-
MIRROR_NOTES.md → mirror `page.tsx` → tokens.json → tailwind.config.ts + globals.css**. It must:
|
|
88
|
-
- Keep the section tree, grid composition, density, Motion, and Phosphor usage in `page.tsx`.
|
|
89
|
-
- Map strings from `visible-text.txt` into the right `<TextSlot>` slots (or replace slots with plain JSX).
|
|
90
|
-
- Use `media.json` for image/video `src` / `poster` (respect licensing; prefer your own assets).
|
|
91
|
-
|
|
92
|
-
---
|
|
93
|
-
|
|
94
126
|
## CLI reference
|
|
95
127
|
|
|
96
128
|
```bash
|
|
97
|
-
npx launchframe <url> [<url> ...] [options]
|
|
129
|
+
npx launchframe@latest <url> [<url> ...] ["Your SaaS idea"] [options]
|
|
98
130
|
```
|
|
99
131
|
|
|
100
|
-
| Flag
|
|
101
|
-
|
|
|
102
|
-
| `--out <dir>`
|
|
103
|
-
| `--name <slug
|
|
104
|
-
| `--no-robots`
|
|
105
|
-
| `--rate <n>`
|
|
106
|
-
| `--width <px>` | `1440`
|
|
107
|
-
| `--height <px
|
|
132
|
+
| Flag | Default | Notes |
|
|
133
|
+
| ---- | ------- | ----- |
|
|
134
|
+
| `--out <dir>` | `./output/<runId>` | Run directory |
|
|
135
|
+
| `--name <slug>` | _(unset)_ | Appends slug to run id |
|
|
136
|
+
| `--no-robots` | off | Skip robots.txt check |
|
|
137
|
+
| `--rate <n>` | `15` | Per-domain requests per minute |
|
|
138
|
+
| `--width <px>` | `1440` | Viewport width |
|
|
139
|
+
| `--height <px>` | `900` | Viewport height |
|
|
108
140
|
|
|
109
141
|
```bash
|
|
110
|
-
npx launchframe https://example.com --name
|
|
111
|
-
npx launchframe https://a.example https://b.example https://c.example --width 1280
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
---
|
|
115
|
-
|
|
116
|
-
## What the extractor actually does
|
|
117
|
-
|
|
118
|
-
For each URL:
|
|
119
|
-
|
|
120
|
-
1. Open the page in headless Chromium at a 1440 × 900 desktop viewport.
|
|
121
|
-
2. Take a full-page screenshot.
|
|
122
|
-
3. Walk the rendered DOM and harvest **computed styles** for every
|
|
123
|
-
visible element:
|
|
124
|
-
- Text and background colors, weighted by area
|
|
125
|
-
- Font families, sizes, weights, line-heights, letter-spacing
|
|
126
|
-
- Padding, gap, and margin values (snapped to a 4 px grid)
|
|
127
|
-
- Border radii (mode-picked across the page)
|
|
128
|
-
- Box-shadow stacks
|
|
129
|
-
- Dominant container width (the layout signal)
|
|
130
|
-
4. Save the raw observations as JSON.
|
|
131
|
-
|
|
132
|
-
After every site is captured, the synthesizer:
|
|
133
|
-
|
|
134
|
-
1. Clusters all colors into a representative palette and derives a full
|
|
135
|
-
shadcn-compatible ramp (`--background`, `--foreground`, `--primary`,
|
|
136
|
-
…) for both light and dark themes.
|
|
137
|
-
2. Picks a body base size from the count-weighted mode of body-range
|
|
138
|
-
font sizes, then fits a single scale ratio that lands the largest
|
|
139
|
-
observed heading at the `6xl` step. Substitutes proprietary type
|
|
140
|
-
families (e.g. SF Pro, Söhne, Circular, Graphik) with open-source
|
|
141
|
-
equivalents.
|
|
142
|
-
3. Snaps spacing values to a 4 px scale, takes the most-used buckets,
|
|
143
|
-
and computes a recommended container width from the median dominant
|
|
144
|
-
block width across the corpus.
|
|
145
|
-
4. Picks a representative radius and emits a tasteful three-stop shadow
|
|
146
|
-
scale.
|
|
147
|
-
5. Writes drop-in files plus a Markdown report attributing every source.
|
|
148
|
-
|
|
149
|
-
```
|
|
150
|
-
URLs ──▶ Playwright ──▶ raw tokens.json ──▶ synthesize ──▶ DesignSystem ──▶ emit
|
|
151
|
-
(per site) (one corpus)
|
|
142
|
+
npx launchframe@latest https://example.com "AI billing copilot" --name acme
|
|
152
143
|
```
|
|
153
144
|
|
|
154
|
-
---
|
|
155
|
-
|
|
156
145
|
## Run inside this repo (contributors)
|
|
157
146
|
|
|
158
147
|
```bash
|
|
@@ -160,78 +149,34 @@ git clone https://github.com/evangruhlkey/launchframe
|
|
|
160
149
|
cd launchframe
|
|
161
150
|
npm install
|
|
162
151
|
npx playwright install chromium
|
|
163
|
-
npm run extract -- https://
|
|
152
|
+
npm run extract -- https://example.com "Your SaaS idea"
|
|
164
153
|
```
|
|
165
154
|
|
|
166
|
-
The repo is a monorepo that also contains a research framework for
|
|
167
|
-
classifying SaaS UI patterns and generating original shadcn blocks:
|
|
168
|
-
|
|
169
|
-
```txt
|
|
170
|
-
launchframe/
|
|
171
|
-
├── apps/
|
|
172
|
-
│ └── studio/ # Next.js dashboard for browsing patterns/blocks
|
|
173
|
-
├── packages/
|
|
174
|
-
│ ├── extract/ # ← the published CLI
|
|
175
|
-
│ ├── capture/ # Playwright screenshot capture (lower level)
|
|
176
|
-
│ ├── analysis/ # Layout-tree extraction & section classifier
|
|
177
|
-
│ ├── patterns/ # Typed pattern schemas + atlas registry loader
|
|
178
|
-
│ ├── blocks/ # Shadcn/ui blocks + TextSlot / MediaSlot primitives
|
|
179
|
-
│ └── evaluation/ # Coherence + responsiveness/a11y evaluator
|
|
180
|
-
├── pattern-atlas/ # Pattern catalog per category (block-composition mode)
|
|
181
|
-
├── prompts/ # Markdown prompts for AI agents
|
|
182
|
-
├── rules/ # Design / copy / a11y rules
|
|
183
|
-
├── registry/ # shadcn-compatible custom registry manifest
|
|
184
|
-
└── output/ # ← every `extract` run lands here
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
Other commands (repo-only):
|
|
188
|
-
|
|
189
155
|
```bash
|
|
190
|
-
npm run studio
|
|
191
|
-
npm run
|
|
192
|
-
npm run
|
|
193
|
-
npm run
|
|
194
|
-
npm run evaluate # Grade a generated page (coherence + a11y)
|
|
195
|
-
npm run typecheck # Project-wide TypeScript check
|
|
196
|
-
npm run sync:agents # Regenerate Copilot / Cline / Continue / Amazon Q stubs from AGENTS.md
|
|
156
|
+
npm run studio # Next.js studio
|
|
157
|
+
npm run studio:build # Production build
|
|
158
|
+
npm run typecheck
|
|
159
|
+
npm run sync:agents # Regenerate Copilot / Cline / Continue / Amazon Q stubs from AGENTS.md
|
|
197
160
|
```
|
|
198
161
|
|
|
199
162
|
### AI agents in this repo
|
|
200
163
|
|
|
201
|
-
- **`AGENTS.md`**
|
|
202
|
-
- **Cursor:** `.cursor/rules/project.mdc` points at `AGENTS.md
|
|
203
|
-
-
|
|
204
|
-
|
|
164
|
+
- **`AGENTS.md`** is the **single source of truth** for agent instructions; **`docs/research/INSPECTION_GUIDE.md`** is inlined when you run **`npm run sync:agents`**.
|
|
165
|
+
- **Cursor:** `.cursor/rules/project.mdc` points at `AGENTS.md`; use **Clone Website** for the full cloner-template-style checklist.
|
|
166
|
+
- Edit **`AGENTS.md`**, then run **`npm run sync:agents`**.
|
|
167
|
+
|
|
168
|
+
### Updating agent copies (parity with upstream template)
|
|
205
169
|
|
|
206
|
-
|
|
170
|
+
| What | Source of truth (this repo) | Sync / notes |
|
|
171
|
+
| ---- | --------------------------- | ------------ |
|
|
172
|
+
| Project instructions | `AGENTS.md` | `npm run sync:agents` |
|
|
173
|
+
| `/clone-website` skill text | `vendor/ai-website-cloner-template/.claude/skills/clone-website/SKILL.md` | Copy into `.claude/`, `.codex/`, `.github/skills/`; re-apply **Pre-Flight step 0** (Launchfram). Cursor command: `vendor/.../.cursor/commands/clone-website.md` → `.cursor/commands/` (same step 0). |
|
|
174
|
+
| Inspection checklist | `vendor/.../docs/research/INSPECTION_GUIDE.md` | Merged in `docs/research/INSPECTION_GUIDE.md` with a **Landingfram** mapping section. |
|
|
207
175
|
|
|
208
176
|
## What this is not
|
|
209
177
|
|
|
210
|
-
- **Not the
|
|
211
|
-
|
|
212
|
-
density) — not a dump of the origin's original components or stylesheets.
|
|
213
|
-
- **Not a substitute for legal clearance.** `reference/<host>/` may contain
|
|
214
|
-
serialized DOM and visible text for tooling **you** run on pages you are
|
|
215
|
-
allowed to analyze. You are responsible for trademarks, copy licenses, and
|
|
216
|
-
`robots.txt`/ToS compliance when using those artifacts.
|
|
217
|
-
- **Not a component library replacement.** Launchframe sits *alongside*
|
|
218
|
-
shadcn/ui: theme files, reference dumps, and slot-driven mirror pages —
|
|
219
|
-
you integrate into your own app.
|
|
220
|
-
|
|
221
|
-
---
|
|
222
|
-
|
|
223
|
-
## Responsible use in one paragraph
|
|
224
|
-
|
|
225
|
-
Launchframe is intended for layout research and design-system seeding
|
|
226
|
-
against pages you have permission to analyze (your own products, sites
|
|
227
|
-
where the operator has permission, or pages where structural analysis is
|
|
228
|
-
permitted by `robots.txt`). The crawler respects `robots.txt` by default
|
|
229
|
-
and rate-limits per domain. Output includes synthesized theme files, a
|
|
230
|
-
typed **mirror** page scaffold, and (per capture) a **reference** bundle
|
|
231
|
-
(DOM snapshot, visible text, media URLs) for AI-assisted reconstruction.
|
|
232
|
-
Operators remain responsible for how they use copy, media, and branding.
|
|
233
|
-
|
|
234
|
-
---
|
|
178
|
+
- **Not the origin site’s bundle** — output is synthesized tokens, reference artifacts, and a **slot-based mirror**, not a dump of proprietary components.
|
|
179
|
+
- **Not legal clearance** — you are responsible for compliance; see **`FOR_AI.md`** and **`AGENTS.md`**.
|
|
235
180
|
|
|
236
181
|
## License
|
|
237
182
|
|
package/bin/launchframe.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* CLI entry for `npx launchframe`
|
|
4
|
-
* Spawns the TypeScript extract pipeline with the same Node
|
|
5
|
-
* this package. Output defaults to `./output/<runId>/` in the
|
|
6
|
-
* working directory (where the user ran the command), not inside the
|
|
3
|
+
* CLI entry for `npx launchframe@latest` (npm package name) and the `landingfram`
|
|
4
|
+
* bin shim on install. Spawns the TypeScript extract pipeline with the same Node
|
|
5
|
+
* that installed this package. Output defaults to `./output/<runId>/` in the
|
|
6
|
+
* *current* working directory (where the user ran the command), not inside the
|
|
7
7
|
* package install path.
|
|
8
8
|
*/
|
|
9
9
|
|
|
@@ -25,7 +25,7 @@ try {
|
|
|
25
25
|
tsxCli = join(dirname(tsxPkg), "dist", "cli.mjs");
|
|
26
26
|
} catch {
|
|
27
27
|
console.error(
|
|
28
|
-
"launchframe: could not resolve the `tsx` runtime. Re-install: npm install -g launchframe",
|
|
28
|
+
"launchframe: could not resolve the `tsx` runtime. Re-install with: npm install -g launchframe",
|
|
29
29
|
);
|
|
30
30
|
process.exit(1);
|
|
31
31
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "launchframe",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Launchframe CLI: point it at SaaS sites you admire and get a drop-in shadcn/ui design system (tokens, Tailwind theme, CSS variables, AI handoff) plus ai-website-cloner-style recon (reference DOM, mirror, design references, research stubs). Primary install: npx launchframe@latest.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Evan Gruhlkey",
|
|
7
7
|
"homepage": "https://github.com/evangruhlkey/launchframe#readme",
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
},
|
|
15
15
|
"keywords": [
|
|
16
16
|
"launchframe",
|
|
17
|
+
"landingfram",
|
|
17
18
|
"shadcn",
|
|
18
19
|
"shadcn-ui",
|
|
19
20
|
"tailwind",
|
|
@@ -26,6 +27,7 @@
|
|
|
26
27
|
"cli"
|
|
27
28
|
],
|
|
28
29
|
"bin": {
|
|
30
|
+
"landingfram": "bin/launchframe.mjs",
|
|
29
31
|
"launchframe": "bin/launchframe.mjs"
|
|
30
32
|
},
|
|
31
33
|
"files": [
|