a company running two public social pages
From a two-line brief to a post waiting for approval: an 18-node chain, 7 screens, 4 tables
A company with two separate public social pages, each with its own voice. Some of the content was already drafted with AI, but it was slow and the copy kept coming back for a rewrite. The brief: one place where two lines of instruction become a finished post, image included, the last word still a person's.
A working preview. Company, products and figures are invented.
How it was before
part of the content already made with AI, but too slow, and the copy needs rewriting
client estimate
the problem as the client stated it
2 (each with its own voice profile in the prompt)
pages with a distinct voice
never captured — no project document holds the number
from document
posts per month, and minutes spent on one
The system
- 01An 18-node n8n chain: the brief checked against closed lists (page, tone, type, 500-character topic), a prompt with two voice profiles, copy generation, image generation when no photo was supplied, branding burned on, upload, a row in the log. Errors get their own branch into Telegram.
- 02Non-fatal guards on the AI reply: copy over the platform limit is trimmed, too many emoji raises a warning. Nothing halts — a strip on screen says what was corrected.
- 03A React and Vite dashboard, seven screens: overview, metrics, ads, create, schedule, archive, settings. Create runs a four-step form with a progress timer; the finished draft saves itself as „For review“ — closing the card cannot lose it.
- 04The post renders in both networks' feed formats. On the card: edit copy in place, regenerate, approve, reject, or drag onto the calendar — dropped, it schedules for 10:00; the past refuses the drop.
- 05Supabase underneath: four tables with state constraints, indexes and an audit log, plus a realtime subscription — a status changed on another device appears without a reload. Its own Flask and Pillow service in Docker: crops any aspect ratio to a square, applies a different layout per channel. Archive: filters, search, CSV export.
The one thing we got wrong.
The image generator refused part of the batch on its safety filter: 6 of 32 images failed first time, and the prompts had to be rewritten with manufacturer names stripped out. Same category again: the images first lived on a cloud drive and would not render without a login, so we wrote a migration script into our storage.
Before and after
BeforeAfter
first-pass images (our production, not client benefit)
not applicable
26 of 32 landed straight away, 6 needed a rewritten prompt
AI cost per post
not applicable
about €0.20 (copy and image together)
our estimate
build span (calendar, not billable hours)
not applicable
8 days with work across an 11-day window
our estimate
figures on screen, and real-world use
not applicable
all figures are demo data, the statistics connector was never wired up, and nothing shows the chain ever ran on real client content