Joy Santos · Systems architecturePrototype · sample data only
YouTube production system · idea to upload

Every video, one record, moving on its own from idea to upload.

A stage-based pipeline for a multi-channel YouTube portfolio. Stages hand off on events, AI does the repetitive work inside each stage, people sign off at three gates, and one dashboard reads the same record everything else writes to.

7
Stages, one state machine
3
Human gates, by design
1
Record per video
0
Status updates by hand
01 · The pipeline

Watch one video travel the system

Select any stage to see what runs inside it, what moves it forward, and what it writes to the record.

PEOPLE STAGES SYSTEMS RECORD LEARN ONE RECORD PER VIDEO stage · owner · due · script · assets · approvals · video_id · publishAt · 7-day metrics YouTube Analytics API · nightly views · CTR · avg view duration · retention AI agent proposes the next packaging candidates land in Packaging · a person approves · no publish scope EP-214
Handoff on an eventHuman gateWrite to the recordLearning loop
Stage 1 of 7

Packaging

Runs
Moves on
Gate
Writes
Stack
The dashboard · read-only

Where every video is, right now

A view of the record, so it is never out of date and nobody updates it by hand. Sample videos below.

2
Live this week
2
Waiting on a person
0
Stuck over 48 hours

Sample · first seven days of views for the last published video, pulled nightly and written back to its record.

02 · The architecture

Five layers, each with one job

Every piece below has a public API, a webhook, or an MCP server today. Nothing depends on a screen-scraper or a person copying between tools.

L1

Record

The single source of truth.

One table of videos

DBPostgres · SupabaseMCPSupabaseALTAirtable

A stage column only the orchestrator writes, plus a stage-history table, so time in stage and bottlenecks fall out of the data instead of a status meeting.

Airtable is faster to stand up. Postgres is the scale option and gives the agent a database it can query.

L2

Orchestration

Events in, work out.

Orchestrator

RUNn8n self-hostedALTTemporal

Listens for stage events, runs the work inside a stage, retries, writes the result back. Every failure posts to Slack with the record link.

Review handoffs

HOOKFrame.ioAPIGoogle Docs

Scripts and cuts are reviewed where the team already comments. Approval fires a webhook. Nobody reports "done" in chat.

Alerts

APISlack

One channel: gate waiting on you, render failed, quota at 80%, upload confirmed. Every message carries the record link.

L3

Intelligence

AI inside stages, behind gates.

Script and metadata

APIClaude

Structured JSON only: segments, image prompts, title options, description, tags, chapters. A text blob is what breaks pipelines.

QA checks

APIWhisperAPIClaudeCLIffprobe

Transcribe the final cut, diff it against the approved script, check duration, loudness, resolution and a policy list. Failures go back with the reason attached.

The agent

MCPYouTubeMCPSupabase

Reads 30 days of performance and comments, proposes packaging with the numbers behind it. No upload scope, no publish permission.

L4

Production

The tools that make the asset.

Voice, edit, render

APIElevenLabsAPIShotstack · Creatomate

Templated channels render from a JSON timeline and call back when the file is ready. Editor-cut channels wait on the Frame.io approval instead.

Thumbnail

APICanva Connect autofill

One brand template per channel, autofilled with the title and a generated key image. Three variants land on the record for a person to pick.

Schedule and upload

APIYouTube Data

Upload private with publishAt, set thumbnail and captions, then read it back to confirm the schedule held. One named token per channel.

About 1,600 of 10,000 daily quota units per upload. More than six uploads a day needs a quota plan in week one.

L5

Surface

What the team looks at.

Dashboard

WEBNext.js · VercelALTAirtable Interface

Board by stage, time in stage, who holds what, the three gates, and the first-seven-days curve per video. Read-only by design.

Performance loop

APIYouTube Analytics

Nightly per-video metrics written to the record, so the dashboard and the agent read the same numbers.

03 · The build

The record comes first, the agent comes last

Every later piece needs somewhere to write, and the team sees progress from week two.

Weeks 1–2

Record and dashboard

Video table, stage machine, stage history, the board. Current videos migrated in once.

The team sees where everything is.

Weeks 3–4

Handoffs

Review and render webhooks, Slack alerts, the three gates. No AI yet.

The chasing stops.

Weeks 5–7

AI inside stages

Script and metadata drafts, thumbnail autofill, QA transcript diff, each behind its gate.

Repetitive work moves to the machine.

Weeks 8–9

Upload and analytics

Scheduled private uploads with readback, nightly metrics to the record.

The loop closes.

Week 10 on

The agent

Packaging candidates from performance, with reasons. Hit rate measured before scope widens.

Only once the data is trustworthy.

What I would want to understand first

Videos per week per channel, which channels are templated versus editor-cut, where reviews happen today, and how the channels sit under Google accounts. Those four answers set the render path, the quota plan and the OAuth layout.

Guardrails from day one

The agent has no publish scope. Every upload is private, then scheduled, then read back. Every automation retries and reports failures with the record link. No stage moves without an event.