Skip to main content

Content Studio — how this works

In the app: /content/studio

How it works

Generating variants fires a signed intent to n8n's content-generate workflow (beast N7), which calls Claude directly and delivers drafted hook+body copy back as ContentPiece rows tied to the brief — this page never calls Claude itself. "Generate video" likewise fires content-video (beast N8) to the self-hosted video-render service; a rendered clip's R2 key lands on that SAME ContentPiece, never a new row. Approve/Veto here are the EXACT SAME functions the Content Deck's own buttons call (src/lib/content/publishing.ts) — there is only one publish/veto mechanism in this app, reused, not duplicated.

Data source

src/lib/content/contentBriefsRepo.ts (briefs) + src/lib/content/contentRepo.ts (their generated ContentPiece variants), written by n8n's callbacks via the n8n-content-generate-result / n8n-content-video-result webhook routes.

Troubleshooting

A brief stuck with zero variants? Check /tools for n8n's live/mocked status — under CALLHQ_MOCK_N8N (the default until a founder wires a live n8n), both intents are logged and mocked, so no real Claude/render call ever happens and no callback ever arrives. Approve/Veto only apply to a piece not yet published/vetoed — see the Content Deck's own InfoDock for the full publish-gate rules (T0/T1/T2 tiers).

Vendors: n8n — check Tools for live/mocked status.

Who can see this: admin, content