@growthub/cli 0.8.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/assets/worker-kits/growthub-creative-video-pipeline-v1/.env.example +28 -0
  2. package/assets/worker-kits/growthub-creative-video-pipeline-v1/QUICKSTART.md +118 -0
  3. package/assets/worker-kits/growthub-creative-video-pipeline-v1/SKILL.md +124 -0
  4. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/.env.example +20 -0
  5. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/README.md +33 -0
  6. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/app/api/pipeline/route.js +27 -0
  7. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/app/globals.css +203 -0
  8. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/app/layout.jsx +14 -0
  9. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/app/page.jsx +131 -0
  10. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/app/settings/keys/page.jsx +154 -0
  11. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/lib/adapters/env.js +14 -0
  12. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/lib/adapters/generative/index.js +31 -0
  13. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/lib/domain/pipeline.js +30 -0
  14. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/next.config.js +10 -0
  15. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/package-lock.json +17 -0
  16. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/package.json +17 -0
  17. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/postcss.config.mjs +3 -0
  18. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/vercel.json +5 -0
  19. package/assets/worker-kits/growthub-creative-video-pipeline-v1/brands/NEW-CLIENT.md +21 -0
  20. package/assets/worker-kits/growthub-creative-video-pipeline-v1/brands/_template/brand-kit.md +123 -0
  21. package/assets/worker-kits/growthub-creative-video-pipeline-v1/brands/growthub/brand-kit.md +123 -0
  22. package/assets/worker-kits/growthub-creative-video-pipeline-v1/bundles/growthub-creative-video-pipeline-v1.json +87 -0
  23. package/assets/worker-kits/growthub-creative-video-pipeline-v1/docs/adapter-contracts.md +73 -0
  24. package/assets/worker-kits/growthub-creative-video-pipeline-v1/docs/governed-workspace-primitives.md +50 -0
  25. package/assets/worker-kits/growthub-creative-video-pipeline-v1/docs/pipeline-architecture.md +61 -0
  26. package/assets/worker-kits/growthub-creative-video-pipeline-v1/docs/starter-kit-overview.md +33 -0
  27. package/assets/worker-kits/growthub-creative-video-pipeline-v1/docs/vercel-deployment.md +42 -0
  28. package/assets/worker-kits/growthub-creative-video-pipeline-v1/examples/pipeline-brief-sample.md +56 -0
  29. package/assets/worker-kits/growthub-creative-video-pipeline-v1/growthub-meta/README.md +9 -0
  30. package/assets/worker-kits/growthub-creative-video-pipeline-v1/growthub-meta/kit-standard.md +24 -0
  31. package/assets/worker-kits/growthub-creative-video-pipeline-v1/helpers/README.md +9 -0
  32. package/assets/worker-kits/growthub-creative-video-pipeline-v1/helpers/check-generative-adapter.sh +41 -0
  33. package/assets/worker-kits/growthub-creative-video-pipeline-v1/helpers/check-pipeline-health.sh +154 -0
  34. package/assets/worker-kits/growthub-creative-video-pipeline-v1/helpers/run-pipeline.sh +30 -0
  35. package/assets/worker-kits/growthub-creative-video-pipeline-v1/kit.json +154 -0
  36. package/assets/worker-kits/growthub-creative-video-pipeline-v1/output/README.md +23 -0
  37. package/assets/worker-kits/growthub-creative-video-pipeline-v1/output-standards.md +63 -0
  38. package/assets/worker-kits/growthub-creative-video-pipeline-v1/pipeline.manifest.json +83 -0
  39. package/assets/worker-kits/growthub-creative-video-pipeline-v1/runtime-assumptions.md +61 -0
  40. package/assets/worker-kits/growthub-creative-video-pipeline-v1/setup/check-deps.sh +63 -0
  41. package/assets/worker-kits/growthub-creative-video-pipeline-v1/setup/clone-fork.sh +18 -0
  42. package/assets/worker-kits/growthub-creative-video-pipeline-v1/setup/install-skill.sh +10 -0
  43. package/assets/worker-kits/growthub-creative-video-pipeline-v1/setup/verify-env.mjs +50 -0
  44. package/assets/worker-kits/growthub-creative-video-pipeline-v1/skills/README.md +11 -0
  45. package/assets/worker-kits/growthub-creative-video-pipeline-v1/skills/brief-generation/SKILL.md +42 -0
  46. package/assets/worker-kits/growthub-creative-video-pipeline-v1/skills/generative-execution/SKILL.md +86 -0
  47. package/assets/worker-kits/growthub-creative-video-pipeline-v1/skills/video-edit/SKILL.md +41 -0
  48. package/assets/worker-kits/growthub-creative-video-pipeline-v1/skills.md +302 -0
  49. package/assets/worker-kits/growthub-creative-video-pipeline-v1/studio/index.html +12 -0
  50. package/assets/worker-kits/growthub-creative-video-pipeline-v1/studio/package-lock.json +20 -0
  51. package/assets/worker-kits/growthub-creative-video-pipeline-v1/studio/package.json +20 -0
  52. package/assets/worker-kits/growthub-creative-video-pipeline-v1/studio/serve.mjs +41 -0
  53. package/assets/worker-kits/growthub-creative-video-pipeline-v1/studio/src/App.jsx +210 -0
  54. package/assets/worker-kits/growthub-creative-video-pipeline-v1/studio/src/app.css +194 -0
  55. package/assets/worker-kits/growthub-creative-video-pipeline-v1/studio/src/main.jsx +10 -0
  56. package/assets/worker-kits/growthub-creative-video-pipeline-v1/studio/vite.config.js +8 -0
  57. package/assets/worker-kits/growthub-creative-video-pipeline-v1/templates/edit-plan.md +66 -0
  58. package/assets/worker-kits/growthub-creative-video-pipeline-v1/templates/generative-plan.md +83 -0
  59. package/assets/worker-kits/growthub-creative-video-pipeline-v1/templates/pipeline-brief.md +129 -0
  60. package/assets/worker-kits/growthub-creative-video-pipeline-v1/templates/project.md +68 -0
  61. package/assets/worker-kits/growthub-creative-video-pipeline-v1/templates/self-eval.md +67 -0
  62. package/assets/worker-kits/growthub-creative-video-pipeline-v1/validation/e2e-reference.md +166 -0
  63. package/assets/worker-kits/growthub-creative-video-pipeline-v1/validation-checklist.md +56 -0
  64. package/assets/worker-kits/growthub-creative-video-pipeline-v1/workers/creative-video-pipeline-operator/CLAUDE.md +109 -0
  65. package/assets/worker-kits/growthub-creative-video-pipeline-v1/workspace.dependencies.json +26 -0
  66. package/dist/index.js +3032 -1676
  67. package/package.json +2 -2
