Skip to content
D · 07 · TECHNICAL WRITE-UP

Prism.

Agentic creative-agency tooling for YouTube.

A single Client Service Director running more of the YouTube creative workflow that normally takes several people. Static brand assets in, platform-ready 16:9 + 9:16 video variants out, compliance-judged and campaign-ready. Built to compress the part of the agency workflow that doesn't need three meetings.

  • REPO github.com/rutgertuit/prism →
  • RUNTIME 10 Cloud Run services + Cloud Composer · europe-west4
  • FOCUS YouTube-first · Benelux mid-market MVP
  • STATUS MVP closed 2026-05-01 · published for portfolio transparency
01 · FOUR-SECTION INFORMATION ARCHITECTURE

Setup · Create · Recut · Distribute.

The cockpit splits the workflow into four explicit sections — the operator always knows which stage of the process they're in, and the safety contracts attach to the sections, not to individual buttons.

SectionWhat it does
01 · SetupOnboarding wizard (per-client OAuth), Brand Kit extraction from PDFs or website URLs, client doc linkage. Skip-OAuth path lets a client onboard without Google linkage.
02 · CreateBrief form with cost-cap + budget tier. Generate service renders 16:9 variants via Veo 3 + Imagen 3 with cost pre-projection before any provider call.
03 · RecutReframe service produces 9:16 Shorts via vigenair + an FFmpeg worker. Dub service handles translation (Ariel) + Chirp 3 HD voice (no voice cloning in MVP).
04 · DistributeJudge service runs compliance scoring (Gemini-as-judge, binary pass/fail). Ads service pushes the campaign — always PAUSED — and uploads to YouTube as UNLISTED. Insights service rolls VTR signals + creative DNA + prompt hints back into the Signal Wall.
02 · THE FLEET

Nine services + shared foundations.

Each service is its own Cloud Run revision with a strict/healthz probe. Every service registers through the same shared contract; every action is audit- logged through the same wrap(). One platform shape across nine surfaces — not nine accidental architectures.

ServiceDirectoryJob
Shared foundationsservices/_shared/Audit logging via wrap(), shared JobState contract, register_service(), strict /healthz probe enforced on every revision.
Brand Kitservices/brand_kit/Gemini-based brand-asset extraction from PDFs OR website URL distillation (v1.2).
Onboarding Wizardservices/onboarding_wizard/Per-client OAuth + prechecks + linked client doc. Skip-OAuth path supported.
Generateservices/generate/Veo 3 + Imagen 3 variant rendering (16:9). Cost-cap pre-projected before any provider call.
Reframeservices/reframe/9:16 Smart-Reframe via vigenair + the FFmpeg worker.
FFmpeg workerservices/ffmpeg_worker/Internal Cloud Run worker — pixel ops + keyframe extraction. Invoker-locked to Reframe + Judge.
Dubservices/dub/Ariel-powered translation + Chirp 3 HD dubbing. No voice cloning in MVP.
Judgeservices/judge/Compliance scoring (Gemini-as-judge) — binary pass/fail; never a third state.
Adsservices/ads/Google Ads campaign push (always PAUSED) + UNLISTED YouTube upload.
Insightsservices/insights/VTR signals, creative DNA, prompt hint generation. Cost rollup + 7d-trailing VTR mart + brand-colour segmentation.
03 · NOTABLE DESIGN CHOICES

The safety contracts.

Most of these aren't features — they're decisions that make the tool trustable on a deadline day. The platform is the contract; the cockpit just enforces it on the operator side.

Strict /healthz probe on every revision
Every Cloud Run service registers itself through a shared contract and ships a strict /healthz. A revision that doesn't pass doesn't get promoted. Healthchecks are infrastructure, not lore.
Cost-cap pre-projected before any provider call
Generate doesn't call Veo or Imagen until the projected cost has been computed against the budget tier in the Brief. The cost gate is the contract, not a warning after the fact.
Always PAUSED, always UNLISTED
Ads pushes campaigns in PAUSED state. YouTube uploads default to UNLISTED. Two safety defaults that make the difference between a tool you trust and a tool you watch closely. The Launch confirm modal in the cockpit makes the operator acknowledge the PAUSED state explicitly before push.
Binary pass/fail compliance — never a third state
Judge returns pass or fail. No 'maybe', no yellow/amber on compliance surfaces. The review gallery's design language enforces this — there is no third colour. Compliance ambiguity is the bug; remove the bug by removing the third state.
Keyboard-first review
The Review gallery uses j/k to navigate, a to approve, r to reject. Hover preview, structured toast errors. The Client Service Director is meant to clear a queue, not click through it.
Type-the-name safety modal on destructive actions
Revoking a client soft-deletes; restoring brings it back. But the revoke modal requires typing the client name. The pattern is borrowed from GitHub repo deletion — the friction is the feature.
Audit-log everything via wrap()
Every service action is wrapped through a shared audit-logging helper. The platform has a single audit shape, not 10 different per-service ones. Forensics work because the log shape is uniform.
Industrial, restrained aesthetic
Industrial restraint, no decorative gradients, no compliance yellow. The interface reads as something a working CSD trusts at 18:30 on a deadline day. It stays quiet on purpose.
04 · STACK

What runs underneath.

LayerDetail
Web cockpitNext.js 14. Surfaces: Flight Deck (dashboard), Brand Kit, Brief, Review gallery, Launch confirm, Insights Signal Wall, Client Settings.
Services9 FastAPI services + _shared foundations. Each ships a strict /healthz; each registers via the shared contract.
GenerativeVeo 3 + Imagen 3 (Generate). Gemini for brand-kit extraction + compliance judging. Ariel + Chirp 3 HD (Dub). No voice cloning in MVP.
Worker pipelinesvigenair + the FFmpeg worker for 9:16 Smart-Reframe. Invoker-locked so only Reframe + Judge can call the worker.
IngestionComposer DAGs + dbt mart (fact_creative_performance). Synthetic backfill loader for environments without live ad data.
InfraTerraform for the iamagency GCP project, europe-west4. Single-region MVP.
Vendored OSSariel, vigenair, dreamboard, copycat — pulled in as forks/ submodules and built into the Reframe + Dub paths.
Testing943 frontend tests + 146 backend tests passing on MVP close. Per-service test suites run through Makefile targets.
05 · DELIVERY MODEL

Built with a multi-agent setup.

Prism is also a working example of how the project was built. Specialist agents work in separate git worktrees, a review agent checks every PR, and I gate the merges at module boundaries. Locked contracts live in FOR_AGENTS.md: what the audit shape must be, what the strict /healthz contract is, what the cost- cap projection rule says. The same agent discipline that ships the four sections of the cockpit ships the codebase.

WHY THIS EXISTS

A YouTube-first creative workflow normally takes several people — director, editor, dubber, compliance, ads ops. A lot of that work is mechanical and shouldn't require a meeting. Prism absorbs the mechanical layer so the Client Service Director keeps the creative call — what we're saying, to whom, with what cost cap — and the platform handles the rest. It runs on the same principle that holds Luminary together — the machinery is stable, the human's call is the only variable that moves — pointed this time at the busiest day in an account director's week.

Read the source on GitHub →