@growthub/cli 0.8.0 → 0.8.2

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.
Files changed (132) hide show
  1. package/assets/worker-kits/growthub-agency-portal-starter-v1/.env.example +53 -0
  2. package/assets/worker-kits/growthub-agency-portal-starter-v1/QUICKSTART.md +98 -0
  3. package/assets/worker-kits/growthub-agency-portal-starter-v1/SKILL.md +89 -0
  4. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/.env.example +25 -0
  5. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/README.md +36 -0
  6. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/app/api/settings/integrations/route.js +13 -0
  7. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/app/api/workspace/route.js +27 -0
  8. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/app/globals.css +237 -0
  9. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/app/layout.jsx +14 -0
  10. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/app/page.jsx +165 -0
  11. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/app/settings/integrations/page.jsx +134 -0
  12. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/auth/index.js +21 -0
  13. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/env.js +28 -0
  14. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/integrations/growthub-connection-normalizer.js +95 -0
  15. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/integrations/index.js +178 -0
  16. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/payments/index.js +13 -0
  17. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/persistence/index.js +13 -0
  18. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/persistence/postgres.js +16 -0
  19. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/persistence/provider-managed.js +16 -0
  20. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/persistence/qstash-kv.js +16 -0
  21. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/domain/integrations.js +185 -0
  22. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/domain/portal.js +16 -0
  23. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/next.config.js +10 -0
  24. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/package-lock.json +976 -0
  25. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/package.json +17 -0
  26. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/postcss.config.mjs +3 -0
  27. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/vercel.json +5 -0
  28. package/assets/worker-kits/growthub-agency-portal-starter-v1/brands/NEW-CLIENT.md +10 -0
  29. package/assets/worker-kits/growthub-agency-portal-starter-v1/brands/_template/brand-kit.md +27 -0
  30. package/assets/worker-kits/growthub-agency-portal-starter-v1/brands/growthub/brand-kit.md +25 -0
  31. package/assets/worker-kits/growthub-agency-portal-starter-v1/bundles/growthub-agency-portal-starter-v1.json +65 -0
  32. package/assets/worker-kits/growthub-agency-portal-starter-v1/docs/adapter-contracts.md +79 -0
  33. package/assets/worker-kits/growthub-agency-portal-starter-v1/docs/fork-sync-integration.md +32 -0
  34. package/assets/worker-kits/growthub-agency-portal-starter-v1/docs/governed-workspace-primitives.md +182 -0
  35. package/assets/worker-kits/growthub-agency-portal-starter-v1/docs/starter-kit-overview.md +30 -0
  36. package/assets/worker-kits/growthub-agency-portal-starter-v1/docs/vercel-serverless-deployment.md +46 -0
  37. package/assets/worker-kits/growthub-agency-portal-starter-v1/docs/vite-ui-shell-guide.md +24 -0
  38. package/assets/worker-kits/growthub-agency-portal-starter-v1/examples/portal-brief-sample.md +44 -0
  39. package/assets/worker-kits/growthub-agency-portal-starter-v1/examples/workspace-sample.md +10 -0
  40. package/assets/worker-kits/growthub-agency-portal-starter-v1/growthub-meta/README.md +11 -0
  41. package/assets/worker-kits/growthub-agency-portal-starter-v1/growthub-meta/kit-standard.md +16 -0
  42. package/assets/worker-kits/growthub-agency-portal-starter-v1/helpers/README.md +49 -0
  43. package/assets/worker-kits/growthub-agency-portal-starter-v1/kit.json +156 -0
  44. package/assets/worker-kits/growthub-agency-portal-starter-v1/output/README.md +13 -0
  45. package/assets/worker-kits/growthub-agency-portal-starter-v1/output-standards.md +25 -0
  46. package/assets/worker-kits/growthub-agency-portal-starter-v1/runtime-assumptions.md +15 -0
  47. package/assets/worker-kits/growthub-agency-portal-starter-v1/setup/check-deps.sh +20 -0
  48. package/assets/worker-kits/growthub-agency-portal-starter-v1/setup/verify-env.mjs +92 -0
  49. package/assets/worker-kits/growthub-agency-portal-starter-v1/skills/README.md +55 -0
  50. package/assets/worker-kits/growthub-agency-portal-starter-v1/skills.md +133 -0
  51. package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/index.html +12 -0
  52. package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/package-lock.json +1677 -0
  53. package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/package.json +20 -0
  54. package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/serve.mjs +42 -0
  55. package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/src/App.jsx +162 -0
  56. package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/src/app.css +138 -0
  57. package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/src/main.jsx +10 -0
  58. package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/vite.config.js +8 -0
  59. package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/agent-contract.md +9 -0
  60. package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/client-onboarding-plan.md +56 -0
  61. package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/deployment-handoff.md +61 -0
  62. package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/deployment-plan.md +22 -0
  63. package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/portal-brief.md +65 -0
  64. package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/project.md +55 -0
  65. package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/self-eval.md +67 -0
  66. package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/supabase-setup-plan.md +26 -0
  67. package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/workspace-brief.md +11 -0
  68. package/assets/worker-kits/growthub-agency-portal-starter-v1/validation-checklist.md +32 -0
  69. package/assets/worker-kits/growthub-agency-portal-starter-v1/workers/agency-portal-operator/CLAUDE.md +75 -0
  70. package/assets/worker-kits/growthub-creative-video-pipeline-v1/.env.example +28 -0
  71. package/assets/worker-kits/growthub-creative-video-pipeline-v1/QUICKSTART.md +118 -0
  72. package/assets/worker-kits/growthub-creative-video-pipeline-v1/SKILL.md +103 -0
  73. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/.env.example +20 -0
  74. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/README.md +33 -0
  75. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/app/api/pipeline/route.js +27 -0
  76. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/app/globals.css +203 -0
  77. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/app/layout.jsx +14 -0
  78. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/app/page.jsx +131 -0
  79. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/app/settings/keys/page.jsx +154 -0
  80. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/lib/adapters/env.js +14 -0
  81. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/lib/adapters/generative/index.js +31 -0
  82. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/lib/domain/pipeline.js +30 -0
  83. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/next.config.js +10 -0
  84. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/package-lock.json +17 -0
  85. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/package.json +17 -0
  86. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/postcss.config.mjs +3 -0
  87. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/vercel.json +5 -0
  88. package/assets/worker-kits/growthub-creative-video-pipeline-v1/brands/NEW-CLIENT.md +21 -0
  89. package/assets/worker-kits/growthub-creative-video-pipeline-v1/brands/_template/brand-kit.md +123 -0
  90. package/assets/worker-kits/growthub-creative-video-pipeline-v1/brands/growthub/brand-kit.md +123 -0
  91. package/assets/worker-kits/growthub-creative-video-pipeline-v1/bundles/growthub-creative-video-pipeline-v1.json +83 -0
  92. package/assets/worker-kits/growthub-creative-video-pipeline-v1/docs/adapter-contracts.md +73 -0
  93. package/assets/worker-kits/growthub-creative-video-pipeline-v1/docs/governed-workspace-primitives.md +50 -0
  94. package/assets/worker-kits/growthub-creative-video-pipeline-v1/docs/pipeline-architecture.md +61 -0
  95. package/assets/worker-kits/growthub-creative-video-pipeline-v1/docs/starter-kit-overview.md +33 -0
  96. package/assets/worker-kits/growthub-creative-video-pipeline-v1/docs/vercel-deployment.md +42 -0
  97. package/assets/worker-kits/growthub-creative-video-pipeline-v1/examples/pipeline-brief-sample.md +56 -0
  98. package/assets/worker-kits/growthub-creative-video-pipeline-v1/growthub-meta/README.md +9 -0
  99. package/assets/worker-kits/growthub-creative-video-pipeline-v1/growthub-meta/kit-standard.md +24 -0
  100. package/assets/worker-kits/growthub-creative-video-pipeline-v1/helpers/README.md +8 -0
  101. package/assets/worker-kits/growthub-creative-video-pipeline-v1/helpers/check-generative-adapter.sh +41 -0
  102. package/assets/worker-kits/growthub-creative-video-pipeline-v1/helpers/run-pipeline.sh +30 -0
  103. package/assets/worker-kits/growthub-creative-video-pipeline-v1/kit.json +148 -0
  104. package/assets/worker-kits/growthub-creative-video-pipeline-v1/output/README.md +23 -0
  105. package/assets/worker-kits/growthub-creative-video-pipeline-v1/output-standards.md +63 -0
  106. package/assets/worker-kits/growthub-creative-video-pipeline-v1/runtime-assumptions.md +61 -0
  107. package/assets/worker-kits/growthub-creative-video-pipeline-v1/setup/check-deps.sh +63 -0
  108. package/assets/worker-kits/growthub-creative-video-pipeline-v1/setup/clone-fork.sh +18 -0
  109. package/assets/worker-kits/growthub-creative-video-pipeline-v1/setup/install-skill.sh +10 -0
  110. package/assets/worker-kits/growthub-creative-video-pipeline-v1/setup/verify-env.mjs +50 -0
  111. package/assets/worker-kits/growthub-creative-video-pipeline-v1/skills/README.md +11 -0
  112. package/assets/worker-kits/growthub-creative-video-pipeline-v1/skills/brief-generation/SKILL.md +42 -0
  113. package/assets/worker-kits/growthub-creative-video-pipeline-v1/skills/generative-execution/SKILL.md +86 -0
  114. package/assets/worker-kits/growthub-creative-video-pipeline-v1/skills/video-edit/SKILL.md +41 -0
  115. package/assets/worker-kits/growthub-creative-video-pipeline-v1/skills.md +302 -0
  116. package/assets/worker-kits/growthub-creative-video-pipeline-v1/studio/index.html +12 -0
  117. package/assets/worker-kits/growthub-creative-video-pipeline-v1/studio/package-lock.json +20 -0
  118. package/assets/worker-kits/growthub-creative-video-pipeline-v1/studio/package.json +20 -0
  119. package/assets/worker-kits/growthub-creative-video-pipeline-v1/studio/serve.mjs +41 -0
  120. package/assets/worker-kits/growthub-creative-video-pipeline-v1/studio/src/App.jsx +210 -0
  121. package/assets/worker-kits/growthub-creative-video-pipeline-v1/studio/src/app.css +194 -0
  122. package/assets/worker-kits/growthub-creative-video-pipeline-v1/studio/src/main.jsx +10 -0
  123. package/assets/worker-kits/growthub-creative-video-pipeline-v1/studio/vite.config.js +8 -0
  124. package/assets/worker-kits/growthub-creative-video-pipeline-v1/templates/edit-plan.md +66 -0
  125. package/assets/worker-kits/growthub-creative-video-pipeline-v1/templates/generative-plan.md +83 -0
  126. package/assets/worker-kits/growthub-creative-video-pipeline-v1/templates/pipeline-brief.md +129 -0
  127. package/assets/worker-kits/growthub-creative-video-pipeline-v1/templates/project.md +68 -0
  128. package/assets/worker-kits/growthub-creative-video-pipeline-v1/templates/self-eval.md +67 -0
  129. package/assets/worker-kits/growthub-creative-video-pipeline-v1/validation-checklist.md +52 -0
  130. package/assets/worker-kits/growthub-creative-video-pipeline-v1/workers/creative-video-pipeline-operator/CLAUDE.md +109 -0
  131. package/dist/index.js +42 -33
  132. package/package.json +1 -1
