Work / Marketing & Content / 15
Content Repurposing Line with a Human Approval Gate
Agencies · Coaching · Media · SaaS · Personal brands
Built — counted from the workflow JSON in the repository; not yet run against live accounts
The problem
You record one good thing a week. The clips, posts, captions and newsletter never get made, because each one is 20 minutes of unrewarding work.
The tools that promise to fix this auto-post — which is how a brand account ends up with something nobody wanted on it.
How it runs
-
Transcribe
01 / 07 Workflow 1 of 5 · Ingest & Transcribe · 20 nodes
A video, a podcast or a long post comes in and becomes one timestamped transcript.
-
Find the moments
02 / 07 Workflow 2 of 5 · Segment & Rank · 11 nodes
Windows are cut from the real transcript; the model only picks window IDs, and anything it cannot anchor is dropped.
-
Keep the best five
03 / 07 Workflow 2 of 5 · Segment & Rank · 11 nodes
At most five moments per source, because a review queue of 40 is not reviewed — it is ignored.
-
Draft against the rules
04 / 07 Workflow 3 of 5 · Draft & Rules Check · 13 nodes
Copy for each platform is drafted from the brand rules file, then checked in code for banned words and claims that need review.
banned word → blocked, never queued
-
A person approves
05 / 07 Workflow 4 of 5 · Approval Queue · 9 nodes
Every draft waits in Slack with its full copy showing; nothing publishes without a tap.
-
The only way out
06 / 07 Workflow 5 of 5 · Approve / Reject Callback · 17 nodes
A verified signature, a status re-read from the sheet, the approved branch: the one path to publishing.
-
Learn from a no
07 / 07 Workflow 5 of 5 · Approve / Reject Callback · 17 nodes
A rejection note is meant to be appended to the brand rules, so the same correction applies from the next run.
The five workflows, as built
Every node with its icon, as on the n8n canvasstarts a runa model or a parser, wired into the node above itHover a node for its name and type
-
01Ingest & Transcribe
20 nodes · 24 connections · 5 notes
form or manual in, transcribe, one canonical record
-
02Segment & Rank
11 nodes · 10 connections · 3 notes
windows cut, the model picks IDs, anchored, top five
-
03Draft & Rules Check
13 nodes · 12 connections · 3 notes
the brand rules in, drafts out, a check in code
-
04Approval Queue
9 nodes · 7 connections · 2 notes
the review card, and a nudge at 48 hours
-
05Approve / Reject Callback
17 nodes · 16 connections · 3 notes
the signed callback: publish, or learn
70 executing nodes, by type
The gates, 11 If and Switch nodes, decide whether anything happens next: a countable part of the system, not a claim about it. The 16 sticky notes carry the reasoning on the canvas, at the point it applies.
The guards, and what each one prevents
HoverTap a card to read what it prevents.
- One path to publishing
A backwards walk from the publish node returns exactly one path, and every step of it is a gate. That is a property of the graph, not a promise about it.
- The model never writes a timestamp
It cannot count seconds. It picks a window already cut from the transcript, and the clip’s text is the window’s own words, not a paraphrase.
- The rules check is code
A prompt asking the model not to use a banned word is a request. Banned words match on word boundaries — “cure” does not fire on “accurate” — and one blocked draft blocks the whole moment.
- A rules file that will not parse stops everything
A silently empty ban list would pass every check.
- Signed, then re-read
The callback verifies Slack’s signature and its freshness, and re-reads the draft’s status, because a Slack button stays clickable after it is pressed.
Limits, stated plainly
- Built, not yet deployed. Every file imports cleanly and the single path to publishing was verified by walking the graph; there has been no run against real Slack and Buffer accounts.
- Clip rendering is not built. The pipeline produces verified start and end times; rendering vertical clips needs FFmpeg on a host, or a paid render API — a decision with cost.
- Only the first draft of a set is published, through Buffer. Fanning out per platform is one node’s work, once the platforms are known.
- Transcription is AssemblyAI. The rejection-note loop is wired but not yet fed: the approval card still needs a field for the note.
Built with
- n8n
- AssemblyAI
- OpenAI
- Google Drive
- Google Sheets
- Slack
- Buffer