@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,203 @@
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
+ }
64
+ .nav a.active, .nav a:hover { background: #172133; color: white; }
65
+ .sidebar-footer {
66
+ margin-top: auto;
67
+ display: flex;
68
+ align-items: center;
69
+ gap: 8px;
70
+ color: var(--muted);
71
+ font-size: 13px;
72
+ }
73
+ .status-dot {
74
+ width: 8px;
75
+ height: 8px;
76
+ border-radius: 999px;
77
+ background: var(--good);
78
+ box-shadow: 0 0 0 4px rgba(34, 197, 94, 0.12);
79
+ }
80
+ .main { width: min(100%, 1180px); padding: 30px; }
81
+ .utility-bar {
82
+ display: flex;
83
+ justify-content: space-between;
84
+ gap: 16px;
85
+ align-items: center;
86
+ margin-bottom: 20px;
87
+ padding: 12px 14px;
88
+ border: 1px solid var(--line);
89
+ border-radius: 8px;
90
+ background: rgba(17, 24, 39, 0.82);
91
+ }
92
+ .utility-bar strong { display: block; font-size: 14px; }
93
+ .utility-bar span, .page-heading p, .panel-copy, .card p, .setup-card p, .key-row p { color: var(--muted); line-height: 1.5; }
94
+ .utility-actions { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
95
+ .utility-actions a, .pill, .badge {
96
+ display: inline-flex;
97
+ align-items: center;
98
+ min-height: 28px;
99
+ border: 1px solid var(--line);
100
+ border-radius: 999px;
101
+ padding: 5px 10px;
102
+ background: #0c1320;
103
+ color: #c9d7e8;
104
+ text-decoration: none;
105
+ font-size: 12px;
106
+ }
107
+ .page-heading { position: relative; margin-bottom: 22px; }
108
+ .page-heading h1 { margin: 4px 0 8px; font-size: clamp(32px, 5vw, 58px); line-height: 0.98; letter-spacing: 0; }
109
+ .page-heading p { max-width: 780px; margin: 0 0 12px; }
110
+ .eyebrow { color: var(--accent); font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.12em; }
111
+
112
+ /* Pipeline strip */
113
+ .pipeline-strip {
114
+ display: grid;
115
+ grid-template-columns: repeat(3, minmax(0, 1fr));
116
+ gap: 14px;
117
+ margin-bottom: 22px;
118
+ }
119
+ .stage-card {
120
+ border: 1px solid var(--line);
121
+ border-radius: 8px;
122
+ background: rgba(17, 24, 39, 0.9);
123
+ padding: 18px;
124
+ }
125
+ .stage-card.complete { border-color: rgba(34, 197, 94, 0.4); background: rgba(34, 197, 94, 0.05); }
126
+ .stage-card.active { border-color: rgba(56, 189, 248, 0.4); background: rgba(56, 189, 248, 0.06); }
127
+ .stage-step { color: var(--accent); font-size: 12px; font-weight: 800; text-transform: uppercase; }
128
+ .stage-card strong { display: block; margin: 8px 0 6px; font-size: 16px; }
129
+ .stage-card code { display: block; margin-top: 8px; font-size: 11px; color: #9ab8d8; word-break: break-all; }
130
+ .stage-status { display: inline-block; margin-top: 8px; border-radius: 999px; padding: 3px 8px; font-size: 11px; font-weight: 700; }
131
+ .stage-status.pending { color: var(--muted); background: #0a101b; border: 1px solid var(--line); }
132
+ .stage-status.complete { color: var(--good); background: rgba(34, 197, 94, 0.1); border: 1px solid rgba(34, 197, 94, 0.3); }
133
+
134
+ .hero-grid { display: grid; grid-template-columns: 1.2fr 0.9fr 0.9fr; gap: 14px; margin-bottom: 16px; }
135
+ .hero-card { min-height: 150px; padding: 18px; border: 1px solid var(--line); border-radius: 8px; background: rgba(17, 24, 39, 0.9); }
136
+ .hero-card.primary { background: linear-gradient(135deg, rgba(56, 189, 248, 0.18), rgba(17, 24, 39, 0.95)); }
137
+ .hero-card span { color: var(--accent); font-size: 12px; font-weight: 800; text-transform: uppercase; }
138
+ .hero-card strong { display: block; margin-top: 10px; font-size: 28px; line-height: 1; }
139
+ .hero-card p { margin: 10px 0 0; color: var(--muted); font-size: 13px; line-height: 1.5; }
140
+ .card-label { color: var(--accent) !important; font-size: 12px; font-weight: 800; text-transform: uppercase; }
141
+ .muted { color: var(--muted) !important; }
142
+
143
+ .ops-strip {
144
+ display: grid;
145
+ grid-template-columns: repeat(4, minmax(0, 1fr));
146
+ gap: 12px;
147
+ margin-bottom: 18px;
148
+ }
149
+ .ops-strip article { padding: 14px; border: 1px solid var(--line); border-radius: 8px; background: rgba(13, 20, 32, 0.88); }
150
+ .ops-strip span { color: var(--accent); font-size: 12px; font-weight: 800; text-transform: uppercase; }
151
+ .ops-strip strong { display: block; margin: 7px 0; font-size: 14px; }
152
+ .ops-strip p { margin: 0; font-size: 13px; color: var(--muted); }
153
+
154
+ .adapter-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; margin-bottom: 18px; }
155
+ .card { min-height: 100px; padding: 16px; border: 1px solid var(--line); border-radius: 8px; background: rgba(17, 24, 39, 0.9); }
156
+ .card h3 { margin: 0 0 8px; font-size: 14px; color: var(--accent); }
157
+
158
+ /* Settings — /settings/keys */
159
+ .setup-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin-bottom: 18px; }
160
+ .setup-card { padding: 14px; border: 1px solid var(--line); border-radius: 8px; background: rgba(13, 20, 32, 0.88); }
161
+ .setup-card span { color: var(--accent); font-size: 12px; font-weight: 800; text-transform: uppercase; }
162
+ .setup-card strong { display: block; margin: 7px 0; font-size: 14px; }
163
+ .setup-card code { color: #d7e8ff; word-break: break-word; }
164
+
165
+ .key-board { display: grid; gap: 10px; }
166
+ .key-row { padding: 14px 16px; border: 1px solid var(--line); border-radius: 8px; background: #0d1420; }
167
+ .key-row-top { display: flex; align-items: center; gap: 10px; margin-bottom: 4px; }
168
+ .key-badge { border-radius: 999px; padding: 2px 8px; font-size: 11px; font-weight: 700; }
169
+ .key-badge.required { background: rgba(56, 189, 248, 0.15); color: var(--accent); border: 1px solid rgba(56, 189, 248, 0.3); }
170
+ .key-badge.conditional { background: rgba(147, 163, 184, 0.1); color: var(--muted); border: 1px solid var(--line); }
171
+ .settings-note { margin-top: 14px; color: var(--muted); font-size: 13px; }
172
+ .toolbar-strip { display: flex; justify-content: space-between; align-items: center; gap: 14px; padding: 12px 14px; border: 1px solid var(--line); border-radius: 8px; background: rgba(17, 24, 39, 0.9); margin-bottom: 18px; }
173
+ .toolbar-strip p { margin: 4px 0 0; color: var(--muted); font-size: 14px; }
174
+
175
+ .quick-actions {
176
+ position: fixed;
177
+ right: 20px;
178
+ bottom: 20px;
179
+ display: grid;
180
+ gap: 8px;
181
+ width: 200px;
182
+ }
183
+ .quick-actions button {
184
+ border: 1px solid var(--line);
185
+ border-radius: 8px;
186
+ padding: 10px 12px;
187
+ background: #0d1420;
188
+ color: var(--ink);
189
+ text-align: left;
190
+ font: inherit;
191
+ }
192
+
193
+ @media (max-width: 1020px) {
194
+ .shell { grid-template-columns: 1fr; }
195
+ .sidebar { position: static; height: auto; }
196
+ .pipeline-strip, .hero-grid, .adapter-grid, .ops-strip, .setup-grid { grid-template-columns: 1fr; }
197
+ .quick-actions { position: static; width: auto; margin: 20px 30px; }
198
+ }
199
+ @media (max-width: 720px) {
200
+ .main { padding: 20px; }
201
+ .utility-bar { display: block; }
202
+ .utility-actions { margin-top: 10px; }
203
+ }
@@ -0,0 +1,14 @@
1
+ import "./globals.css";
2
+ const metadata = {
3
+ title: "Creative Video Pipeline",
4
+ description: "Three-stage creative video pipeline: brief, generative, edit — governed workspace with Growthub bridge and BYOK support."
5
+ };
6
+ function RootLayout({ children }) {
7
+ return <html lang="en">
8
+ <body>{children}</body>
9
+ </html>;
10
+ }
11
+ export {
12
+ RootLayout as default,
13
+ metadata
14
+ };
@@ -0,0 +1,131 @@
1
+ import { readAdapterConfig } from "@/lib/adapters/env";
2
+ import { describeGenerativeAdapter } from "@/lib/adapters/generative/index";
3
+ import { pipelineStages } from "@/lib/domain/pipeline";
4
+ import Link from "next/link";
5
+
6
+ const nav = [
7
+ { href: "#pipeline", label: "Pipeline" },
8
+ { href: "#brief", label: "Brief" },
9
+ { href: "#generative", label: "Generative" },
10
+ { href: "#edit", label: "Edit" },
11
+ { href: "/settings/keys", label: "API Keys" },
12
+ ];
13
+
14
+ function Home() {
15
+ const config = readAdapterConfig();
16
+ const generative = describeGenerativeAdapter();
17
+
18
+ return <main className="shell">
19
+ <aside className="sidebar">
20
+ <div className="brand">
21
+ <span className="brand-mark">CV</span>
22
+ <span>Creative Video Pipeline</span>
23
+ </div>
24
+ <nav className="nav">
25
+ {nav.map((item) => <Link href={item.href} key={item.href}>{item.label}</Link>)}
26
+ </nav>
27
+ <div className="sidebar-footer">
28
+ <span className="status-dot" />
29
+ Governed worker kit
30
+ </div>
31
+ </aside>
32
+
33
+ <section className="main">
34
+ <div className="utility-bar">
35
+ <div>
36
+ <strong>Creative Video Pipeline</strong>
37
+ <span>Brief → Generate → Edit — governed workspace with local Vite shell and Vercel parity.</span>
38
+ </div>
39
+ <div className="utility-actions">
40
+ <Link href="/settings/keys">API Keys</Link>
41
+ <span className="pill">v1 kit</span>
42
+ </div>
43
+ </div>
44
+
45
+ <div className="page-heading" id="pipeline">
46
+ <p className="eyebrow">Three-stage pipeline</p>
47
+ <h1>Brief to final video.</h1>
48
+ <p>
49
+ Brand-grounded brief, generative image/video via{" "}
50
+ <strong>{config.generativeAdapter}</strong>, and transcript-anchored editing
51
+ via the video-use fork — outputs governed across all three stages.
52
+ </p>
53
+ <span className="badge">adapter: {generative.label}</span>
54
+ </div>
55
+
56
+ <section className="pipeline-strip" id="pipeline-stages">
57
+ {pipelineStages.map((stage) => <article className="stage-card" id={stage.id} key={stage.id}>
58
+ <span className="stage-step">{stage.step}</span>
59
+ <strong>{stage.label}</strong>
60
+ <p>{stage.description}</p>
61
+ <code>{stage.outputPath}</code>
62
+ <span className="stage-status pending">pending</span>
63
+ </article>)}
64
+ </section>
65
+
66
+ <section className="hero-grid">
67
+ <article className="hero-card primary">
68
+ <p className="card-label">Generative adapter</p>
69
+ <strong>{config.generativeAdapter}</strong>
70
+ <p>{generative.description}</p>
71
+ </article>
72
+ <article className="hero-card">
73
+ <p className="card-label">Video-use fork</p>
74
+ <strong>{config.videoUseHome ? "configured" : "not set"}</strong>
75
+ <p className="muted">VIDEO_USE_HOME resolves the video-use clone for Stage 3.</p>
76
+ </article>
77
+ <article className="hero-card">
78
+ <p className="card-label">ElevenLabs Scribe</p>
79
+ <strong>{config.hasElevenLabsKey ? "key set" : "key missing"}</strong>
80
+ <p className="muted">Required for Stage 3 word-level transcription.</p>
81
+ </article>
82
+ </section>
83
+
84
+ <section className="ops-strip">
85
+ <article>
86
+ <span>01</span>
87
+ <strong>Brand Kit</strong>
88
+ <p>Scene structure and hooks sourced from brand-kit.md only.</p>
89
+ </article>
90
+ <article>
91
+ <span>02</span>
92
+ <strong>CLI Pipeline</strong>
93
+ <p>growthub pipeline execute → CMS video-generation node.</p>
94
+ </article>
95
+ <article>
96
+ <span>03</span>
97
+ <strong>video-use Fork</strong>
98
+ <p>Scribe → word-boundary EDL → FFmpeg → final.mp4.</p>
99
+ </article>
100
+ <article>
101
+ <span>04</span>
102
+ <strong>Governed</strong>
103
+ <p>project.md + trace.jsonl at every stage boundary.</p>
104
+ </article>
105
+ </section>
106
+
107
+ <section className="adapter-grid" aria-label="Adapter paths">
108
+ <article className="card">
109
+ <h3>growthub-pipeline (primary)</h3>
110
+ <p>Routes through hosted CMS video-generation node. Requires GROWTHUB_BRIDGE_ACCESS_TOKEN + auth.</p>
111
+ </article>
112
+ <article className="card">
113
+ <h3>byo-api-key (secondary)</h3>
114
+ <p>Explicit provider SDK calls. Set VIDEO_MODEL_PROVIDER (veo | fal | runway) + key. Same artifact contract.</p>
115
+ </article>
116
+ </section>
117
+ </section>
118
+
119
+ <aside className="quick-actions">
120
+ <button type="button">Run Stage 1 — Brief</button>
121
+ <button type="button">Run Stage 2 — Generate</button>
122
+ <button type="button">Run Stage 3 — Edit</button>
123
+ <button type="button">
124
+ <Link href="/settings/keys">Configure API Keys</Link>
125
+ </button>
126
+ </aside>
127
+ </main>;
128
+ }
129
+ export {
130
+ Home as default
131
+ };
@@ -0,0 +1,154 @@
1
+ import { readAdapterConfig } from "@/lib/adapters/env";
2
+ import Link from "next/link";
3
+
4
+ const KEYS = [
5
+ {
6
+ env: "CREATIVE_VIDEO_PIPELINE_GENERATIVE_ADAPTER",
7
+ label: "Generative Adapter",
8
+ badge: "required",
9
+ note: "growthub-pipeline (default) or byo-api-key",
10
+ },
11
+ {
12
+ env: "GROWTHUB_BRIDGE_ACCESS_TOKEN",
13
+ label: "Bridge Access Token",
14
+ badge: "required",
15
+ note: "Required for growthub-pipeline adapter. Obtain from Growthub dashboard.",
16
+ },
17
+ {
18
+ env: "GROWTHUB_BRIDGE_BASE_URL",
19
+ label: "Bridge Base URL",
20
+ badge: "required",
21
+ note: "Required for growthub-pipeline adapter. e.g. https://api.growthub.ai",
22
+ },
23
+ {
24
+ env: "ELEVENLABS_API_KEY",
25
+ label: "ElevenLabs API Key",
26
+ badge: "required",
27
+ note: "Required for Stage 3 word-level transcription via Scribe.",
28
+ },
29
+ {
30
+ env: "VIDEO_MODEL_PROVIDER",
31
+ label: "Video Model Provider",
32
+ badge: "conditional",
33
+ note: "Required for byo-api-key adapter. One of: veo | fal | runway",
34
+ },
35
+ {
36
+ env: "GOOGLE_AI_API_KEY",
37
+ label: "Google AI API Key",
38
+ badge: "conditional",
39
+ note: "Required when VIDEO_MODEL_PROVIDER=veo",
40
+ },
41
+ {
42
+ env: "FAL_API_KEY",
43
+ label: "Fal API Key",
44
+ badge: "conditional",
45
+ note: "Required when VIDEO_MODEL_PROVIDER=fal",
46
+ },
47
+ {
48
+ env: "RUNWAY_API_KEY",
49
+ label: "Runway API Key",
50
+ badge: "conditional",
51
+ note: "Required when VIDEO_MODEL_PROVIDER=runway",
52
+ },
53
+ {
54
+ env: "VIDEO_USE_HOME",
55
+ label: "VIDEO_USE_HOME",
56
+ badge: "required",
57
+ note: "Absolute path to the video-use fork clone. Required for Stage 3.",
58
+ },
59
+ {
60
+ env: "CREATIVE_VIDEO_PIPELINE_HOME",
61
+ label: "Pipeline Home",
62
+ badge: "conditional",
63
+ note: "Override workspace root. Defaults to $HOME/creative-video-pipeline",
64
+ },
65
+ ];
66
+
67
+ const SETUP_CARDS = [
68
+ {
69
+ step: "01",
70
+ label: "Copy .env.example",
71
+ code: "cp .env.example .env.local",
72
+ },
73
+ {
74
+ step: "02",
75
+ label: "Set adapter",
76
+ code: "CREATIVE_VIDEO_PIPELINE_GENERATIVE_ADAPTER=growthub-pipeline",
77
+ },
78
+ {
79
+ step: "03",
80
+ label: "Clone video-use fork",
81
+ code: "bash setup/clone-fork.sh",
82
+ },
83
+ ];
84
+
85
+ function KeysPage() {
86
+ const config = readAdapterConfig();
87
+
88
+ return (
89
+ <main className="shell">
90
+ <aside className="sidebar">
91
+ <div className="brand">
92
+ <span className="brand-mark">CV</span>
93
+ <span>Creative Video Pipeline</span>
94
+ </div>
95
+ <nav className="nav">
96
+ <Link href="/">Pipeline</Link>
97
+ <Link href="/settings/keys">API Keys</Link>
98
+ </nav>
99
+ <div className="sidebar-footer">
100
+ <span className="status-dot" />
101
+ Governed worker kit
102
+ </div>
103
+ </aside>
104
+
105
+ <section className="main">
106
+ <div className="toolbar-strip">
107
+ <div>
108
+ <strong>API Key Configuration</strong>
109
+ <p>Adapter: <code>{config.generativeAdapter}</code> &mdash; Bridge: {config.hasBridgeToken ? "set" : "missing"} &mdash; ElevenLabs: {config.hasElevenLabsKey ? "set" : "missing"}</p>
110
+ </div>
111
+ <Link href="/">← Back to Pipeline</Link>
112
+ </div>
113
+
114
+ <div className="page-heading">
115
+ <p className="eyebrow">Configuration</p>
116
+ <h1>API Keys</h1>
117
+ <p>
118
+ Set these variables in <code>.env.local</code> (local dev) or Vercel environment settings (production).
119
+ Growthub-pipeline adapter requires the Bridge token. BYOK requires a provider key. Stage 3 always requires ElevenLabs.
120
+ </p>
121
+ </div>
122
+
123
+ <div className="setup-grid">
124
+ {SETUP_CARDS.map((card) => (
125
+ <article className="setup-card" key={card.step}>
126
+ <span>{card.step}</span>
127
+ <strong>{card.label}</strong>
128
+ <code>{card.code}</code>
129
+ </article>
130
+ ))}
131
+ </div>
132
+
133
+ <div className="key-board">
134
+ {KEYS.map((key) => (
135
+ <div className="key-row" key={key.env}>
136
+ <div className="key-row-top">
137
+ <code>{key.env}</code>
138
+ <span className={`key-badge ${key.badge}`}>{key.badge}</span>
139
+ </div>
140
+ <p>{key.note}</p>
141
+ </div>
142
+ ))}
143
+ </div>
144
+
145
+ <p className="settings-note">
146
+ Never commit secrets. Use <code>.env.local</code> locally and Vercel environment variables for deployment.
147
+ The <code>.env.example</code> file in the kit root documents all variables without values.
148
+ </p>
149
+ </section>
150
+ </main>
151
+ );
152
+ }
153
+
154
+ export default KeysPage;
@@ -0,0 +1,14 @@
1
+ export function readAdapterConfig() {
2
+ return {
3
+ generativeAdapter: process.env.CREATIVE_VIDEO_PIPELINE_GENERATIVE_ADAPTER || "growthub-pipeline",
4
+ pipelineHome: process.env.CREATIVE_VIDEO_PIPELINE_HOME || null,
5
+ videoUseHome: process.env.VIDEO_USE_HOME || null,
6
+ hasElevenLabsKey: Boolean(process.env.ELEVENLABS_API_KEY),
7
+ hasBridgeToken: Boolean(process.env.GROWTHUB_BRIDGE_ACCESS_TOKEN),
8
+ bridgeBaseUrl: process.env.GROWTHUB_BRIDGE_BASE_URL || null,
9
+ videoModelProvider: process.env.VIDEO_MODEL_PROVIDER || null,
10
+ hasGoogleKey: Boolean(process.env.GOOGLE_AI_API_KEY),
11
+ hasFalKey: Boolean(process.env.FAL_API_KEY),
12
+ hasRunwayKey: Boolean(process.env.RUNWAY_API_KEY),
13
+ };
14
+ }
@@ -0,0 +1,31 @@
1
+ const ADAPTERS = {
2
+ "growthub-pipeline": {
3
+ id: "growthub-pipeline",
4
+ label: "growthub-pipeline",
5
+ description: "Hosted CMS video-generation node via growthub pipeline execute. Requires GROWTHUB_BRIDGE_ACCESS_TOKEN + authenticated session.",
6
+ requiredEnv: ["GROWTHUB_BRIDGE_ACCESS_TOKEN", "GROWTHUB_BRIDGE_BASE_URL"],
7
+ cliCommand: "growthub pipeline execute '<DynamicRegistryPipeline JSON>'",
8
+ sdkContract: "@growthub/api-contract — DynamicRegistryPipeline, ExecutionEvent, isExecutionEvent",
9
+ },
10
+ "byo-api-key": {
11
+ id: "byo-api-key",
12
+ label: "byo-api-key",
13
+ description: "Direct provider SDK calls. Set VIDEO_MODEL_PROVIDER (veo | fal | runway) + provider key.",
14
+ requiredEnv: ["VIDEO_MODEL_PROVIDER"],
15
+ cliCommand: null,
16
+ sdkContract: "provider SDK — Google AI / Fal / Runway",
17
+ },
18
+ };
19
+
20
+ export function describeGenerativeAdapter() {
21
+ const id = process.env.CREATIVE_VIDEO_PIPELINE_GENERATIVE_ADAPTER || "growthub-pipeline";
22
+ return ADAPTERS[id] ?? ADAPTERS["growthub-pipeline"];
23
+ }
24
+
25
+ export function readGenerativeConfig() {
26
+ const adapter = describeGenerativeAdapter();
27
+ return {
28
+ adapter,
29
+ missingEnv: adapter.requiredEnv.filter((k) => !process.env[k]),
30
+ };
31
+ }
@@ -0,0 +1,30 @@
1
+ export const pipelineStages = [
2
+ {
3
+ id: "brief",
4
+ step: "01",
5
+ label: "Brief",
6
+ description: "Brand-grounded creative brief sourced from brand-kit.md. Scene structure, hooks, and constraints locked before generation.",
7
+ outputPath: "output/<client>/<project>/brief/pipeline-brief.md",
8
+ },
9
+ {
10
+ id: "generate",
11
+ step: "02",
12
+ label: "Generate",
13
+ description: "Generative image/video via adapter (growthub-pipeline or byo-api-key). Normalised to GenerativeArtifact[] + manifest.json.",
14
+ outputPath: "output/<client>/<project>/generative/manifest.json",
15
+ },
16
+ {
17
+ id: "edit",
18
+ step: "03",
19
+ label: "Edit",
20
+ description: "ElevenLabs Scribe transcription → word-boundary EDL → FFmpeg render via video-use fork. Final output: final.mp4.",
21
+ outputPath: "output/<client>/<project>/final/final.mp4",
22
+ },
23
+ ];
24
+
25
+ export const stageStatus = {
26
+ PENDING: "pending",
27
+ ACTIVE: "active",
28
+ COMPLETE: "complete",
29
+ ERROR: "error",
30
+ };
@@ -0,0 +1,10 @@
1
+ const nextConfig = {
2
+ typedRoutes: false,
3
+ turbopack: {
4
+ root: process.cwd()
5
+ }
6
+ };
7
+ var stdin_default = nextConfig;
8
+ export {
9
+ stdin_default as default
10
+ };
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "growthub-creative-video-pipeline-app",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "growthub-creative-video-pipeline-app",
9
+ "version": "1.0.0",
10
+ "dependencies": {
11
+ "next": "16.2.4",
12
+ "react": "^19.0.0",
13
+ "react-dom": "^19.0.0"
14
+ }
15
+ }
16
+ }
17
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "growthub-creative-video-pipeline-app",
3
+ "version": "1.0.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "next dev",
8
+ "build": "next build",
9
+ "start": "next start",
10
+ "lint": "next lint"
11
+ },
12
+ "dependencies": {
13
+ "next": "16.2.4",
14
+ "react": "19.2.4",
15
+ "react-dom": "19.2.4"
16
+ }
17
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "framework": "nextjs",
3
+ "buildCommand": "npm run build",
4
+ "installCommand": "npm install"
5
+ }
@@ -0,0 +1,21 @@
1
+ # New Client — Onboarding
2
+
3
+ When the operator starts a new project:
4
+
5
+ 1. Create `brands/<client-slug>/brand-kit.md` from the `_template` scaffold.
6
+ 2. Fill in all YAML fields — Identity, Audience, Messaging, Brand Design, Talent, Assets, Platform.
7
+ 3. Create `brands/<client-slug>/assets/` for logo and reference images.
8
+ 4. Append a `registered` event to `.growthub-fork/trace.jsonl` with `{clientSlug}` in the detail.
9
+ 5. Run `growthub kit fork status <fork-id>` to confirm no drift was introduced.
10
+
11
+ The `_template/` brand is upstream-owned; all real client work lives under `brands/<client-slug>/`.
12
+
13
+ ## Quick scaffold
14
+
15
+ ```bash
16
+ SLUG=<client-slug>
17
+ cp brands/_template/brand-kit.md brands/${SLUG}/brand-kit.md
18
+ mkdir -p brands/${SLUG}/assets
19
+ ```
20
+
21
+ Fill every field. Use "N/A" or "TBD" if unknown — do not delete keys.