@@ -0,0 +1,194 @@
1
+ :root {
2
+ color-scheme: dark;
3
+ --bg: #080b12;
4
+ --sidebar: #0d1118;
5
+ --panel: #111827;
6
+ --panel-soft: #0d1420;
7
+ --ink: #f7fafc;
8
+ --muted: #93a3b8;
9
+ --line: #223047;
10
+ --accent: #38bdf8;
11
+ --accent-soft: rgba(56, 189, 248, 0.12);
12
+ --good: #22c55e;
13
+ --warn: #f59e0b;
14
+ }
15
+
16
+ * { box-sizing: border-box; }
17
+ html { scroll-behavior: smooth; }
18
+ body {
19
+ margin: 0;
20
+ background: var(--bg);
21
+ color: var(--ink);
22
+ font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
23
+ }
24
+ a { color: inherit; }
25
+ code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0.9em; }
26
+
27
+ .shell {
28
+ min-height: 100vh;
29
+ display: grid;
30
+ grid-template-columns: 232px minmax(0, 1fr);
31
+ background: radial-gradient(circle at top right, rgba(56, 189, 248, 0.12), transparent 360px), var(--bg);
32
+ }
33
+ .sidebar {
34
+ position: sticky;
35
+ top: 0;
36
+ height: 100vh;
37
+ display: flex;
38
+ flex-direction: column;
39
+ gap: 22px;
40
+ background: rgba(13, 17, 24, 0.96);
41
+ border-right: 1px solid var(--line);
42
+ padding: 22px 16px;
43
+ }
44
+ .brand { display: flex; align-items: center; gap: 10px; font-weight: 800; }
45
+ .brand-mark {
46
+ width: 34px;
47
+ height: 34px;
48
+ display: grid;
49
+ place-items: center;
50
+ border-radius: 8px;
51
+ background: var(--accent);
52
+ color: #06111d;
53
+ font-size: 13px;
54
+ font-weight: 900;
55
+ }
56
+ .nav { display: grid; gap: 5px; }
57
+ .nav a {
58
+ color: #c6d1e1;
59
+ text-decoration: none;
60
+ padding: 9px 10px;
61
+ border-radius: 7px;
62
+ font-size: 14px;
63
+ cursor: pointer;
64
+ }
65
+ .nav a:hover { background: #172133; color: white; }
66
+ .sidebar-footer { margin-top: auto; display: flex; align-items: center; gap: 8px; color: var(--muted); font-size: 13px; }
67
+ .status-dot { width: 8px; height: 8px; border-radius: 999px; background: var(--good); box-shadow: 0 0 0 4px rgba(34, 197, 94, 0.12); }
68
+ .main { width: min(100%, 1180px); padding: 30px; }
69
+ .utility-bar {
70
+ display: flex;
71
+ justify-content: space-between;
72
+ gap: 16px;
73
+ align-items: center;
74
+ margin-bottom: 20px;
75
+ padding: 12px 14px;
76
+ border: 1px solid var(--line);
77
+ border-radius: 8px;
78
+ background: rgba(17, 24, 39, 0.82);
79
+ }
80
+ .utility-bar strong { display: block; font-size: 14px; }
81
+ .utility-bar span, .page-heading p, .card p, .stage-card p, .setup-card p { color: var(--muted); line-height: 1.5; }
82
+ .utility-actions { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
83
+ .utility-actions a, .pill {
84
+ display: inline-flex;
85
+ align-items: center;
86
+ min-height: 28px;
87
+ border: 1px solid var(--line);
88
+ border-radius: 999px;
89
+ padding: 5px 10px;
90
+ background: #0c1320;
91
+ color: #c9d7e8;
92
+ text-decoration: none;
93
+ font-size: 12px;
94
+ cursor: pointer;
95
+ }
96
+ .page-heading { margin-bottom: 22px; }
97
+ .page-heading h1 { margin: 4px 0 8px; font-size: clamp(32px, 5vw, 58px); line-height: 0.98; letter-spacing: 0; }
98
+ .page-heading p { max-width: 780px; margin: 0; }
99
+ .eyebrow { color: var(--accent); font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.12em; }
100
+
101
+ /* Pipeline strip — three stages */
102
+ .pipeline-strip {
103
+ display: grid;
104
+ grid-template-columns: repeat(3, minmax(0, 1fr));
105
+ gap: 14px;
106
+ margin-bottom: 22px;
107
+ }
108
+ .stage-card {
109
+ border: 1px solid var(--line);
110
+ border-radius: 8px;
111
+ background: rgba(17, 24, 39, 0.9);
112
+ padding: 18px;
113
+ }
114
+ .stage-step { color: var(--accent); font-size: 12px; font-weight: 800; text-transform: uppercase; }
115
+ .stage-card strong { display: block; margin: 8px 0 6px; font-size: 18px; }
116
+ .stage-card code { display: block; margin-top: 10px; color: #9ab8d8; font-size: 11px; word-break: break-all; }
117
+
118
+ .hero-grid { display: grid; grid-template-columns: 1.2fr 0.9fr 0.9fr; gap: 14px; margin-bottom: 16px; }
119
+ .hero-card {
120
+ min-height: 160px;
121
+ padding: 18px;
122
+ border: 1px solid var(--line);
123
+ border-radius: 8px;
124
+ background: rgba(17, 24, 39, 0.9);
125
+ }
126
+ .hero-card.primary { background: linear-gradient(135deg, rgba(56, 189, 248, 0.18), rgba(17, 24, 39, 0.95)); }
127
+ .hero-card span { color: var(--accent); font-size: 12px; font-weight: 800; text-transform: uppercase; }
128
+ .hero-card strong { display: block; margin-top: 10px; font-size: 28px; line-height: 1; }
129
+ .hero-card p { margin: 10px 0 0; color: var(--muted); line-height: 1.5; font-size: 13px; }
130
+
131
+ .adapter-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; margin-bottom: 18px; }
132
+ .card { min-height: 100px; padding: 16px; border: 1px solid var(--line); border-radius: 8px; background: rgba(17, 24, 39, 0.9); }
133
+ .card h3 { margin: 0 0 8px; font-size: 14px; color: var(--accent); }
134
+
135
+ .ops-strip { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; margin-bottom: 22px; }
136
+ .ops-strip article { padding: 14px; border: 1px solid var(--line); border-radius: 8px; background: rgba(13, 20, 32, 0.88); }
137
+ .ops-strip span { color: var(--accent); font-size: 12px; font-weight: 800; text-transform: uppercase; }
138
+ .ops-strip strong { display: block; margin: 7px 0; font-size: 14px; }
139
+
140
+ /* Settings panel */
141
+ .settings-panel {
142
+ border: 1px solid var(--line);
143
+ border-radius: 8px;
144
+ background: rgba(13, 20, 32, 0.95);
145
+ padding: 22px;
146
+ margin-bottom: 22px;
147
+ }
148
+ .settings-header { margin-bottom: 18px; }
149
+ .settings-header h2 { margin: 0 0 8px; font-size: 20px; }
150
+ .settings-header p { color: var(--muted); margin: 0; }
151
+ .setup-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin-bottom: 18px; }
152
+ .setup-card { padding: 14px; border: 1px solid var(--line); border-radius: 8px; background: rgba(13, 20, 32, 0.88); }
153
+ .setup-card span { color: var(--accent); font-size: 12px; font-weight: 800; text-transform: uppercase; }
154
+ .setup-card strong { display: block; margin: 7px 0; font-size: 14px; }
155
+ .setup-card code { color: #d7e8ff; word-break: break-word; font-size: 12px; }
156
+ .key-list { display: grid; gap: 8px; }
157
+ .key-row { padding: 12px 14px; border: 1px solid var(--line); border-radius: 8px; background: #0a101b; }
158
+ .key-row div { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; }
159
+ .key-row p { margin: 0; color: var(--muted); font-size: 13px; }
160
+ .key-badge {
161
+ border-radius: 999px;
162
+ padding: 2px 7px;
163
+ font-size: 11px;
164
+ font-weight: 700;
165
+ }
166
+ .key-badge.required { background: rgba(56, 189, 248, 0.15); color: var(--accent); border: 1px solid rgba(56, 189, 248, 0.3); }
167
+ .key-badge.optional { background: rgba(147, 163, 184, 0.1); color: var(--muted); border: 1px solid var(--line); }
168
+ .settings-note { margin: 14px 0 0; color: var(--muted); font-size: 13px; }
169
+
170
+ .quick-actions { position: fixed; right: 20px; bottom: 20px; display: grid; gap: 8px; width: 200px; }
171
+ .quick-actions button {
172
+ border: 1px solid var(--line);
173
+ border-radius: 8px;
174
+ padding: 10px 12px;
175
+ background: #0d1420;
176
+ color: var(--ink);
177
+ text-align: left;
178
+ font: inherit;
179
+ cursor: pointer;
180
+ }
181
+ .quick-actions button:hover { background: #172133; }
182
+
183
+ @media (max-width: 1020px) {
184
+ .shell { grid-template-columns: 1fr; }
185
+ .sidebar { position: static; height: auto; }
186
+ .pipeline-strip, .hero-grid, .adapter-grid, .ops-strip, .setup-grid { grid-template-columns: 1fr; }
187
+ .quick-actions { position: static; width: auto; margin: 20px 30px; }
188
+ }
189
+
190
+ @media (max-width: 720px) {
191
+ .main { padding: 20px; }
192
+ .utility-bar { display: block; }
193
+ .utility-actions { margin-top: 10px; }
194
+ }
@@ -0,0 +1,10 @@
1
+ import React from "react";
2
+ import { createRoot } from "react-dom/client";
3
+ import App from "./App.jsx";
4
+ import "./app.css";
5
+
6
+ createRoot(document.getElementById("root")).render(
7
+ <React.StrictMode>
8
+ <App />
9
+ </React.StrictMode>
10
+ );
@@ -0,0 +1,8 @@
1
+ import { defineConfig } from "vite";
2
+ import react from "@vitejs/plugin-react";
3
+
4
+ export default defineConfig({
5
+ plugins: [react()],
6
+ server: { port: 5180 },
7
+ build: { outDir: "dist", emptyOutDir: true },
8
+ });
@@ -0,0 +1,66 @@
1
+ # Edit Plan — [CLIENT] / [PROJECT]
2
+ > Stage 3 planning artifact. Hand this to the video-use agent alongside `pipeline-brief.md`.
3
+
4
+ ---
5
+
6
+ ## Source clips
7
+
8
+ | # | File | Duration | Scene | From manifest |
9
+ |---|---|---|---|---|
10
+ | 1 | generative/scene1-hook-a.mp4 | 5s | Hook A | manifest.json #id |
11
+ | 2 | generative/scene2.mp4 | 8s | Problem | manifest.json #id |
12
+ | N | generative/sceneN.mp4 | 5s | CTA | manifest.json #id |
13
+
14
+ VIDEO_USE_HOME staging path: `${VIDEO_USE_HOME}/<project>/`
15
+
16
+ ---
17
+
18
+ ## Cut strategy
19
+
20
+ - **Target duration:** [N]s
21
+ - **Opening hook:** Scene 1 (Hook [A–E] selected for this cut)
22
+ - **Core through-line:** Problem → Solution → CTA
23
+ - **Pacing bias:** tight (cut every ~3s) / breathing / mixed
24
+ - **Word-boundary cuts:** always — never cut inside a word
25
+ - **30 ms audio fades** at every segment boundary
26
+
27
+ ---
28
+
29
+ ## Overlay plan
30
+
31
+ | Time | Overlay | Tool | Notes |
32
+ |---|---|---|---|
33
+ | 0:00 | On-screen text: "[hook text]" | Manim / PIL | From brief Scene 1 |
34
+ | 0:05 | Caption track starts | FFmpeg subtitle filter | Subtitles applied last |
35
+ | 0:25 | CTA card: "[cta text]", [phone], [url] | Manim / PIL | From brand kit |
36
+
37
+ Subtitles are applied **last** — after all overlays. `setpts=PTS-STARTPTS+T/TB` for timing.
38
+
39
+ ---
40
+
41
+ ## Music direction
42
+
43
+ - **Style:** [description]
44
+ - **Tempo:** [BPM guidance]
45
+ - **Fade in/out:** [direction]
46
+
47
+ ---
48
+
49
+ ## Render target
50
+
51
+ | Format | Codec | Resolution | Aspect |
52
+ |---|---|---|---|
53
+ | MP4 | h264 | 1080×1920 | 9:16 |
54
+ | MP4 | h264 | 1080×1080 | 1:1 (if required) |
55
+
56
+ Output: `output/<client>/<project>/final/final.mp4`
57
+
58
+ ---
59
+
60
+ ## QA pass criteria
61
+
62
+ - [ ] Duration within ±10% of target
63
+ - [ ] Audio fades present at every segment boundary
64
+ - [ ] Subtitles applied last and aligned to phrase transcript
65
+ - [ ] No API keys or secrets in rendered output
66
+ - [ ] All 12 video-use production rules pass (see video-use qa-checklist.md)
@@ -0,0 +1,83 @@
1
+ # Generative Plan — [CLIENT] / [PROJECT]
2
+ > Stage 2 planning artifact. Fill before running `helpers/run-pipeline.sh` or BYOK execution.
3
+
4
+ ---
5
+
6
+ ## Adapter
7
+
8
+ ```
9
+ CREATIVE_VIDEO_PIPELINE_GENERATIVE_ADAPTER=
10
+ VIDEO_MODEL_PROVIDER= (if byo-api-key)
11
+ ```
12
+
13
+ ---
14
+
15
+ ## Node bindings
16
+
17
+ | Scene | Type | Model | Prompt (from brief Appendix) | Duration | Aspect |
18
+ |---|---|---|---|---|---|
19
+ | Scene 1 (Hook A) | video | veo-3.1-generate-001 | | 5s | 9:16 |
20
+ | Scene 2 | video | veo-3.1-generate-001 | | 8s | 9:16 |
21
+ | Scene N | image | (image capability) | | — | 9:16 |
22
+
23
+ ---
24
+
25
+ ## Reference images
26
+
27
+ > Bind as typed data URLs: `data:image/jpeg;base64,<base64>` per `@growthub/api-contract` ref spec.
28
+ > Never pass raw URLs as `refs[].dataUrl`.
29
+
30
+ | Name | Source | Purpose |
31
+ |---|---|---|
32
+ | brand_reference | brands/<client>/assets/logo.jpg | Brand anchor |
33
+ | scene_reference | brands/<client>/assets/reference.jpg | Visual style |
34
+
35
+ Shell command to convert a local image to a typed data URL:
36
+
37
+ ```bash
38
+ python3 -c "
39
+ import base64, sys
40
+ with open(sys.argv[1], 'rb') as f:
41
+ b64 = base64.b64encode(f.read()).decode()
42
+ print(f'data:image/{sys.argv[2]};base64,{b64}')
43
+ " brands/<client>/assets/logo.jpg jpeg
44
+ ```
45
+
46
+ ---
47
+
48
+ ## Pipeline payload (growthub-pipeline adapter)
49
+
50
+ ```json
51
+ {
52
+ "pipelineId": "",
53
+ "executionMode": "hosted",
54
+ "nodes": [
55
+ {
56
+ "nodeId": "video-gen-1",
57
+ "slug": "video-generation",
58
+ "bindings": {
59
+ "videoModel": "veo-3.1-generate-001",
60
+ "prompt": "",
61
+ "seconds": 8,
62
+ "aspectRatio": "9:16",
63
+ "creativeCount": 1,
64
+ "refs": [
65
+ { "name": "brand_reference", "dataUrl": "" }
66
+ ]
67
+ }
68
+ }
69
+ ]
70
+ }
71
+ ```
72
+
73
+ ---
74
+
75
+ ## Expected output
76
+
77
+ ```
78
+ output/<client>/<project>/generative/
79
+ ├── manifest.json
80
+ ├── scene1-hook-a.mp4
81
+ ├── scene2.mp4
82
+ └── scene-n-bg.jpg
83
+ ```
@@ -0,0 +1,129 @@
1
+ # Pipeline Brief — [CLIENT NAME] / [CAMPAIGN NAME]
2
+ > Stage 1 output. Write this file to `output/<client-slug>/<project-slug>/brief/pipeline-brief.md`.
3
+ > Pull all brand values from `brands/<client-slug>/brand-kit.md`. Do not invent brand detail.
4
+
5
+ ---
6
+
7
+ ## BRAND CONSTRAINTS
8
+
9
+ > ⚠️ This ad must NEVER:
10
+ > - [Pull from brand-kit.md `messaging_guardrails`]
11
+ > - [Pull from brand-kit.md `do_not_attract`]
12
+
13
+ ---
14
+
15
+ ## BRIEF OVERVIEW
16
+
17
+ | Field | Value |
18
+ |---|---|
19
+ | Client | |
20
+ | Campaign | |
21
+ | Date | |
22
+ | Format | (UGC / AI Avatar / Explainer / Performance) |
23
+ | Length | (seconds) |
24
+ | Primary Goal | (Conversion / Awareness / Education) |
25
+ | Hook Variations | (default 5 — A through E) |
26
+ | Scene Count | |
27
+ | Aspect Ratios | (9:16 + 1:1 minimum) |
28
+ | Captions | ON |
29
+ | CTA Offer | |
30
+ | Landing Page | |
31
+
32
+ ---
33
+
34
+ ## SCENE STRUCTURE
35
+
36
+ | Scene | Name | Timecode | Beat |
37
+ |---|---|---|---|
38
+ | 1 | Hook | 0:00–0:05 | N hook variations A–E |
39
+ | 2 | Problem | 0:05–0:15 | Consistent across all hooks |
40
+ | 3 | Solution | 0:15–0:25 | Consistent across all hooks |
41
+ | N | CTA | 0:25–0:30 | Consistent across all hooks |
42
+
43
+ ---
44
+
45
+ ## SCENE 1 — HOOK (N VARIATIONS)
46
+
47
+ > All variations share the same Scene 2–N structure. Only Scene 1 differs.
48
+
49
+ ### Hook A — [Type]
50
+ **Visual:**
51
+ **On-Screen Text:**
52
+ **VO:**
53
+
54
+ ### Hook B — [Type]
55
+ **Visual:**
56
+ **On-Screen Text:**
57
+ **VO:**
58
+
59
+ ### Hook C — [Type]
60
+ **Visual:**
61
+ **On-Screen Text:**
62
+ **VO:**
63
+
64
+ ### Hook D — [Type]
65
+ **Visual:**
66
+ **On-Screen Text:**
67
+ **VO:**
68
+
69
+ ### Hook E — [Type]
70
+ **Visual:**
71
+ **On-Screen Text:**
72
+ **VO:**
73
+
74
+ ---
75
+
76
+ ## SCENES 2–N (CONSISTENT ACROSS ALL HOOK VARIATIONS)
77
+
78
+ ### Scene 2 — [Name]
79
+ **Visual:**
80
+ **On-Screen Text:**
81
+ **VO:**
82
+
83
+ ### Scene 3 — [Name]
84
+ **Visual:**
85
+ **On-Screen Text:**
86
+ **VO:**
87
+
88
+ ### Scene N — CTA
89
+ **Visual:**
90
+ **On-Screen Text:**
91
+ **VO:** `[CTA text from brand kit]`
92
+
93
+ ---
94
+
95
+ ## EDITING GUIDELINES
96
+
97
+ - **Pacing:** Cut every ~3s unless specified otherwise
98
+ - **Music:** [direction]
99
+ - **Captions:** ON — match VO rhythm
100
+ - **Color grade:** [direction]
101
+ - **Aspect ratios:** 9:16 primary, 1:1 secondary
102
+ - **NO list:** [pull from brand-kit.md messaging_guardrails]
103
+
104
+ ---
105
+
106
+ ## APPENDIX — AI GENERATION PROMPTS (OPTIONAL)
107
+
108
+ > These prompts feed Stage 2 of the pipeline. Each prompt maps to one scene / one clip.
109
+ > Keep prompts in this appendix only. Never inline in scene blocks above.
110
+
111
+ ### Video prompt — Scene 1 (Hook A)
112
+
113
+ ```
114
+ [Scene description for video-generation CMS node]
115
+ Brand: [brand name], style: [style from brand kit], no text overlays,
116
+ [aspect ratio], [duration]s
117
+ ```
118
+
119
+ ### Video prompt — Scene 2
120
+
121
+ ```
122
+ [Scene description]
123
+ ```
124
+
125
+ ### Image prompt — [Scene N background / reference]
126
+
127
+ ```
128
+ [Image description]
129
+ ```
@@ -0,0 +1,68 @@
1
+ ---
2
+ # .growthub-fork/project.md — session memory primitive (v1)
3
+ #
4
+ # Seeded by `growthub kit fork register` from this template.
5
+ # Replaceable tokens: {{KIT_ID}} {{FORK_ID}} {{STARTED_AT}} {{SOURCE}} {{SOURCE_REF}}
6
+
7
+ kitId: "{{KIT_ID}}"
8
+ forkId: "{{FORK_ID}}"
9
+ startedAt: "{{STARTED_AT}}"
10
+ source: "{{SOURCE}}"
11
+ sourceRef: "{{SOURCE_REF}}"
12
+ skillManifestVersion: 1
13
+ approvals: []
14
+ selfEvalHistory: []
15
+ subSkillRuns: []
16
+
17
+ # Pipeline state (update after each stage)
18
+ pipelineState:
19
+ stage1Brief:
20
+ status: pending # pending | in_progress | complete
21
+ clientSlug: ""
22
+ projectSlug: ""
23
+ briefPath: ""
24
+ sceneCount: 0
25
+ hookVariations: 0
26
+ completedAt: ""
27
+ stage2Generative:
28
+ status: pending # pending | in_progress | complete
29
+ adapter: "" # growthub-pipeline | byo-api-key
30
+ provider: ""
31
+ artifactCount: 0
32
+ manifestPath: ""
33
+ completedAt: ""
34
+ stage3Edit:
35
+ status: pending # pending | in_progress | complete
36
+ videoUseForkPath: ""
37
+ finalVideoPath: ""
38
+ durationTarget: ""
39
+ qaPass: false
40
+ completedAt: ""
41
+ ---
42
+
43
+ # Project journal — fork `{{FORK_ID}}`
44
+
45
+ Baseline primitive: `{{KIT_ID}}`. Seeded at `{{STARTED_AT}}` from `{{SOURCE}}` (`{{SOURCE_REF}}`).
46
+
47
+ ## How to use this file
48
+
49
+ 1. **Session start.** Read the last 3 entries below + tail 20 events in `.growthub-fork/trace.jsonl`. Update `pipelineState` to reflect actual completion.
50
+ 2. **Stage completion.** Record a dated entry in "Session log" with: stage, client, project, key paths, self-eval outcome.
51
+ 3. **Material change.** Append a dated bullet here AND a typed event to `trace.jsonl`.
52
+ 4. **Self-eval boundary.** Append to `selfEvalHistory`: `attempt`, `criteria`, `outcome`, `notes`.
53
+ 5. **Sub-skill spawn.** Append to `subSkillRuns`: `subSkill`, `startedAt`, `result`.
54
+
55
+ ## Session log
56
+
57
+ <!-- Append entries below, newest at the bottom.
58
+
59
+ ### YYYY-MM-DD HH:mm UTC · creative-video-pipeline-operator
60
+ - **Plan.** What you intend to do this session.
61
+ - **Stage.** Which stage (1/2/3) and what sub-task.
62
+ - **Changes.** What you actually did (each must correspond to a trace event).
63
+ - **Outcome.** Pass / fail / parked. Reference the selfEval criteria checked.
64
+ - **Next.** What the next session should pick up.
65
+
66
+ -->
67
+
68
+ _No sessions recorded yet. This block is populated as the fork is operated._
@@ -0,0 +1,67 @@
1
+ # Self-evaluation template — v1 primitive (Growthub, capability-agnostic)
2
+
3
+ A skill's `selfEval` contract declares **what good looks like** (`criteria[]`) and **the retry ceiling** (`maxRetries`). The agent drives the loop; this file is the pattern the agent follows at every unit of work.
4
+
5
+ The contract is defined in `@growthub/api-contract/skills::SkillSelfEval` and is **capability-agnostic** — the same primitive applies to code edits, copy drafts, CRM rules, API payloads, asset renders, audit passes, and every other domain. The "unit of work" is the smallest reversible change the skill operates on; concrete boundaries are defined in the kit's own `skills.md` operator runbook, not here.
6
+
7
+ ## Loop
8
+
9
+ ```
10
+ for attempt in 1..maxRetries: # default maxRetries = 3
11
+ generate — produce a proposal (whatever the skill produces)
12
+ apply — materialise the proposal against the fork
13
+ self-evaluate — for each criterion in skill.selfEval.criteria:
14
+ check → pass / fail / needs-confirmation
15
+ record — append to project.md (human) + trace.jsonl (machine)
16
+
17
+ if all criteria pass: break
18
+ if attempt == maxRetries: park with needs_confirmation note. Stop.
19
+ ```
20
+
21
+ ## What each attempt writes
22
+
23
+ ### Human row — append to `.growthub-fork/project.md` "Session log"
24
+
25
+ ```md
26
+ ### 2026-04-24 · creative-video-pipeline-operator
27
+ - **Plan.** What you intend to do this unit of work.
28
+ - **Changes.** Material change applied (must correspond to a trace event).
29
+ - **Self-eval.** attempt 2/3 — criterion "<one of skill.selfEval.criteria>" ✗ (<note>). Retrying.
30
+ - **Outcome.** retry-pending / pass / parked.
31
+ - **Next.** What the next attempt (or next session) should pick up.
32
+ ```
33
+
34
+ ### Machine row — append to `.growthub-fork/trace.jsonl`
35
+
36
+ ```json
37
+ {
38
+ "ts": "2026-04-24T00:00:00.000Z",
39
+ "forkId": "<fork-id>",
40
+ "kitId": "growthub-creative-video-pipeline-v1",
41
+ "type": "self_eval_recorded",
42
+ "summary": "attempt 2/3 failed on <criterion>",
43
+ "detail": {
44
+ "skill": "<skill-slug>",
45
+ "attempt": 2,
46
+ "maxRetries": 3,
47
+ "criterion": "<one of skill.selfEval.criteria>",
48
+ "outcome": "fail",
49
+ "notes": "<short explanation>"
50
+ }
51
+ }
52
+ ```
53
+
54
+ ## Hard rules
55
+
56
+ 1. **Never exceed `maxRetries`.** At the ceiling, park with a `needs_confirmation` note and stop.
57
+ 2. **Record every attempt.** Even the first pass.
58
+ 3. **Keep `project.md` and `trace.jsonl` in sync.**
59
+ 4. **Preserve prior entries.** Append-only. Never rewrite history.
60
+
61
+ ## Kit-specific self-eval units
62
+
63
+ | Stage | Unit of work |
64
+ |---|---|
65
+ | Stage 1 — Brief | Completed `pipeline-brief.md` for one creative concept |
66
+ | Stage 2 — Generate | `manifest.json` with one artifact URL per scene |
67
+ | Stage 3 — Edit | `final.mp4` exists, duration ±10% of target, QA pass |
@@ -0,0 +1,52 @@
1
+ # Validation Checklist — Creative Video Pipeline
2
+
3
+ Run before calling the kit v1-ready or before a Vercel deployment.
4
+
5
+ ## Environment
6
+
7
+ - [ ] `bash setup/check-deps.sh` passes (FFmpeg, Python 3, pip, git, node)
8
+ - [ ] `node setup/verify-env.mjs` passes
9
+ - [ ] `bash helpers/check-generative-adapter.sh` shows expected adapter and keys
10
+ - [ ] `VIDEO_USE_HOME` resolves to an existing `video-use` clone
11
+
12
+ ## Growthub CLI (growthub-pipeline adapter)
13
+
14
+ - [ ] `growthub auth whoami --json` returns authenticated user
15
+ - [ ] `growthub kit list --family studio` includes `growthub-creative-video-pipeline-v1`
16
+ - [ ] `growthub kit fork status <fork-id>` shows no unexpected drift
17
+
18
+ ## Stage 1 — Brief
19
+
20
+ - [ ] Brand kit exists at `brands/<client-slug>/brand-kit.md`
21
+ - [ ] `pipeline-brief.md` written to `output/<client>/<project>/brief/`
22
+ - [ ] Brief contains: brand constraints box, scene table, hook variations A–E, editing guidelines
23
+ - [ ] AI generation prompts in Appendix only (not inline in scene blocks)
24
+
25
+ ## Stage 2 — Generate
26
+
27
+ - [ ] `output/<client>/<project>/generative/manifest.json` exists and is valid JSON
28
+ - [ ] Each manifest entry has `id`, `type`, `provider`, `url`, `prompt`
29
+ - [ ] No API keys appear in any artifact file
30
+ - [ ] Artifact count matches scene count in brief
31
+
32
+ ## Stage 3 — Edit
33
+
34
+ - [ ] `output/<client>/<project>/final/final.mp4` exists
35
+ - [ ] Duration within ±10% of target from edit plan
36
+ - [ ] Audio fades at segment boundaries (30 ms)
37
+ - [ ] Subtitles applied last
38
+ - [ ] No secrets in any output artifact
39
+
40
+ ## Local shell
41
+
42
+ - [ ] `cd studio && npm install && npm run build` succeeds
43
+ - [ ] `cd apps/creative-video-pipeline && npm install && npm run build` succeeds
44
+ - [ ] Studio Vite shell renders pipeline stage status without errors
45
+ - [ ] Next.js `/settings/keys` page renders adapter config
46
+
47
+ ## Governed primitives
48
+
49
+ - [ ] `.growthub-fork/project.md` has entries for all completed stages
50
+ - [ ] `.growthub-fork/trace.jsonl` has typed events for all material changes
51
+ - [ ] `growthub skills validate` passes
52
+ - [ ] `growthub skills list` shows this kit's SKILL.md tree