@@ -0,0 +1,28 @@
1
+ # Growthub Creative Video Pipeline — governed workspace env template
2
+ #
3
+ # Keep real provider secrets in your local .env.local or deployment provider.
4
+
5
+ # Local workspace placement
6
+ CREATIVE_VIDEO_PIPELINE_HOME=
7
+ CREATIVE_STRATEGIST_HOME=
8
+ VIDEO_USE_HOME=
9
+
10
+ # Local studio shell
11
+ CREATIVE_VIDEO_PIPELINE_STUDIO_PORT=5180
12
+
13
+ # Stage 2 adapter
14
+ # Supported values: growthub-pipeline, byo-api-key
15
+ CREATIVE_VIDEO_PIPELINE_GENERATIVE_ADAPTER=growthub-pipeline
16
+ GROWTHUB_BRIDGE_BASE_URL=
17
+ GROWTHUB_BRIDGE_ACCESS_TOKEN=
18
+
19
+ # BYOK adapter values, only used when CREATIVE_VIDEO_PIPELINE_GENERATIVE_ADAPTER=byo-api-key
20
+ # Supported values: veo, fal, runway
21
+ VIDEO_MODEL_PROVIDER=
22
+ GOOGLE_AI_API_KEY=
23
+ FAL_KEY=
24
+ RUNWAY_API_KEY=
25
+
26
+ # Stage 3 video-use fork
27
+ ELEVENLABS_API_KEY=
28
+
@@ -0,0 +1,118 @@
1
+ # Creative Video Pipeline — Quickstart
2
+
3
+ This kit is a governed Growthub workspace with three runtime surfaces:
4
+
5
+ - `studio/` — local-first Vite operator shell.
6
+ - `apps/creative-video-pipeline/` — Vercel-ready pipeline dashboard and API key settings.
7
+ - Three-stage pipeline: Brief → Generate → Edit.
8
+
9
+ ## 0. Discover, export, and register
10
+
11
+ ```bash
12
+ growthub discover
13
+ growthub kit list --family studio
14
+ growthub kit download growthub-creative-video-pipeline-v1 --out ./creative-video-pipeline --yes
15
+ growthub kit fork register ./creative-video-pipeline
16
+ growthub kit fork status <fork-id>
17
+ ```
18
+
19
+ Natural-language prompt for an agent after export:
20
+
21
+ ```text
22
+ Read SKILL.md, skills.md, QUICKSTART.md, docs/adapter-contracts.md, and
23
+ workers/creative-video-pipeline-operator/CLAUDE.md. Run setup checks, verify
24
+ the generative adapter, and confirm the video-use fork path before starting work.
25
+ ```
26
+
27
+ ## 1. Verify the governed workspace
28
+
29
+ ```bash
30
+ cp .env.example .env
31
+ bash setup/check-deps.sh
32
+ node setup/verify-env.mjs
33
+ ```
34
+
35
+ Set adapter env in `.env`. Defaults are documented in `.env.example`.
36
+
37
+ ## 2. Clone the video-use fork (Stage 3 dependency)
38
+
39
+ ```bash
40
+ bash setup/clone-fork.sh
41
+ bash setup/install-skill.sh
42
+ ```
43
+
44
+ This clones `browser-use/video-use` into `${VIDEO_USE_HOME:-$HOME/video-use}` and installs it as a Claude Code skill.
45
+
46
+ ## 3. Configure the generative adapter
47
+
48
+ ### Option A — Growthub pipeline (primary, recommended)
49
+
50
+ ```bash
51
+ growthub auth login
52
+ growthub auth whoami
53
+ ```
54
+
55
+ In `.env`:
56
+ ```
57
+ CREATIVE_VIDEO_PIPELINE_GENERATIVE_ADAPTER=growthub-pipeline
58
+ GROWTHUB_BRIDGE_ACCESS_TOKEN=<token from growthub auth>
59
+ GROWTHUB_BRIDGE_BASE_URL=<growthub hosted base url>
60
+ ELEVENLABS_API_KEY=<your key>
61
+ ```
62
+
63
+ ### Option B — BYOK
64
+
65
+ In `.env`:
66
+ ```
67
+ CREATIVE_VIDEO_PIPELINE_GENERATIVE_ADAPTER=byo-api-key
68
+ VIDEO_MODEL_PROVIDER=veo # veo | fal | runway
69
+ GOOGLE_AI_API_KEY=<your key> # if VIDEO_MODEL_PROVIDER=veo
70
+ ELEVENLABS_API_KEY=<your key>
71
+ ```
72
+
73
+ Both options normalize to the same `GenerativeArtifact[]` object shape.
74
+
75
+ ## 4. Run the local Vite shell
76
+
77
+ ```bash
78
+ cd studio
79
+ npm install
80
+ npm run dev
81
+ ```
82
+
83
+ Open `http://localhost:5180`. The shell shows the three-stage pipeline status, output viewer, and settings panel.
84
+
85
+ ## 5. Run the Vercel app locally
86
+
87
+ ```bash
88
+ cd apps/creative-video-pipeline
89
+ npm install
90
+ npm run dev
91
+ ```
92
+
93
+ Open `http://localhost:3000`. Navigate to `/settings/keys` to configure the generative adapter and API keys.
94
+
95
+ ## 6. Run the pipeline
96
+
97
+ Follow `skills.md` for the complete three-stage runbook:
98
+
99
+ ```
100
+ Stage 1 — Brief brand-kit.md → scene structure → hooks → pipeline-brief.md
101
+ Stage 2 — Generate growthub pipeline execute OR BYOK → generative/manifest.json
102
+ Stage 3 — Edit video-use fork → EDL → FFmpeg → final/final.mp4
103
+ ```
104
+
105
+ ## 7. Deploy to Vercel
106
+
107
+ Use `apps/creative-video-pipeline` as the Vercel project root.
108
+
109
+ ```bash
110
+ cd apps/creative-video-pipeline
111
+ npm run build
112
+ ```
113
+
114
+ Connect to Vercel with root directory `apps/creative-video-pipeline`. Set adapter env per `docs/adapter-contracts.md` and `docs/vercel-deployment.md`.
115
+
116
+ ## 8. Governed operation
117
+
118
+ Read `SKILL.md`, `skills.md`, and `workers/creative-video-pipeline-operator/CLAUDE.md` before material changes. Record every stage completion to `.growthub-fork/project.md` and `.growthub-fork/trace.jsonl`.
@@ -0,0 +1,124 @@
1
+ ---
2
+ name: growthub-creative-video-pipeline-v1
3
+ description: "Chainable worker kit that composes a creative brief, generative image/video via the growthub pipeline or BYOK, and video editing via the video-use fork into a single governed pipeline. Use when the user says: \"creative video pipeline\", \"brief to video\", \"generative video pipeline\", \"fork growthub-creative-video-pipeline-v1\"."
4
+ triggers:
5
+ - creative video pipeline
6
+ - brief to video
7
+ - generative video pipeline
8
+ - video content pipeline
9
+ - fork growthub-creative-video-pipeline-v1
10
+ progressiveDisclosure: true
11
+ sessionMemory:
12
+ path: .growthub-fork/project.md
13
+ selfEval:
14
+ criteria:
15
+ - Stage 1 brief is grounded in brand-kit.md — scene structure, hooks, and guardrails sourced from file, not memory.
16
+ - Stage 2 generative execution routes through growthub pipeline execute (primary) or explicit BYOK adapter — no ad-hoc API calls outside the adapter contract.
17
+ - Stage 3 video edit delegates to VIDEO_USE_HOME fork — edit-plan.md is the handoff artifact, final.mp4 lands at output/<client>/<project>/final/.
18
+ - .growthub-fork/project.md is appended to at each stage boundary and self-eval outcome.
19
+ - .growthub-fork/trace.jsonl receives a typed event for each material change.
20
+ maxRetries: 3
21
+ traceTo: .growthub-fork/trace.jsonl
22
+ helpers:
23
+ - path: helpers/run-pipeline.sh
24
+ description: Auth pre-flight + growthub pipeline execute passthrough
25
+ - path: helpers/check-generative-adapter.sh
26
+ description: Print current adapter mode and which provider keys are set
27
+ - path: helpers/check-pipeline-health.sh
28
+ description: Composable end-to-end readiness check (env + adapter + sub-skills + Stage 3 deps); supports --json
29
+ subSkills:
30
+ - name: brief-generation
31
+ path: skills/brief-generation/SKILL.md
32
+ - name: generative-execution
33
+ path: skills/generative-execution/SKILL.md
34
+ - name: video-edit
35
+ path: skills/video-edit/SKILL.md
36
+ mcpTools: []
37
+ ---
38
+
39
+ # Creative Video Pipeline — Governed Workspace
40
+
41
+ Discovery entry and routing menu for `growthub-creative-video-pipeline-v1`. Family: `studio`. Agent contract: `workers/creative-video-pipeline-operator/CLAUDE.md`.
42
+
43
+ ## When to use this skill
44
+
45
+ When the user's intent matches any trigger above, or when an agent is dropped into a fork whose `.growthub-fork/fork.json` declares `kitId: "growthub-creative-video-pipeline-v1"`.
46
+
47
+ ## Decision tree
48
+
49
+ ```
50
+ Fork exists (.growthub-fork/fork.json)?
51
+ ├── No → growthub kit download growthub-creative-video-pipeline-v1 --out <path>
52
+ │ growthub kit fork register <path>
53
+
54
+ └── Yes → read in this order:
55
+ 1. .growthub-fork/project.md — session memory (primitive #3)
56
+ 2. SKILL.md (this file) — routing menu (primitive #1)
57
+ 3. skills.md — operator runbook
58
+ 4. workers/creative-video-pipeline-operator/CLAUDE.md — agent contract
59
+ 5. QUICKSTART.md — first-run steps
60
+ 6. runtime-assumptions.md — host requirements
61
+ 7. .growthub-fork/policy.json — what you may touch
62
+ 8. .growthub-fork/trace.jsonl (tail 20) — recent machine history
63
+ ```
64
+
65
+ ## Agent operating loop (deterministic, no Markdown inference)
66
+
67
+ For agents (Claude Code, Cursor, Codex), the canonical readiness +
68
+ inspection loop uses the CLI's typed JSON outputs — read these BEFORE
69
+ falling back to Markdown:
70
+
71
+ ```bash
72
+ growthub kit health <fork-id-or-path> --json # KitHealthReport
73
+ growthub kit pipeline inspect <fork-id-or-path> --json # PipelineKitManifest
74
+ growthub kit dependencies inspect <fork-id-or-path> --json # WorkspaceDependencyManifest
75
+ growthub kit inspect <fork-id-or-path> --json # WorkerKitManifest (kit.json)
76
+ ```
77
+
78
+ Each command accepts a kit id, filesystem path, OR a registered fork
79
+ id. Both `--json` (agent) and interactive sub-branch (human) surfaces
80
+ share the same primitives.
81
+
82
+ Markdown explains the contract; the SDK + CLI are the source of truth.
83
+
84
+ ## Three-stage pipeline
85
+
86
+ ```
87
+ Stage 1 — Brief brand-kit.md → hooks → scene structure
88
+ output: output/<client>/<project>/brief/pipeline-brief.md
89
+
90
+ Stage 2 — Generate growthub pipeline execute (primary)
91
+ OR BYOK provider adapter (secondary)
92
+ output: output/<client>/<project>/generative/
93
+
94
+ Stage 3 — Edit video-use fork (VIDEO_USE_HOME)
95
+ ElevenLabs Scribe → EDL → FFmpeg
96
+ output: output/<client>/<project>/final/final.mp4
97
+ ```
98
+
99
+ ## Activation
100
+
101
+ Primary: `growthub pipeline execute` with the `video-generation` CMS node (veo-3.1-generate-001).
102
+ Secondary: BYOK path via `CREATIVE_VIDEO_PIPELINE_GENERATIVE_ADAPTER=byo-api-key`.
103
+
104
+ Both normalize to the same `GenerativeArtifact[]` object. The UI shell renders whichever path produced the artifacts.
105
+
106
+ ## The six primitives (same shape across every Growthub worker kit)
107
+
108
+ 1. **`SKILL.md`** — this file.
109
+ 2. **Symlinked pointer** — repo-root `AGENTS.md` is authoritative.
110
+ 3. **`.growthub-fork/project.md`** — session memory, seeded at init from `templates/project.md`.
111
+ 4. **Self-evaluation** — generate → apply → evaluate → record; retry up to `maxRetries` (3); mirrors the Fork Sync Agent loop.
112
+ 5. **`skills/`** — sub-skill lanes: `brief-generation`, `generative-execution`, `video-edit`.
113
+ 6. **`helpers/`** — `run-pipeline.sh`, `check-generative-adapter.sh`, `check-pipeline-health.sh`.
114
+
115
+ ## Related files
116
+
117
+ - `skills.md` — full 3-stage operator runbook
118
+ - `QUICKSTART.md` — first-run steps
119
+ - `runtime-assumptions.md` — host requirements (FFmpeg, ElevenLabs, CLI, video-use fork)
120
+ - `output-standards.md` — output dir structure
121
+ - `docs/adapter-contracts.md` — generative adapter contracts
122
+ - `docs/pipeline-architecture.md` — chain composition detail
123
+ - `templates/project.md` — session-memory seed
124
+ - `templates/self-eval.md` — self-evaluation pattern
@@ -0,0 +1,20 @@
1
+ # Creative Video Pipeline app — deployment env template
2
+
3
+ # Supported values: growthub-pipeline, byo-api-key
4
+ CREATIVE_VIDEO_PIPELINE_GENERATIVE_ADAPTER=growthub-pipeline
5
+
6
+ # growthub-pipeline adapter
7
+ GROWTHUB_BRIDGE_BASE_URL=
8
+ GROWTHUB_BRIDGE_ACCESS_TOKEN=
9
+
10
+ # byo-api-key adapter
11
+ # Supported values: veo, fal, runway
12
+ VIDEO_MODEL_PROVIDER=
13
+ GOOGLE_AI_API_KEY=
14
+ FAL_KEY=
15
+ RUNWAY_API_KEY=
16
+
17
+ # Stage 3 edit pipeline handoff
18
+ VIDEO_USE_HOME=
19
+ ELEVENLABS_API_KEY=
20
+
@@ -0,0 +1,33 @@
1
+ # creative-video-pipeline — Next.js App
2
+
3
+ Next.js 16 + React 19 app for the Growthub Creative Video Pipeline worker kit. Vercel-deployable.
4
+
5
+ ## Dev
6
+
7
+ ```bash
8
+ npm install
9
+ npm run dev
10
+ ```
11
+
12
+ ## Build
13
+
14
+ ```bash
15
+ npm run build
16
+ npm start
17
+ ```
18
+
19
+ ## Deploy
20
+
21
+ ```bash
22
+ vercel --prod
23
+ ```
24
+
25
+ See `docs/vercel-deployment.md` for environment variable configuration.
26
+
27
+ ## Routes
28
+
29
+ | Route | Purpose |
30
+ |-------|---------|
31
+ | `/` | Pipeline dashboard — stage status, adapter state |
32
+ | `/settings/keys` | API key configuration reference |
33
+ | `/api/pipeline` | GET — returns live adapter config + pipeline stage state |
@@ -0,0 +1,27 @@
1
+ import { NextResponse } from "next/server";
2
+ import { readAdapterConfig } from "@/lib/adapters/env";
3
+ import { describeGenerativeAdapter } from "@/lib/adapters/generative/index";
4
+ import { pipelineStages, stageStatus } from "@/lib/domain/pipeline";
5
+
6
+ export const dynamic = "force-dynamic";
7
+
8
+ export function GET() {
9
+ const config = readAdapterConfig();
10
+ const generative = describeGenerativeAdapter();
11
+
12
+ return NextResponse.json({
13
+ kit: "growthub-creative-video-pipeline-v1",
14
+ adapter: generative,
15
+ config: {
16
+ generativeAdapter: config.generativeAdapter,
17
+ videoUseHome: config.videoUseHome,
18
+ hasElevenLabsKey: config.hasElevenLabsKey,
19
+ hasBridgeToken: config.hasBridgeToken,
20
+ videoModelProvider: config.videoModelProvider,
21
+ },
22
+ stages: pipelineStages.map((s) => ({
23
+ ...s,
24
+ status: stageStatus.PENDING,
25
+ })),
26
+ });
27
+ }
@@ -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
+ };