System Case Study — AI Automation — Content Operations
Consistent content publishing across multiple platforms is a scheduling and discipline problem as much as a creative one. Manually logging into Instagram, LinkedIn, and a WordPress blog to publish on the right day, at the right time, in the right format, is easy to fall behind on — and there was no structured way to know, after the fact, whether the week's plan actually went out on schedule.
The need was for a system that turned a single decision — "this content is approved" — into guaranteed, correctly-timed publishing, with an automatic record of what happened.
A self-hosted operations system built around one ritual: approve next week's content in a task manager once, and the system takes it from there. One status change puts a week of content on Instagram, LinkedIn and the blog at the right times, measures what each post did, runs the paid campaigns alongside it, and reports on all of it every Sunday. Fifteen coordinated workflows do the work; a single approval is the only human step.
One approval sets the whole thing in motion. The spine below is the path every post takes — press Play the flow to watch it move, or tap any stage to read what happens there. Underneath, the fifteen workflows that make it run, grouped by what they do; tap any one for the plain-English version.
Below, the command-center view of the same pipeline — the kind of overview you'd want before your morning coffee: what's queued, what's gone out, and how each channel is performing. Switch the time range and click into a channel or pipeline stage to see it respond.
Note — this is a self-contained front-end simulation built for this portfolio page, running on illustrative data. It mirrors the shape of the real dashboard without exposing any live account data or internal system design.
The system watches a task board for content marked "Approved." The moment that happens, it claims the task — flipping it to "Publishing" so a five-minute poller can never fire the same post twice — picks up the platform, caption, media and scheduled time, waits until the exact publish moment, then fires the post and writes the live URL back onto the task. No manual login to any platform, ever.
Four publishers share one shape. Instagram handles both single images and 2–10 slide carousels through the official publishing API; LinkedIn posts text or image via the versioned /rest/posts API; WordPress publishes long-form with title, body, excerpt and SEO metadata set automatically. Images are checked for HTTPS and format, and captions length-checked against each platform's real limit, before any API sees them.
There are no hard-coded times in the workflows — cadence is driven entirely by each task's due date, so the schedule is edited where the content lives.
| Channel | Intended cadence |
|---|---|
| Three times a week, fixed morning slot | |
| Weekly, fixed morning slot | |
| Blog | Monthly, last Sunday |
Publishing isn't the end of it. Every day, the system re-measures every post from the last 30 days, building a rolling performance history per channel. On Sunday it turns that into a performance report — what worked, what didn't, what to change — and a weekly planner that scaffolds the next week's tasks from the same baselines, so the plan is informed by what actually performed rather than a hunch.
An approved task in the Ad Campaigns list builds a Meta campaign end-to-end — campaign, ad set, creative, ad — while a collector tracks what it costs and an optimiser adjusts budgets against a target cost-per-result, inside caps you set. A post that beats its own baseline can be drafted straight into a paid campaign. The entire paid side ships switched off and stays inert until it's deliberately enabled.
Every Sunday morning, before anyone checks manually, the system reviews the week's plan and produces a scorecard: what published on time, what's still unpublished, and why — logged automatically as a report rather than left to memory.
Access tokens are refreshed and persisted on their own cycle, ahead of expiry, so publishing never silently breaks because a credential lapsed. And any workflow that errors routes to a single error handler that raises a task-board alert naming the likely fix.
The system is self-hosted end-to-end — no third-party automation platform ever holds the credentials or the content. Every publish action is confirmed and written back to the task board, so there's always a record of exactly what went out, when and where. The safeguards are deliberate:
The paid side carries its own layered brake: it ships disabled, campaigns are built paused, every campaign has a mandatory budget cap under an account-wide daily ceiling, and the optimiser can be held to recommend-only. Each limit is sufficient on its own.
| Metric | Before | After |
|---|---|---|
| Publishing process | Manual, per-platform login | Fully automated from a single approval |
| Scheduling accuracy | Dependent on remembering to post | Fixed, exact-time publishing |
| Performance visibility | Checked manually, if at all | Daily re-measurement, weekly report |
| Next week's plan | Guesswork | Scaffolded from what actually performed |
| Paid campaigns | Built and watched by hand | Built, tracked and optimised to a target — inside hard caps |
| Ongoing cost | N/A | Zero — fully self-hosted |
| Credential upkeep | Manual, reactive | Automatic, ahead of expiry |
Running in production — fifteen coordinated workflows turning one weekly approval into consistent, correctly-timed publishing across Instagram, LinkedIn and the blog, a measurement loop that feeds the next week's plan, and paid campaigns on the same rails, all under a weekly accountability report.
If this is you
If publishing and reporting eat your week, I hand that time back. One approval goes in, a week of scheduled content goes out, measured and reported for you.
Back to
All Systems →
Whatever you need built, I design and ship it end to end, from an internal tool to a full-stack product. Tell me what should already exist.
Talk to Me →