@growthub/cli 0.3.54 → 0.3.56
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 +56 -156
- package/assets/worker-kits/growthub-ai-website-cloner-v1/.env.example +7 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/QUICKSTART.md +116 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/brands/NEW-CLIENT.md +22 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/brands/_template/brand-kit.md +27 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/brands/growthub/brand-kit.md +26 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/bundles/growthub-ai-website-cloner-v1.json +53 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/docs/ai-website-cloner-fork-integration.md +118 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/docs/design-token-system.md +135 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/docs/multi-phase-pipeline.md +129 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/docs/parallel-builder-dispatch.md +103 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/examples/clone-brief-sample.md +54 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/examples/component-spec-sample.md +123 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/examples/platform-handoff-sample.md +102 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/examples/visual-qa-sample.md +119 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/growthub-meta/README.md +71 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/growthub-meta/kit-standard.md +47 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/kit.json +105 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/output/README.md +26 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/output-standards.md +75 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/runtime-assumptions.md +70 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/setup/check-deps.sh +50 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/setup/clone-fork.sh +66 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/setup/verify-env.mjs +78 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/skills.md +186 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/asset-manifest.md +57 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/builder-dispatch-plan.md +92 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/clone-brief.md +59 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/component-spec.md +124 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/design-token-extraction.md +89 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/platform-handoff.md +114 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/reconnaissance-report.md +77 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/visual-qa-checklist.md +107 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/validation-checklist.md +76 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/workers/ai-website-cloner-operator/CLAUDE.md +256 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/.env.example +40 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/QUICKSTART.md +114 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/brands/NEW-CLIENT.md +42 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/brands/_template/brand-kit.md +49 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/brands/growthub/brand-kit.md +50 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/bundles/growthub-open-montage-studio-v1.json +55 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/docs/cms-node-bridge.md +152 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/docs/open-montage-fork-integration.md +120 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/docs/pipeline-reference.md +147 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/docs/provider-adapter-layer.md +105 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/examples/cms-node-video-gen-sample.md +109 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/examples/pipeline-selection-sample.md +67 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/examples/platform-ready-handoff-sample.md +101 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/examples/video-production-brief-sample.md +68 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/growthub-meta/README.md +7 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/growthub-meta/kit-standard.md +45 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/kit.json +107 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/output/README.md +34 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/output-standards.md +79 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/runtime-assumptions.md +86 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/setup/check-deps.sh +43 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/setup/clone-fork.sh +53 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/setup/verify-env.mjs +102 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/skills.md +254 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/asset-tracking.md +46 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/cms-node-pipeline-mapping.md +64 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/generation-batch-plan.md +70 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/pipeline-selection-brief.md +67 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/platform-ready-execution-handoff.md +103 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/prompt-matrix.md +48 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/provider-selection-brief.md +86 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/review-qa-checklist.md +59 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/scene-plan.md +65 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/video-production-brief.md +58 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/validation-checklist.md +46 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/workers/open-montage-studio-operator/CLAUDE.md +304 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/.env.example +15 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/QUICKSTART.md +90 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/brands/NEW-CLIENT.md +57 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/brands/_template/brand-kit.md +88 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/brands/growthub/brand-kit.md +92 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/bundles/growthub-twenty-crm-v1.json +56 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/docs/api-and-webhooks.md +296 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/docs/data-model-layer.md +172 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/docs/twenty-fork-integration.md +213 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/examples/crm-playbook-sample.md +172 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/examples/crm-setup-sample.md +100 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/examples/lead-enrichment-sample.md +117 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/examples/pipeline-automation-sample.md +132 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/growthub-meta/README.md +114 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/growthub-meta/kit-standard.md +61 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/kit.json +108 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/output/README.md +46 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/output-standards.md +175 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/runtime-assumptions.md +150 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/setup/check-deps.sh +56 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/setup/clone-fork.sh +77 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/setup/verify-env.mjs +105 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/skills.md +401 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/api-query-plan.md +179 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/crm-playbook.md +155 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/crm-setup-brief.md +94 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/custom-object-design.md +115 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/data-model-design.md +112 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/enrichment-field-map.md +100 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/import-mapping.md +139 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/integration-handoff.md +190 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/lead-enrichment-pipeline.md +128 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/pipeline-automation-brief.md +88 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/webhook-integration-spec.md +129 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/workspace-config-checklist.md +129 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/validation-checklist.md +115 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/workers/twenty-crm-operator/CLAUDE.md +310 -0
- package/package.json +1 -1
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// verify-env.mjs — Verify the AI Website Cloner environment is ready
|
|
3
|
+
import { existsSync } from "node:fs";
|
|
4
|
+
import { execSync } from "node:child_process";
|
|
5
|
+
import { resolve } from "node:path";
|
|
6
|
+
import { homedir } from "node:os";
|
|
7
|
+
|
|
8
|
+
const FORK_PATH = process.env.AI_CLONER_FORK_PATH || resolve(homedir(), "ai-website-cloner-template");
|
|
9
|
+
|
|
10
|
+
let passed = 0;
|
|
11
|
+
let failed = 0;
|
|
12
|
+
|
|
13
|
+
function check(label, pass, detail) {
|
|
14
|
+
if (pass) {
|
|
15
|
+
console.log(` ✓ ${label}`);
|
|
16
|
+
passed++;
|
|
17
|
+
} else {
|
|
18
|
+
console.log(` ✗ ${label}${detail ? ` — ${detail}` : ""}`);
|
|
19
|
+
failed++;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
console.log("\nAI Website Cloner — Environment Check");
|
|
24
|
+
console.log("─".repeat(48));
|
|
25
|
+
|
|
26
|
+
// Check 1: Fork directory
|
|
27
|
+
check(
|
|
28
|
+
`Fork exists at ${FORK_PATH}`,
|
|
29
|
+
existsSync(FORK_PATH),
|
|
30
|
+
`Run: bash setup/clone-fork.sh`
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
// Check 2: Fork dependencies
|
|
34
|
+
check(
|
|
35
|
+
"Fork dependencies installed",
|
|
36
|
+
existsSync(resolve(FORK_PATH, "node_modules")),
|
|
37
|
+
`Run: cd ${FORK_PATH} && npm install`
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
// Check 3: Fork structure
|
|
41
|
+
for (const item of ["src/app", "src/components", "src/lib", "package.json", "next.config.ts"]) {
|
|
42
|
+
check(
|
|
43
|
+
`Fork has ${item}`,
|
|
44
|
+
existsSync(resolve(FORK_PATH, item)),
|
|
45
|
+
"Unexpected fork structure — check fork README"
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Check 4: Node.js version
|
|
50
|
+
try {
|
|
51
|
+
const version = process.versions.node.split(".")[0];
|
|
52
|
+
const isOk = parseInt(version, 10) >= 24;
|
|
53
|
+
check(
|
|
54
|
+
`Node.js 24+ (current: ${process.versions.node})`,
|
|
55
|
+
isOk,
|
|
56
|
+
"Upgrade at https://nodejs.org/ or use: nvm use 24"
|
|
57
|
+
);
|
|
58
|
+
} catch {
|
|
59
|
+
check("Node.js version check", false, "Could not determine version");
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Check 5: Git available
|
|
63
|
+
try {
|
|
64
|
+
execSync("git --version", { stdio: "ignore" });
|
|
65
|
+
check("git available", true);
|
|
66
|
+
} catch {
|
|
67
|
+
check("git available", false, "Install git: https://git-scm.com/");
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
console.log("─".repeat(48));
|
|
71
|
+
console.log(` ${passed} passed · ${failed} failed`);
|
|
72
|
+
|
|
73
|
+
if (failed > 0) {
|
|
74
|
+
console.log("\n Run: bash setup/clone-fork.sh to fix setup issues.\n");
|
|
75
|
+
process.exit(1);
|
|
76
|
+
} else {
|
|
77
|
+
console.log("\n Environment is ready. Start your AI agent and run: /clone-website <url>\n");
|
|
78
|
+
}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
# AI Website Cloner Operator — Skills
|
|
2
|
+
|
|
3
|
+
**Kit:** `growthub-ai-website-cloner-v1`
|
|
4
|
+
**Worker ID:** `ai-website-cloner-operator`
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## SKILL: `/clone-website`
|
|
9
|
+
|
|
10
|
+
The primary skill. Accepts one or more target URLs and executes the full clone pipeline.
|
|
11
|
+
|
|
12
|
+
### Invocation
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
/clone-website <target-url1> [<target-url2> ...]
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### Pipeline phases (strict order)
|
|
19
|
+
|
|
20
|
+
| Phase | Name | Key output |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| 0 | Environment gate | Pass/fail — fork exists, Node 24+, deps installed |
|
|
23
|
+
| 1 | Reconnaissance | Screenshots, design tokens, interaction map, asset inventory |
|
|
24
|
+
| 2 | Foundation | Design token extraction sheet, fonts, globals, layout scaffold |
|
|
25
|
+
| 3 | Component specs | One spec file per section with exact computed CSS values |
|
|
26
|
+
| 4 | Asset download | All images, videos, SVGs, fonts downloaded to `public/` |
|
|
27
|
+
| 5 | Builder dispatch | Parallel worktrees — one per section/component |
|
|
28
|
+
| 6 | Assembly | Merge all worktrees, wire up route, resolve conflicts |
|
|
29
|
+
| 7 | Visual QA | Diff against original screenshots, document deviations |
|
|
30
|
+
| 8 | Platform handoff | Build verified, deployment instructions, client deliverable |
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## RECONNAISSANCE CHECKLIST
|
|
35
|
+
|
|
36
|
+
Before writing any spec, capture all of the following:
|
|
37
|
+
|
|
38
|
+
### Screenshots
|
|
39
|
+
- Desktop: 1440px wide, full scroll depth (every viewport height of content)
|
|
40
|
+
- Tablet: 768px wide, same depth
|
|
41
|
+
- Mobile: 375px wide, same depth
|
|
42
|
+
- Interactive states: hover states on navigation, CTAs, cards
|
|
43
|
+
|
|
44
|
+
### Design token extraction
|
|
45
|
+
- Color palette: exact hex values + oklch equivalents for CSS
|
|
46
|
+
- Typography: every font family, size, weight, line-height, letter-spacing combination in use
|
|
47
|
+
- Spacing: all margin/padding values used in the layout (identify the scale)
|
|
48
|
+
- Border radius: all border-radius values
|
|
49
|
+
- Box shadows: all box-shadow definitions
|
|
50
|
+
- Transitions: all transition/animation timing values
|
|
51
|
+
|
|
52
|
+
### Interaction sweep
|
|
53
|
+
- Navigation: all hover states, dropdowns, mobile hamburger
|
|
54
|
+
- CTAs and buttons: hover, active, focus, disabled states
|
|
55
|
+
- Cards: hover transforms, shadows
|
|
56
|
+
- Scroll-triggered: parallax, fade-ins, stickiness
|
|
57
|
+
- Forms: focus, validation, error states
|
|
58
|
+
|
|
59
|
+
### Asset inventory
|
|
60
|
+
- All `<img>` src values (CDN URLs)
|
|
61
|
+
- All `<video>` src values
|
|
62
|
+
- All background-image URLs
|
|
63
|
+
- All SVG icons (inline or file)
|
|
64
|
+
- All custom webfont sources
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## DESIGN TOKEN EXTRACTION METHODOLOGY
|
|
69
|
+
|
|
70
|
+
Use `getComputedStyle()` in the browser DevTools console to extract exact values:
|
|
71
|
+
|
|
72
|
+
```js
|
|
73
|
+
// Get all colors used in the page
|
|
74
|
+
[...document.querySelectorAll('*')].flatMap(el => {
|
|
75
|
+
const s = getComputedStyle(el);
|
|
76
|
+
return [s.color, s.backgroundColor, s.borderColor].filter(c => c && c !== 'rgba(0, 0, 0, 0)');
|
|
77
|
+
}).filter((v, i, a) => a.indexOf(v) === i);
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Document all values in `templates/design-token-extraction.md`. Convert to oklch for Tailwind CSS v4.
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## COMPONENT SPEC FORMAT
|
|
85
|
+
|
|
86
|
+
Each spec file must include these sections:
|
|
87
|
+
|
|
88
|
+
```markdown
|
|
89
|
+
# <SectionName> — Component Spec
|
|
90
|
+
|
|
91
|
+
## Purpose
|
|
92
|
+
What this section does for the user.
|
|
93
|
+
|
|
94
|
+
## Layout
|
|
95
|
+
- Container max-width: <value>
|
|
96
|
+
- Padding: <top> <right> <bottom> <left>
|
|
97
|
+
- Display: <flex|grid|block>
|
|
98
|
+
- Grid columns (desktop/tablet/mobile): <values>
|
|
99
|
+
- Gap: <value>
|
|
100
|
+
|
|
101
|
+
## Typography
|
|
102
|
+
- Heading: <font-family>, <size>/<line-height>, weight <weight>
|
|
103
|
+
- Body: <font-family>, <size>/<line-height>, weight <weight>
|
|
104
|
+
- Caption: <font-family>, <size>/<line-height>, weight <weight>
|
|
105
|
+
|
|
106
|
+
## Colors
|
|
107
|
+
- Background: <hex> / oklch(<value>)
|
|
108
|
+
- Text primary: <hex> / oklch(<value>)
|
|
109
|
+
- Text secondary: <hex> / oklch(<value>)
|
|
110
|
+
- Accent: <hex> / oklch(<value>)
|
|
111
|
+
- Border: <hex> / oklch(<value>)
|
|
112
|
+
|
|
113
|
+
## States
|
|
114
|
+
- Default: [describe]
|
|
115
|
+
- Hover: [describe — exact transform, color change, transition timing]
|
|
116
|
+
- Active: [describe]
|
|
117
|
+
- Focus: [describe — focus ring color, offset]
|
|
118
|
+
|
|
119
|
+
## Responsive
|
|
120
|
+
- Desktop (1440px): [layout description]
|
|
121
|
+
- Tablet (768px): [layout changes]
|
|
122
|
+
- Mobile (375px): [layout changes]
|
|
123
|
+
|
|
124
|
+
## Assets
|
|
125
|
+
- Image: public/images/<filename>.<ext> — originally from <cdn-url>
|
|
126
|
+
- Icon: src/components/icons.tsx as <IconName>
|
|
127
|
+
|
|
128
|
+
## Content
|
|
129
|
+
[Exact text content from the target — no placeholders]
|
|
130
|
+
|
|
131
|
+
## Accessibility
|
|
132
|
+
- ARIA role: <role>
|
|
133
|
+
- Landmark: <nav|main|aside|footer>
|
|
134
|
+
- Tab order: [describe]
|
|
135
|
+
- Keyboard navigation: [describe]
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## BUILDER DISPATCH RULES
|
|
141
|
+
|
|
142
|
+
1. Each builder receives exactly one component spec
|
|
143
|
+
2. Each builder works in a fresh `git worktree` on a dedicated branch: `build/<section-slug>`
|
|
144
|
+
3. Builders output files ONLY to `src/components/<section-slug>/`
|
|
145
|
+
4. No builder writes to: `src/app/`, `src/lib/`, `src/types/`, `globals.css`, `layout.tsx`
|
|
146
|
+
5. The orchestrator owns all assembly and shared file writes
|
|
147
|
+
6. After all builders complete, orchestrator merges all `build/*` branches
|
|
148
|
+
7. Merge conflicts are resolved by the orchestrator with full spec context
|
|
149
|
+
8. Assembly order follows the spec list in the dispatch plan
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## VISUAL QA STANDARDS
|
|
154
|
+
|
|
155
|
+
A clone passes QA when:
|
|
156
|
+
|
|
157
|
+
| Criterion | Threshold |
|
|
158
|
+
|---|---|
|
|
159
|
+
| Layout accuracy | All major sections within 2px of original |
|
|
160
|
+
| Color fidelity | All token values match extracted values |
|
|
161
|
+
| Typography | Font family, size, weight identical for all text |
|
|
162
|
+
| Asset completeness | All images, videos, icons present and loading |
|
|
163
|
+
| Responsive | No layout breaks at 1440, 768, 375px |
|
|
164
|
+
| Interaction | All hover/focus/active states visually match |
|
|
165
|
+
| Build | `npm run build` exits 0 with no errors |
|
|
166
|
+
| Lint | `npm run lint` exits 0 |
|
|
167
|
+
|
|
168
|
+
Any deviation must be documented in `visual-qa-checklist.md` with a reason and resolution.
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## OUTPUT NAMING
|
|
173
|
+
|
|
174
|
+
All outputs use the pattern:
|
|
175
|
+
```
|
|
176
|
+
output/<client-slug>/<project-slug>/<artifact-type>.<extension>
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Examples:
|
|
180
|
+
```
|
|
181
|
+
output/acme-corp/homepage-clone/research/reconnaissance-report.md
|
|
182
|
+
output/acme-corp/homepage-clone/specs/hero-section.md
|
|
183
|
+
output/acme-corp/homepage-clone/specs/navigation.md
|
|
184
|
+
output/acme-corp/homepage-clone/qa/visual-qa-checklist.md
|
|
185
|
+
output/acme-corp/homepage-clone/platform-handoff.md
|
|
186
|
+
```
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Asset Manifest
|
|
2
|
+
|
|
3
|
+
**Project:** [PROJECT NAME]
|
|
4
|
+
**Target URL:** [https://example.com]
|
|
5
|
+
**Date:** YYYY-MM-DD
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Images
|
|
10
|
+
|
|
11
|
+
| File | Public path | Source URL | Section used | Notes |
|
|
12
|
+
|---|---|---|---|---|
|
|
13
|
+
| [filename.ext] | `public/images/[filename.ext]` | [CDN URL] | [section-slug] | — |
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Videos
|
|
18
|
+
|
|
19
|
+
| File | Public path | Source URL | Section used | Notes |
|
|
20
|
+
|---|---|---|---|---|
|
|
21
|
+
| [filename.ext] | `public/videos/[filename.ext]` | [CDN URL] | [section-slug] | — |
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## SVG icons
|
|
26
|
+
|
|
27
|
+
| Icon name | Component name | Source | Section used | Notes |
|
|
28
|
+
|---|---|---|---|---|
|
|
29
|
+
| [icon name] | `[IconName]` in `src/components/icons.tsx` | [inline / file URL] | [sections] | — |
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Custom fonts
|
|
34
|
+
|
|
35
|
+
| Font family | Weights | Source | How used |
|
|
36
|
+
|---|---|---|---|
|
|
37
|
+
| [Font Name] | [400, 700] | [CDN URL / system] | [heading, body] |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## SEO assets
|
|
42
|
+
|
|
43
|
+
| File | Public path | Notes |
|
|
44
|
+
|---|---|---|
|
|
45
|
+
| favicon.ico | `public/seo/favicon.ico` | — |
|
|
46
|
+
| og-image.png | `public/seo/og-image.png` | — |
|
|
47
|
+
| site.webmanifest | `public/seo/site.webmanifest` | — |
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Download status
|
|
52
|
+
|
|
53
|
+
- [ ] All images downloaded to `public/images/`
|
|
54
|
+
- [ ] All videos downloaded to `public/videos/`
|
|
55
|
+
- [ ] All SEO assets downloaded to `public/seo/`
|
|
56
|
+
- [ ] All SVG icons extracted and added to `src/components/icons.tsx`
|
|
57
|
+
- [ ] Custom fonts added to `src/app/layout.tsx` or `globals.css`
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Builder Dispatch Plan
|
|
2
|
+
|
|
3
|
+
**Project:** [PROJECT NAME]
|
|
4
|
+
**Date:** YYYY-MM-DD
|
|
5
|
+
**Total builders:** [N]
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Dispatch rules
|
|
10
|
+
|
|
11
|
+
1. Each builder works in `git worktree` on branch `build/<section-slug>`
|
|
12
|
+
2. Each builder receives: section spec + design token extraction + asset manifest
|
|
13
|
+
3. Builders output ONLY to `src/components/<section-slug>/`
|
|
14
|
+
4. No builder touches: `src/app/`, `src/lib/`, `src/types/`, `globals.css`, `layout.tsx`
|
|
15
|
+
5. Orchestrator assembles the page and resolves merge conflicts
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Builder assignments
|
|
20
|
+
|
|
21
|
+
| Builder | Branch | Section | Spec file | Est. complexity |
|
|
22
|
+
|---|---|---|---|---|
|
|
23
|
+
| 1 | `build/navigation` | Navigation | `specs/navigation.md` | [low/med/high] |
|
|
24
|
+
| 2 | `build/hero-section` | Hero | `specs/hero-section.md` | [low/med/high] |
|
|
25
|
+
| 3 | `build/[slug]` | [Section] | `specs/[slug].md` | [low/med/high] |
|
|
26
|
+
| N | `build/footer` | Footer | `specs/footer.md` | [low/med/high] |
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Shared context for all builders
|
|
31
|
+
|
|
32
|
+
All builders receive the following files inline:
|
|
33
|
+
- `templates/design-token-extraction.md` (full token set)
|
|
34
|
+
- `templates/asset-manifest.md` (all downloaded assets)
|
|
35
|
+
- Their section's spec file
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Assembly order
|
|
40
|
+
|
|
41
|
+
After all builders complete, the orchestrator assembles in this order:
|
|
42
|
+
|
|
43
|
+
```tsx
|
|
44
|
+
// src/app/page.tsx
|
|
45
|
+
import { Navigation } from "@/components/navigation/Navigation";
|
|
46
|
+
import { HeroSection } from "@/components/hero-section/HeroSection";
|
|
47
|
+
// ... in section order
|
|
48
|
+
import { Footer } from "@/components/footer/Footer";
|
|
49
|
+
|
|
50
|
+
export default function Page() {
|
|
51
|
+
return (
|
|
52
|
+
<>
|
|
53
|
+
<Navigation />
|
|
54
|
+
<main>
|
|
55
|
+
<HeroSection />
|
|
56
|
+
{/* sections in order */}
|
|
57
|
+
</main>
|
|
58
|
+
<Footer />
|
|
59
|
+
</>
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Merge instructions
|
|
67
|
+
|
|
68
|
+
After all `build/*` branches are complete:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
cd ~/ai-website-cloner-template
|
|
72
|
+
git checkout main
|
|
73
|
+
|
|
74
|
+
# Merge each builder branch
|
|
75
|
+
git merge build/navigation --no-ff -m "feat: navigation component"
|
|
76
|
+
git merge build/hero-section --no-ff -m "feat: hero section"
|
|
77
|
+
# ... continue for all builders
|
|
78
|
+
|
|
79
|
+
# Assemble the page
|
|
80
|
+
# Edit src/app/page.tsx to import and wire all components
|
|
81
|
+
|
|
82
|
+
# Run quality checks
|
|
83
|
+
npm run build
|
|
84
|
+
npm run lint
|
|
85
|
+
npm run typecheck
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Conflict resolution notes
|
|
91
|
+
|
|
92
|
+
[Document any merge conflicts encountered and how they were resolved]
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Clone Brief
|
|
2
|
+
|
|
3
|
+
**Project:** [PROJECT NAME]
|
|
4
|
+
**Client:** [CLIENT NAME]
|
|
5
|
+
**Target URL(s):** [https://example.com]
|
|
6
|
+
**Date:** YYYY-MM-DD
|
|
7
|
+
**Operator:** `ai-website-cloner-operator`
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Objective
|
|
12
|
+
|
|
13
|
+
[Describe what success looks like — pixel-perfect clone, design reference, migration to modern stack, etc.]
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Scope
|
|
18
|
+
|
|
19
|
+
### Pages to clone
|
|
20
|
+
- [ ] [https://example.com] — [page description]
|
|
21
|
+
- [ ] [https://example.com/about] — [page description]
|
|
22
|
+
|
|
23
|
+
### Sections to include
|
|
24
|
+
- [ ] Navigation / Header
|
|
25
|
+
- [ ] Hero / Above-the-fold
|
|
26
|
+
- [ ] [Additional sections…]
|
|
27
|
+
- [ ] Footer
|
|
28
|
+
|
|
29
|
+
### Sections to exclude
|
|
30
|
+
- [ ] Login / auth flows
|
|
31
|
+
- [ ] Payment pages
|
|
32
|
+
- [ ] [Any other exclusions with reason]
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Constraints
|
|
37
|
+
|
|
38
|
+
- **Deployment target:** [Vercel / self-hosted / static export]
|
|
39
|
+
- **Custom domain:** [domain or TBD]
|
|
40
|
+
- **Proprietary fonts:** [List any fonts that may not be available]
|
|
41
|
+
- **Auth-gated content:** [Any content not accessible without login]
|
|
42
|
+
- **Terms of Service notes:** [Any ToS constraints noted before starting]
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Deliverables
|
|
47
|
+
|
|
48
|
+
- [ ] Cloned Next.js codebase in `~/ai-website-cloner-template`
|
|
49
|
+
- [ ] Reconnaissance report
|
|
50
|
+
- [ ] Design token extraction sheet
|
|
51
|
+
- [ ] Component specs for all sections
|
|
52
|
+
- [ ] Visual QA checklist
|
|
53
|
+
- [ ] Platform handoff document
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Timeline
|
|
58
|
+
|
|
59
|
+
[Technical complexity description — number of sections, interactive components, asset volume]
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# [SectionName] — Component Spec
|
|
2
|
+
|
|
3
|
+
**Project:** [PROJECT NAME]
|
|
4
|
+
**Section slug:** `[section-slug]`
|
|
5
|
+
**Output component:** `src/components/[section-slug]/[ComponentName].tsx`
|
|
6
|
+
**Date:** YYYY-MM-DD
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Purpose
|
|
11
|
+
|
|
12
|
+
[What this section does for the user — one paragraph.]
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Layout
|
|
17
|
+
|
|
18
|
+
- **Container max-width:** [value]
|
|
19
|
+
- **Container padding (desktop):** [top right bottom left]
|
|
20
|
+
- **Container padding (mobile):** [top right bottom left]
|
|
21
|
+
- **Display:** [flex | grid | block]
|
|
22
|
+
- **Grid columns (desktop):** [value]
|
|
23
|
+
- **Grid columns (tablet):** [value]
|
|
24
|
+
- **Grid columns (mobile):** [value]
|
|
25
|
+
- **Gap:** [value]
|
|
26
|
+
- **Section min-height:** [value]
|
|
27
|
+
- **Background:** [color token]
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Typography
|
|
32
|
+
|
|
33
|
+
| Element | Font family | Size | Line height | Weight | Color | Notes |
|
|
34
|
+
|---|---|---|---|---|---|---|
|
|
35
|
+
| Heading | [family] | [size] | [lh] | [weight] | [color] | — |
|
|
36
|
+
| Subheading | [family] | [size] | [lh] | [weight] | [color] | — |
|
|
37
|
+
| Body | [family] | [size] | [lh] | [weight] | [color] | — |
|
|
38
|
+
| Caption | [family] | [size] | [lh] | [weight] | [color] | — |
|
|
39
|
+
| Button label | [family] | [size] | [lh] | [weight] | [color] | — |
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Colors
|
|
44
|
+
|
|
45
|
+
- **Background:** [hex] / [oklch]
|
|
46
|
+
- **Text primary:** [hex] / [oklch]
|
|
47
|
+
- **Text secondary:** [hex] / [oklch]
|
|
48
|
+
- **Accent / CTA:** [hex] / [oklch]
|
|
49
|
+
- **Border:** [hex] / [oklch]
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## States
|
|
54
|
+
|
|
55
|
+
### Default
|
|
56
|
+
[Describe normal rendering]
|
|
57
|
+
|
|
58
|
+
### Hover
|
|
59
|
+
- **Trigger:** [what element triggers the state]
|
|
60
|
+
- **Transform:** [e.g. `translateY(-2px)`]
|
|
61
|
+
- **Color change:** [describe]
|
|
62
|
+
- **Transition:** [e.g. `all 0.2s ease`]
|
|
63
|
+
- **Shadow change:** [describe]
|
|
64
|
+
|
|
65
|
+
### Active
|
|
66
|
+
[Describe active/pressed state]
|
|
67
|
+
|
|
68
|
+
### Focus
|
|
69
|
+
- **Focus ring color:** [hex / oklch]
|
|
70
|
+
- **Focus ring offset:** [value]
|
|
71
|
+
- **Focus ring width:** [value]
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Responsive behavior
|
|
76
|
+
|
|
77
|
+
### Desktop (1440px)
|
|
78
|
+
[Describe layout]
|
|
79
|
+
|
|
80
|
+
### Tablet (768px)
|
|
81
|
+
[Describe layout changes from desktop]
|
|
82
|
+
|
|
83
|
+
### Mobile (375px)
|
|
84
|
+
[Describe layout changes from tablet]
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Assets
|
|
89
|
+
|
|
90
|
+
| Asset | Type | Public path | Source URL |
|
|
91
|
+
|---|---|---|---|
|
|
92
|
+
| [image name] | image | `public/images/[filename].[ext]` | [original CDN URL] |
|
|
93
|
+
| [icon name] | SVG | `src/components/icons.tsx` as `[IconName]` | [inline / file] |
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Content
|
|
98
|
+
|
|
99
|
+
[Paste the exact text content from the target site. No placeholder text.]
|
|
100
|
+
|
|
101
|
+
**Heading:**
|
|
102
|
+
[exact heading text]
|
|
103
|
+
|
|
104
|
+
**Body copy:**
|
|
105
|
+
[exact body text]
|
|
106
|
+
|
|
107
|
+
**CTA label:**
|
|
108
|
+
[exact button/link text]
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Accessibility
|
|
113
|
+
|
|
114
|
+
- **ARIA landmark:** `[nav | main | aside | section]`
|
|
115
|
+
- **Heading level:** `[h1 | h2 | h3]`
|
|
116
|
+
- **Image alt text:** [describe required alt text]
|
|
117
|
+
- **Tab order:** [describe keyboard navigation path through this section]
|
|
118
|
+
- **Screen reader notes:** [any special ARIA labels, descriptions]
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Implementation notes
|
|
123
|
+
|
|
124
|
+
[Any tricky implementation details, browser quirks, or decisions made during spec writing]
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Design Token Extraction
|
|
2
|
+
|
|
3
|
+
**Project:** [PROJECT NAME]
|
|
4
|
+
**Target URL:** [https://example.com]
|
|
5
|
+
**Date:** YYYY-MM-DD
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Color palette
|
|
10
|
+
|
|
11
|
+
| Token name | Hex | oklch | Usage |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| `color-primary` | `#000000` | `oklch(0% 0 0)` | [CTAs, headings] |
|
|
14
|
+
| `color-bg` | `#ffffff` | `oklch(100% 0 0)` | [Page background] |
|
|
15
|
+
| `color-text` | `#1a1a1a` | `oklch(12% 0 0)` | [Body text] |
|
|
16
|
+
| `color-text-secondary` | `#666666` | `oklch(45% 0 0)` | [Secondary text] |
|
|
17
|
+
| `color-accent` | `#0070f3` | `oklch(50% 0.2 260)` | [Links, hover states] |
|
|
18
|
+
| `color-border` | `#e5e5e5` | `oklch(91% 0 0)` | [Dividers, borders] |
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Typography
|
|
23
|
+
|
|
24
|
+
| Token name | Font family | Size | Line height | Weight | Usage |
|
|
25
|
+
|---|---|---|---|---|---|
|
|
26
|
+
| `text-h1` | [family] | [size] | [lh] | [weight] | [page heading] |
|
|
27
|
+
| `text-h2` | [family] | [size] | [lh] | [weight] | [section heading] |
|
|
28
|
+
| `text-h3` | [family] | [size] | [lh] | [weight] | [card heading] |
|
|
29
|
+
| `text-body` | [family] | [size] | [lh] | [weight] | [body copy] |
|
|
30
|
+
| `text-caption` | [family] | [size] | [lh] | [weight] | [captions, labels] |
|
|
31
|
+
| `text-button` | [family] | [size] | [lh] | [weight] | [button labels] |
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Spacing scale
|
|
36
|
+
|
|
37
|
+
| Token name | Value | Usage |
|
|
38
|
+
|---|---|---|
|
|
39
|
+
| `spacing-xs` | [value] | [usage] |
|
|
40
|
+
| `spacing-sm` | [value] | [usage] |
|
|
41
|
+
| `spacing-md` | [value] | [usage] |
|
|
42
|
+
| `spacing-lg` | [value] | [usage] |
|
|
43
|
+
| `spacing-xl` | [value] | [usage] |
|
|
44
|
+
| `spacing-2xl` | [value] | [usage] |
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Border radius
|
|
49
|
+
|
|
50
|
+
| Token name | Value | Usage |
|
|
51
|
+
|---|---|---|
|
|
52
|
+
| `radius-sm` | [value] | [buttons, inputs] |
|
|
53
|
+
| `radius-md` | [value] | [cards] |
|
|
54
|
+
| `radius-lg` | [value] | [modals, sections] |
|
|
55
|
+
| `radius-full` | `9999px` | [pills, avatars] |
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Box shadows
|
|
60
|
+
|
|
61
|
+
| Token name | Value | Usage |
|
|
62
|
+
|---|---|---|
|
|
63
|
+
| `shadow-sm` | [value] | [subtle cards] |
|
|
64
|
+
| `shadow-md` | [value] | [elevated cards] |
|
|
65
|
+
| `shadow-lg` | [value] | [modals, dropdowns] |
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Transitions
|
|
70
|
+
|
|
71
|
+
| Token name | Value | Usage |
|
|
72
|
+
|---|---|---|
|
|
73
|
+
| `transition-fast` | [duration easing] | [hover color changes] |
|
|
74
|
+
| `transition-base` | [duration easing] | [transform, opacity] |
|
|
75
|
+
| `transition-slow` | [duration easing] | [page transitions] |
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Tailwind CSS v4 config snippet
|
|
80
|
+
|
|
81
|
+
```css
|
|
82
|
+
@theme {
|
|
83
|
+
--color-primary: oklch(0% 0 0);
|
|
84
|
+
--color-bg: oklch(100% 0 0);
|
|
85
|
+
--color-text: oklch(12% 0 0);
|
|
86
|
+
--color-accent: oklch(50% 0.2 260);
|
|
87
|
+
/* Add all extracted tokens here */
|
|
88
|
+
}
|
|
89
|
+
```
|