<aside> 🏭
THE CONTENT CREATION ENGINE turns one brand brief into researched, scripted, production-ready short-form content for TikTok, Instagram Reels, YouTube Shorts, LinkedIn and Facebook Reels — automatically.
Claude does the thinking (research synthesis, ideation, scriptwriting, quality control, performance analysis). n8n does the orchestration (branching, approvals, retries, storage, scheduling). The MVP path needs nothing beyond Claude + Google Sheets + Slack — every other integration (research APIs, stock assets, automated video rendering, voiceover, publishing) is optional and gated, never faked.
</aside>
<aside> 📦
Two importable n8n workflows plus nine supporting files — attached directly below and in the Full file set section at the bottom of this page:
README.md, setup-checklist.md, prompts.md, data-schemas.md, node-map.mdEverything below is the readable, reference version of that same system — the architecture, every Claude prompt, the setup checklist and the schemas — so you can understand and edit the system without opening the JSON.
</aside>
flowchart TD
A["5 Triggers: Manual / Schedule / Form / Webhook / Sheets"] --> B["Normalize + Config + Validate Brief"]
B -->|invalid| B1["Notify missing fields + Stop"]
B -->|valid| C["Website Analysis (Claude: Brand Intelligence)"]
C --> D["Market Research (Perplexity/Tavily/none)"]
D --> E["Competitor Analysis Loop (Claude)"]
E --> F["Claude: Content Pillars"]
F --> G["Claude: Content Ideas (3x volume)"]
G --> H["Dedupe + Ideas Database"]
H --> I["Claude: Score and Rank Ideas"]
I --> J["Per idea: Claude Hooks -> Script -> CTA -> Refine"]
J -->|score fails, under cap| J
J -->|score passes| K["Slack Send-and-Wait: Script Approval"]
K -->|rejected/changes, under cap| J
K -->|approved| L["Approved Scripts Database"]
L --> M["Claude: Visual Direction + Shot List"]
M --> N["Asset Retrieval (stock API or manual list)"]
N --> O{"Production Mode"}
O -->|Mode A default| P["Production Pack (no video API needed)"]
O -->|Mode B| Q["Automated Render (Creatomate/Shotstack)"]
P --> R["Claude: Platform Captions"]
Q --> R
R --> S["Voiceover (optional) + Claude: Automated QA"]
S --> T["Claude: Performance Prediction + A/B Variations"]
T --> U["Deterministic QC Checklist"]
U -->|fail| J
U -->|pass| V["Slack Send-and-Wait: Final Publishing Approval"]
V -->|rejected/revise| J
V -->|approved| W["Export Formats + Filenames"]
W --> X["Storage (Drive or note)"]
X --> Y{"Publishing Enabled?"}
Y -->|no, default| Z1["Ready for Manual Publish"]
Y -->|yes| Z2["Publish via Provider"]
Z1 --> AA["Publishing Log"]
Z2 --> AA
AA -.scheduled.-> BB["Performance Tracking (24h/72h/7d/14d/30d)"]
BB --> CC["Claude: Learning Loop"]
CC -.feeds next cycle.-> G
| Module | Config variable | Options | Required? | Fallback if unconfigured |
|---|---|---|---|---|
| Claude reasoning layer | CLAUDE_MODEL | Any Claude model | Required | N/A — core dependency |
| Human approval | SLACK_APPROVAL_CHANNEL | Slack (swap for Email/Teams) | Required | N/A — core dependency |
| Market research | RESEARCH_PROVIDER | perplexity / tavily / none | Optional | Empty research, Claude told not to invent sources |
| Asset retrieval | ASSET_PROVIDER | pexels / pixabay / unsplash / none | Optional | Organised manual asset request list |
| Video rendering | VIDEO_RENDER_PROVIDER | creatomate / shotstack / none | Optional | Production Pack mode (no video API) |
| Voiceover | VOICEOVER_PROVIDER | elevenlabs / none | Optional | Use brand/human voice, no auto-voiceover |
| Storage | STORAGE_PROVIDER | google_drive / none | Optional | "Save metadata locally" note |
| Publishing | PUBLISHING_ENABLED | true / false | Optional, off by default | Marked "ready for manual publish" |