System Case Study — AI Automation — Content Operations

Social Media Automation System

Role

Automation Engineer — Design, Build, Operate

Stack

Self-hosted n8n, Docker, ClickUp

Scope

15 workflows — publish, measure, media-buy

Channels

Instagram, LinkedIn, Blog · Meta Ads

Contents

Problem Statement

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.

Solution Overview

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.

Core Philosophy

  • One decision, not six. Approving a task is the only manual step — timing, publishing, write-back, measurement and reporting all run themselves.
  • Self-hosted, not rented. The automation engine runs locally rather than through a paid SaaS subscription, so no third party ever holds the credentials or the content, and ongoing cost stays at zero.
  • Measurement closes the loop. Every post is re-measured for 30 days against its own rolling baseline, so the weekly planner scaffolds next week from what actually worked — not guesswork.
  • Paid runs on the same rails. An approved campaign builds, launches and optimises itself against a target cost-per-result — inside spend caps you set, at a level of autonomy you choose. It ships switched off.
  • Nothing fails silently. A weekly audit reports exactly what published, what didn't and why; any run that errors raises its own alert with the likely fix.
  • Built to keep running. Access tokens that would otherwise expire and quietly break publishing are refreshed — and persisted — ahead of time.

Interactive Demo

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.

The path of a post
Tap any workflow above to see what it does and when it runs.

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.

Content Automation — Command Center (Demo) Simulated
Posts by Channel
Publishing Pipeline
Select a channel or pipeline stage above to see it in focus.

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.

Feature Set

Approval-Triggered Publishing

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.

Multi-Format, Multi-Channel Publishing

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.

Schedule Driven by the Plan, Not the Code

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.

ChannelIntended cadence
InstagramThree times a week, fixed morning slot
LinkedInWeekly, fixed morning slot
BlogMonthly, last Sunday

The Measurement Loop

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.

Media Buying on the Same Rails

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.

Automated Weekly Audit

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.

Self-Healing Token Management & Error Handling

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.

Reliability & Safeguards

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:

  • Claim before publish: a task is claimed the instant it's picked up, so a five-minute poller can never queue the same post twice.
  • No stale bursts: a task more than a few hours past its due time isn't published — it's flagged for review. A laptop closed for three days wakes to a review queue, not a burst of late posts.
  • Nothing dropped silently: anything that fails validation gets a comment naming every problem and moves to a Needs-Review state, rather than vanishing.
  • Self-contained requests: every request body is built with strict JSON encoding, so quotes, emoji and newlines in a caption can't corrupt the call.
  • Credential hygiene: tokens are rotated ahead of expiry, not reactively after something breaks; the engine binds to localhost only and speaks to nothing on the open network.
  • No silent failures: the weekly audit surfaces misses automatically, and a dedicated error handler turns any workflow fault into an actionable alert.

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.

Outcomes & Impact

MetricBeforeAfter
Publishing processManual, per-platform loginFully automated from a single approval
Scheduling accuracyDependent on remembering to postFixed, exact-time publishing
Performance visibilityChecked manually, if at allDaily re-measurement, weekly report
Next week's planGuessworkScaffolded from what actually performed
Paid campaignsBuilt and watched by handBuilt, tracked and optimised to a target — inside hard caps
Ongoing costN/AZero — fully self-hosted
Credential upkeepManual, reactiveAutomatic, 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

Need software
built right?

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