@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,135 @@
|
|
|
1
|
+
# Design Token System
|
|
2
|
+
|
|
3
|
+
**Kit:** `growthub-ai-website-cloner-v1`
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
The clone's design system uses Tailwind CSS v4 with oklch color tokens. All design values extracted from the target site are expressed as CSS custom properties in the `@theme` block of `globals.css`.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Token extraction methodology
|
|
14
|
+
|
|
15
|
+
The operator uses `getComputedStyle()` in the browser DevTools console to extract exact computed values from the live target site.
|
|
16
|
+
|
|
17
|
+
### Color extraction
|
|
18
|
+
|
|
19
|
+
```js
|
|
20
|
+
// Run in browser DevTools console on the target site
|
|
21
|
+
// Extract all unique colors in use
|
|
22
|
+
[...document.querySelectorAll('*')].flatMap(el => {
|
|
23
|
+
const s = getComputedStyle(el);
|
|
24
|
+
return [s.color, s.backgroundColor, s.borderColor, s.outlineColor]
|
|
25
|
+
.filter(c => c && c !== 'rgba(0, 0, 0, 0)' && c !== 'transparent');
|
|
26
|
+
}).filter((v, i, a) => a.indexOf(v) === i).sort();
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Typography extraction
|
|
30
|
+
|
|
31
|
+
```js
|
|
32
|
+
// Extract all typography combinations
|
|
33
|
+
[...document.querySelectorAll('*')].map(el => {
|
|
34
|
+
const s = getComputedStyle(el);
|
|
35
|
+
return `${s.fontFamily} | ${s.fontSize} | ${s.fontWeight} | ${s.lineHeight}`;
|
|
36
|
+
}).filter((v, i, a) => a.indexOf(v) === i).sort();
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Spacing extraction
|
|
40
|
+
|
|
41
|
+
```js
|
|
42
|
+
// Extract spacing values from a specific element
|
|
43
|
+
const el = document.querySelector('.hero-section');
|
|
44
|
+
const s = getComputedStyle(el);
|
|
45
|
+
console.log({
|
|
46
|
+
padding: s.padding,
|
|
47
|
+
margin: s.margin,
|
|
48
|
+
gap: s.gap,
|
|
49
|
+
columnGap: s.columnGap,
|
|
50
|
+
rowGap: s.rowGap,
|
|
51
|
+
});
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Converting to oklch
|
|
57
|
+
|
|
58
|
+
Tailwind CSS v4 uses oklch as the primary color format. Convert extracted hex/rgb values:
|
|
59
|
+
|
|
60
|
+
```js
|
|
61
|
+
// Paste into browser console to convert RGB to oklch approximation
|
|
62
|
+
// (or use https://oklch.com/ for manual conversion)
|
|
63
|
+
function rgbToOklch(r, g, b) {
|
|
64
|
+
// Simplified — use the oklch.com tool for production values
|
|
65
|
+
const L = (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255;
|
|
66
|
+
return `oklch(${(L * 100).toFixed(0)}% 0 0)`;
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Use [oklch.com](https://oklch.com/) for precise conversion during token extraction.
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Tailwind CSS v4 `@theme` configuration
|
|
75
|
+
|
|
76
|
+
All extracted tokens go into `src/app/globals.css`:
|
|
77
|
+
|
|
78
|
+
```css
|
|
79
|
+
@import "tailwindcss";
|
|
80
|
+
|
|
81
|
+
@theme {
|
|
82
|
+
/* Colors */
|
|
83
|
+
--color-primary: oklch(12% 0 0);
|
|
84
|
+
--color-bg: oklch(100% 0 0);
|
|
85
|
+
--color-text: oklch(15% 0 0);
|
|
86
|
+
--color-text-secondary: oklch(45% 0 0);
|
|
87
|
+
--color-accent: oklch(50% 0.2 260);
|
|
88
|
+
--color-border: oklch(91% 0 0);
|
|
89
|
+
|
|
90
|
+
/* Typography */
|
|
91
|
+
--font-sans: "Inter", system-ui, sans-serif;
|
|
92
|
+
--font-heading: "Geist", "Inter", system-ui, sans-serif;
|
|
93
|
+
|
|
94
|
+
/* Spacing scale */
|
|
95
|
+
--spacing-xs: 0.25rem;
|
|
96
|
+
--spacing-sm: 0.5rem;
|
|
97
|
+
--spacing-md: 1rem;
|
|
98
|
+
--spacing-lg: 1.5rem;
|
|
99
|
+
--spacing-xl: 2rem;
|
|
100
|
+
--spacing-2xl: 3rem;
|
|
101
|
+
|
|
102
|
+
/* Border radius */
|
|
103
|
+
--radius-sm: 0.25rem;
|
|
104
|
+
--radius-md: 0.5rem;
|
|
105
|
+
--radius-lg: 0.75rem;
|
|
106
|
+
--radius-xl: 1rem;
|
|
107
|
+
|
|
108
|
+
/* Shadows */
|
|
109
|
+
--shadow-sm: 0 1px 2px oklch(0% 0 0 / 0.05);
|
|
110
|
+
--shadow-md: 0 4px 6px oklch(0% 0 0 / 0.1);
|
|
111
|
+
--shadow-lg: 0 10px 15px oklch(0% 0 0 / 0.1);
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## How builders use tokens
|
|
118
|
+
|
|
119
|
+
Builders use Tailwind utility classes that reference the tokens:
|
|
120
|
+
|
|
121
|
+
```tsx
|
|
122
|
+
// Using color tokens
|
|
123
|
+
<div className="bg-[var(--color-bg)] text-[var(--color-text)]">
|
|
124
|
+
|
|
125
|
+
// Using spacing tokens
|
|
126
|
+
<section className="px-[var(--spacing-xl)] py-[var(--spacing-2xl)]">
|
|
127
|
+
|
|
128
|
+
// Using radius tokens
|
|
129
|
+
<button className="rounded-[var(--radius-md)]">
|
|
130
|
+
|
|
131
|
+
// Using shadow tokens
|
|
132
|
+
<div className="shadow-[var(--shadow-md)]">
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
All token references are from the extraction sheet. No builder should invent new token names.
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# Multi-Phase Pipeline Architecture
|
|
2
|
+
|
|
3
|
+
**Kit:** `growthub-ai-website-cloner-v1`
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
The clone pipeline runs in strict phase order. No phase may be skipped. Each phase produces artifacts consumed by the next.
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
Phase 0: Environment gate
|
|
13
|
+
↓
|
|
14
|
+
Phase 1: Load methodology + project context
|
|
15
|
+
↓
|
|
16
|
+
Phase 2: Load runtime docs
|
|
17
|
+
↓
|
|
18
|
+
Phase 3: Reconnaissance (screenshots, tokens, assets, interactions)
|
|
19
|
+
↓
|
|
20
|
+
Phase 4: 3-question gate (objective, exclusions, deployment target)
|
|
21
|
+
↓
|
|
22
|
+
Phase 5: Component spec writing (one spec per section)
|
|
23
|
+
↓
|
|
24
|
+
Phase 6: Builder dispatch (parallel worktrees)
|
|
25
|
+
↓
|
|
26
|
+
Phase 7: Assembly + Visual QA
|
|
27
|
+
↓
|
|
28
|
+
Phase 8: Platform handoff
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Phase 0 — Environment gate
|
|
34
|
+
|
|
35
|
+
**Gate criteria:**
|
|
36
|
+
1. Fork exists at `~/ai-website-cloner-template` (or `AI_CLONER_FORK_PATH`)
|
|
37
|
+
2. Node.js 24+ available
|
|
38
|
+
3. Fork `node_modules/` installed
|
|
39
|
+
4. AI agent active
|
|
40
|
+
|
|
41
|
+
**If any check fails:** stop, report the specific issue, do not proceed.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Phase 3 — Reconnaissance (most critical phase)
|
|
46
|
+
|
|
47
|
+
Reconnaissance is the most time-sensitive phase. It must be thorough because all subsequent work depends on it.
|
|
48
|
+
|
|
49
|
+
### Screenshot protocol
|
|
50
|
+
The agent opens Chrome (or a Playwright browser) and captures:
|
|
51
|
+
- Desktop screenshots at every viewport height of content (scroll the page)
|
|
52
|
+
- Tablet and mobile screenshots at the same scroll depths
|
|
53
|
+
- Hover state screenshots for all interactive elements
|
|
54
|
+
|
|
55
|
+
### Token extraction
|
|
56
|
+
The agent runs `getComputedStyle()` extraction calls in the browser console. The exact calls are defined in `skills.md`. Tokens are extracted for:
|
|
57
|
+
- All colors in use (background, text, borders, accents)
|
|
58
|
+
- All typography combinations (family, size, weight, line-height)
|
|
59
|
+
- All spacing values (margin, padding)
|
|
60
|
+
- All border-radius, box-shadow, and transition values
|
|
61
|
+
|
|
62
|
+
### Asset download
|
|
63
|
+
All external assets are downloaded to `public/` immediately during reconnaissance — before spec writing. This prevents broken image references during building.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Phase 5 — Component spec writing
|
|
68
|
+
|
|
69
|
+
Each spec is a complete, standalone brief for one builder. It must include:
|
|
70
|
+
- Exact computed CSS values (not estimates)
|
|
71
|
+
- Multi-state content for all interactive states
|
|
72
|
+
- Responsive behavior at all three breakpoints
|
|
73
|
+
- Exact asset paths in `public/`
|
|
74
|
+
- Exact content (no placeholders)
|
|
75
|
+
|
|
76
|
+
The spec is the builder's only source of truth. It must be self-contained.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Phase 6 — Parallel builder dispatch
|
|
81
|
+
|
|
82
|
+
The orchestrator creates a `git worktree` for each builder:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# Orchestrator creates worktrees
|
|
86
|
+
git worktree add ../build-navigation build/navigation
|
|
87
|
+
git worktree add ../build-hero-section build/hero-section
|
|
88
|
+
# ... one per section
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Each builder is dispatched as a subagent with:
|
|
92
|
+
1. Their section spec (inline)
|
|
93
|
+
2. The design token extraction sheet
|
|
94
|
+
3. The asset manifest
|
|
95
|
+
4. Clear output constraints (only write to `src/components/<section-slug>/`)
|
|
96
|
+
|
|
97
|
+
Builders run in parallel — the orchestrator does not wait for one before starting the next.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Phase 7 — Assembly and visual QA
|
|
102
|
+
|
|
103
|
+
**Assembly:**
|
|
104
|
+
1. All builder branches are merged into `main` (or the integration branch)
|
|
105
|
+
2. The orchestrator writes `src/app/page.tsx` to import and wire all components
|
|
106
|
+
3. `npm run build` is run to confirm no errors
|
|
107
|
+
4. `npm run lint` and `npm run typecheck` must pass
|
|
108
|
+
|
|
109
|
+
**Visual QA:**
|
|
110
|
+
1. `npm run dev` is started
|
|
111
|
+
2. The agent opens the clone in the browser
|
|
112
|
+
3. Side-by-side comparison with original screenshots
|
|
113
|
+
4. Each section is checked at all three breakpoints
|
|
114
|
+
5. All hover/focus/active states are exercised interactively
|
|
115
|
+
6. Findings are documented in `visual-qa-checklist.md`
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Phase 8 — Platform handoff
|
|
120
|
+
|
|
121
|
+
The platform handoff document (`platform-handoff.md`) is the final deliverable. It includes:
|
|
122
|
+
- What was built (summary)
|
|
123
|
+
- How to run locally
|
|
124
|
+
- How to build for production
|
|
125
|
+
- Deployment instructions for the target platform
|
|
126
|
+
- All known deviations from the original
|
|
127
|
+
- Next customization steps
|
|
128
|
+
|
|
129
|
+
The brand kit is updated with a deliverable line.
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Parallel Builder Dispatch
|
|
2
|
+
|
|
3
|
+
**Kit:** `growthub-ai-website-cloner-v1`
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Why parallel builders
|
|
8
|
+
|
|
9
|
+
A modern website has 5–20 distinct sections. Cloning them sequentially would be slow and would block each builder on the previous one. The parallel worktree system lets all builders work simultaneously, each in an isolated branch.
|
|
10
|
+
|
|
11
|
+
The orchestrator (the Growthub operator running as the main agent) dispatches all builders at once, waits for them to complete, then assembles the results.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Worktree isolation
|
|
16
|
+
|
|
17
|
+
Each builder gets a dedicated `git worktree` — a separate working directory linked to the same repository but on a different branch:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# Create worktrees (orchestrator does this before dispatch)
|
|
21
|
+
git worktree add ../build-navigation build/navigation
|
|
22
|
+
git worktree add ../build-hero-section build/hero-section
|
|
23
|
+
git worktree add ../build-features build/features
|
|
24
|
+
git worktree add ../build-footer build/footer
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Each builder's working directory is independent. They cannot conflict with each other during development.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Builder constraints
|
|
32
|
+
|
|
33
|
+
Builders must follow these rules without exception:
|
|
34
|
+
|
|
35
|
+
| Rule | Detail |
|
|
36
|
+
|---|---|
|
|
37
|
+
| Write only to `src/components/<section-slug>/` | No writes to shared files |
|
|
38
|
+
| No writes to `src/app/` | The orchestrator owns the page |
|
|
39
|
+
| No writes to `src/lib/` | Shared utilities stay unchanged |
|
|
40
|
+
| No writes to `globals.css` | Tokens are in the design token file |
|
|
41
|
+
| No writes to `src/types/` | Types are defined by the orchestrator |
|
|
42
|
+
| No writes to `layout.tsx` | The root layout is owned by the orchestrator |
|
|
43
|
+
| One component file per section | `src/components/<section-slug>/<ComponentName>.tsx` |
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Builder input package
|
|
48
|
+
|
|
49
|
+
Each builder receives exactly:
|
|
50
|
+
|
|
51
|
+
1. **Section spec** — the complete component spec from `specs/<section-slug>.md`
|
|
52
|
+
2. **Design token sheet** — `templates/design-token-extraction.md` (full token set)
|
|
53
|
+
3. **Asset manifest** — `templates/asset-manifest.md` (all `public/` asset paths)
|
|
54
|
+
4. **Naming instructions** — component name, output path, export format
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Builder output format
|
|
59
|
+
|
|
60
|
+
Each builder produces a TypeScript React component:
|
|
61
|
+
|
|
62
|
+
```tsx
|
|
63
|
+
// src/components/hero-section/HeroSection.tsx
|
|
64
|
+
import Image from "next/image";
|
|
65
|
+
|
|
66
|
+
export function HeroSection() {
|
|
67
|
+
return (
|
|
68
|
+
<section className="...">
|
|
69
|
+
{/* exact content from spec */}
|
|
70
|
+
</section>
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Requirements:
|
|
76
|
+
- Named export (not default export)
|
|
77
|
+
- TypeScript strict — no `any`
|
|
78
|
+
- Tailwind CSS utility classes (no inline styles)
|
|
79
|
+
- Uses `cn()` from `src/lib/utils.ts` for conditional classes
|
|
80
|
+
- Asset paths from `public/` using Next.js `<Image>` or `<video>` tags
|
|
81
|
+
- Uses design tokens from the Tailwind config (via CSS variables)
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Assembly
|
|
86
|
+
|
|
87
|
+
After all builders complete, the orchestrator:
|
|
88
|
+
|
|
89
|
+
1. Merges all `build/*` branches into `main`
|
|
90
|
+
2. Resolves any conflicts (should be minimal since builders touch different files)
|
|
91
|
+
3. Writes `src/app/page.tsx` importing all components in order
|
|
92
|
+
4. Updates `src/app/layout.tsx` with correct metadata
|
|
93
|
+
5. Updates `globals.css` with the full design token set from the extraction sheet
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Conflict resolution
|
|
98
|
+
|
|
99
|
+
The most common merge conflicts:
|
|
100
|
+
- `package.json` — if two builders added the same dependency. Orchestrator de-dupes.
|
|
101
|
+
- `src/components/icons.tsx` — if two builders added SVG icons. Orchestrator merges all icons.
|
|
102
|
+
|
|
103
|
+
These are resolved by the orchestrator with full context about what all builders were doing.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Clone Brief — Sample
|
|
2
|
+
|
|
3
|
+
**Project:** Acme Corp Homepage Clone
|
|
4
|
+
**Client:** Acme Corp
|
|
5
|
+
**Target URL(s):** `https://acme.example.com`
|
|
6
|
+
**Date:** 2026-04-15
|
|
7
|
+
**Operator:** `ai-website-cloner-operator`
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Objective
|
|
12
|
+
|
|
13
|
+
Pixel-perfect clone of the Acme Corp homepage into a modern Next.js 16 codebase. The client needs the source code for a planned migration from their legacy Webflow site to a self-hosted Next.js deployment.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Scope
|
|
18
|
+
|
|
19
|
+
### Pages to clone
|
|
20
|
+
- [x] `https://acme.example.com` — Homepage
|
|
21
|
+
|
|
22
|
+
### Sections to include
|
|
23
|
+
- [x] Navigation / Header (sticky, with dropdown menus)
|
|
24
|
+
- [x] Hero — full-viewport with background video
|
|
25
|
+
- [x] Features grid — 3-column, 6 feature cards
|
|
26
|
+
- [x] Social proof — testimonials carousel
|
|
27
|
+
- [x] CTA banner — centered, high-contrast
|
|
28
|
+
- [x] FAQ accordion
|
|
29
|
+
- [x] Footer — 4-column with newsletter signup
|
|
30
|
+
|
|
31
|
+
### Sections to exclude
|
|
32
|
+
- [x] Login flow — auth-gated, excluded by client request
|
|
33
|
+
- [x] Blog listing — dynamic content, excluded from v1 scope
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Constraints
|
|
38
|
+
|
|
39
|
+
- **Deployment target:** Vercel
|
|
40
|
+
- **Custom domain:** `acme.com` (configured post-handoff)
|
|
41
|
+
- **Proprietary fonts:** "Acme Sans" — not publicly available; replaced with Inter (documented deviation)
|
|
42
|
+
- **Auth-gated content:** Login flow excluded from scope
|
|
43
|
+
- **Terms of Service notes:** Confirmed with client — they own this site and have rights to reproduce it
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Deliverables
|
|
48
|
+
|
|
49
|
+
- [x] Cloned Next.js codebase in `~/ai-website-cloner-template`
|
|
50
|
+
- [x] Reconnaissance report
|
|
51
|
+
- [x] Design token extraction sheet (24 colors, 8 typography combinations)
|
|
52
|
+
- [x] 7 component specs
|
|
53
|
+
- [x] Visual QA checklist — PASS with 1 noted deviation (font)
|
|
54
|
+
- [x] Platform handoff document
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# HeroSection — Component Spec (Sample)
|
|
2
|
+
|
|
3
|
+
**Project:** Acme Corp Homepage Clone
|
|
4
|
+
**Section slug:** `hero-section`
|
|
5
|
+
**Output component:** `src/components/hero-section/HeroSection.tsx`
|
|
6
|
+
**Date:** 2026-04-15
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Purpose
|
|
11
|
+
|
|
12
|
+
Full-viewport hero section with a looping background video, centered headline, subheadline, and two CTA buttons. First visible content above the fold on desktop and mobile.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Layout
|
|
17
|
+
|
|
18
|
+
- **Container max-width:** 1280px
|
|
19
|
+
- **Container padding (desktop):** 0 80px
|
|
20
|
+
- **Container padding (mobile):** 0 24px
|
|
21
|
+
- **Display:** flex, column, center-aligned
|
|
22
|
+
- **Section min-height:** 100vh
|
|
23
|
+
- **Background:** `#0a0a0a` / `oklch(7% 0 0)` with video overlay
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Typography
|
|
28
|
+
|
|
29
|
+
| Element | Font family | Size | Line height | Weight | Color | Notes |
|
|
30
|
+
|---|---|---|---|---|---|---|
|
|
31
|
+
| Headline | Inter | 72px | 1.1 | 700 | `#ffffff` | Desktop only |
|
|
32
|
+
| Headline | Inter | 40px | 1.15 | 700 | `#ffffff` | Mobile |
|
|
33
|
+
| Subheadline | Inter | 20px | 1.5 | 400 | `rgba(255,255,255,0.7)` | Desktop |
|
|
34
|
+
| Subheadline | Inter | 16px | 1.5 | 400 | `rgba(255,255,255,0.7)` | Mobile |
|
|
35
|
+
| CTA primary | Inter | 16px | 1 | 600 | `#0a0a0a` | — |
|
|
36
|
+
| CTA secondary | Inter | 16px | 1 | 600 | `#ffffff` | — |
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Colors
|
|
41
|
+
|
|
42
|
+
- **Background:** `#0a0a0a` / `oklch(7% 0 0)` (with bg video)
|
|
43
|
+
- **Text primary:** `#ffffff` / `oklch(100% 0 0)`
|
|
44
|
+
- **Text secondary:** `rgba(255,255,255,0.7)` / `oklch(100% 0 0 / 0.7)`
|
|
45
|
+
- **CTA primary bg:** `#ffffff` / `oklch(100% 0 0)`
|
|
46
|
+
- **CTA secondary border:** `rgba(255,255,255,0.3)` / `oklch(100% 0 0 / 0.3)`
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## States
|
|
51
|
+
|
|
52
|
+
### Default
|
|
53
|
+
Headline + subheadline centered. Two CTAs side by side. Background video loops silently at `opacity: 0.4`.
|
|
54
|
+
|
|
55
|
+
### Hover — CTA primary
|
|
56
|
+
- Transform: none
|
|
57
|
+
- Background: `oklch(91% 0 0)` (slight dim)
|
|
58
|
+
- Transition: `background 0.2s ease`
|
|
59
|
+
|
|
60
|
+
### Hover — CTA secondary
|
|
61
|
+
- Border-color: `oklch(100% 0 0 / 0.6)`
|
|
62
|
+
- Background: `oklch(100% 0 0 / 0.08)`
|
|
63
|
+
- Transition: `all 0.2s ease`
|
|
64
|
+
|
|
65
|
+
### Focus (both CTAs)
|
|
66
|
+
- Focus ring color: `#3b82f6` / `oklch(59% 0.2 260)`
|
|
67
|
+
- Focus ring offset: 3px
|
|
68
|
+
- Focus ring width: 2px
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Responsive behavior
|
|
73
|
+
|
|
74
|
+
### Desktop (1440px)
|
|
75
|
+
72px headline, two CTAs side by side, background video full-coverage
|
|
76
|
+
|
|
77
|
+
### Tablet (768px)
|
|
78
|
+
56px headline, CTAs stack vertically, video still full-coverage
|
|
79
|
+
|
|
80
|
+
### Mobile (375px)
|
|
81
|
+
40px headline, 16px subheadline, CTAs full-width and stacked
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Assets
|
|
86
|
+
|
|
87
|
+
| File | Public path | Source URL |
|
|
88
|
+
|---|---|---|
|
|
89
|
+
| hero-bg.mp4 | `public/videos/hero-bg.mp4` | `https://cdn.acme.example.com/hero-bg.mp4` |
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Content
|
|
94
|
+
|
|
95
|
+
**Headline:**
|
|
96
|
+
The Future of Work Starts Here
|
|
97
|
+
|
|
98
|
+
**Subheadline:**
|
|
99
|
+
Automate your growth with AI. Launch faster, scale smarter, and let your team focus on what matters.
|
|
100
|
+
|
|
101
|
+
**CTA primary:**
|
|
102
|
+
Start for free
|
|
103
|
+
|
|
104
|
+
**CTA secondary:**
|
|
105
|
+
Watch demo
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Accessibility
|
|
110
|
+
|
|
111
|
+
- **ARIA landmark:** `<section aria-label="Hero">`
|
|
112
|
+
- **Heading level:** `<h1>`
|
|
113
|
+
- **Video:** `<video autoPlay muted loop playsInline aria-hidden="true">` (decorative)
|
|
114
|
+
- **Tab order:** CTA primary → CTA secondary
|
|
115
|
+
- **Reduced motion:** video paused if `prefers-reduced-motion: reduce`
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Implementation notes
|
|
120
|
+
|
|
121
|
+
The background video must use `object-fit: cover` and position `absolute` behind the content. The content must be `relative` with `z-index: 1`.
|
|
122
|
+
|
|
123
|
+
Tailwind v4 class for the video overlay: use `bg-black/60` over the video to ensure text contrast.
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Platform Handoff — Sample
|
|
2
|
+
|
|
3
|
+
**Project:** Acme Corp Homepage Clone
|
|
4
|
+
**Client:** Acme Corp
|
|
5
|
+
**Date:** 2026-04-15
|
|
6
|
+
**Clone source:** `https://acme.example.com`
|
|
7
|
+
**Codebase location:** `~/ai-website-cloner-template`
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## What was built
|
|
12
|
+
|
|
13
|
+
A pixel-perfect clone of the Acme Corp homepage, rebuilt in Next.js 16 + shadcn/ui + Tailwind CSS v4. The clone includes all 7 sections of the original page (navigation, hero, features, testimonials, CTA banner, FAQ, footer) with all assets downloaded and all interactive states matched. The only deviation is the proprietary "Acme Sans" font, replaced with Inter (documented below).
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Running the clone locally
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
cd ~/ai-website-cloner-template
|
|
21
|
+
npm run dev
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Open [http://localhost:3000](http://localhost:3000).
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Building for production
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
cd ~/ai-website-cloner-template
|
|
32
|
+
npm run build
|
|
33
|
+
npm run start
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Expected build output: ~45 static pages + 1 dynamic route.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Deploying to Vercel
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
npm install -g vercel
|
|
44
|
+
cd ~/ai-website-cloner-template
|
|
45
|
+
vercel --prod
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
The app will be live at `https://ai-website-cloner-template.vercel.app` until you configure a custom domain.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Project structure
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
src/
|
|
56
|
+
app/
|
|
57
|
+
page.tsx # Main homepage
|
|
58
|
+
layout.tsx # Root layout with Inter font
|
|
59
|
+
globals.css # Full design token set (24 colors)
|
|
60
|
+
components/
|
|
61
|
+
navigation/Navigation.tsx
|
|
62
|
+
hero-section/HeroSection.tsx
|
|
63
|
+
features-grid/FeaturesGrid.tsx
|
|
64
|
+
testimonials/Testimonials.tsx
|
|
65
|
+
cta-banner/CtaBanner.tsx
|
|
66
|
+
faq/Faq.tsx
|
|
67
|
+
footer/Footer.tsx
|
|
68
|
+
icons.tsx # 18 extracted SVG icons
|
|
69
|
+
public/
|
|
70
|
+
images/ # 11 downloaded images
|
|
71
|
+
videos/
|
|
72
|
+
hero-bg.mp4 # Hero background video
|
|
73
|
+
seo/
|
|
74
|
+
favicon.ico
|
|
75
|
+
og-image.png
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Known deviations from original
|
|
81
|
+
|
|
82
|
+
| Section | Type | Notes |
|
|
83
|
+
|---|---|---|
|
|
84
|
+
| All headings | Font | "Acme Sans" is a proprietary font not available via CDN. Replaced with Inter (weight 700). Visual difference is subtle — baseline spacing may differ by ~2px on some headings. |
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Customization next steps
|
|
89
|
+
|
|
90
|
+
1. [ ] Replace `public/seo/og-image.png` with the client's actual OG image
|
|
91
|
+
2. [ ] Update `src/app/layout.tsx` metadata: title, description, canonical URL
|
|
92
|
+
3. [ ] Configure Vercel environment variables for any future dynamic features
|
|
93
|
+
4. [ ] If "Acme Sans" is obtained via license, add it to `src/app/layout.tsx` and update `globals.css`
|
|
94
|
+
5. [ ] Remove `public/videos/hero-bg.mp4` and replace with a client-owned video file before redistribution
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## QA result
|
|
99
|
+
|
|
100
|
+
See `qa/visual-qa-checklist.md` for the full QA report.
|
|
101
|
+
|
|
102
|
+
**Overall result:** PASS WITH NOTED DEVIATIONS (font only)
|