Automation · proof of work

Studio Social Engine

One pipeline runs any brand's social channels from a single profile file. It generates the week's content, gates it for approval, reads live performance, and returns the next move. Built and run by Anton Atanasov with Claude Code, Cursor and MCP.

Claude Code Cursor MCP Node

The loop

01

Generate

A full week of on-brand posts, captions, hashtags and media specs, from one profile file.

02

Gate

An approval workflow. Only approved posts become schedulable. It never auto-publishes.

03

Read

Ingests the period's live platform analytics, automatically.

04

Recommend

Returns one prioritised, do-more / do-less action, not a wall of numbers.

See it run

Real output from the pipeline, captured 11 Sep 2026. Nothing here is a mockup.

Generate a week from one profile

$ node run-week.mjs --brand labarista --start 2026-09-15
LaBarista  week of 2026-09-14
  11 drafts: gbp 2, facebook 3, tiktok 3, instagram 3  (5 video, 6 image)
  auto-publish: false   gate: Notion Content Calendar Status = Approved
  wrote drafts/labarista/week-2026-09-14.md / .json

Run a different brand, and prove no data leaks between clients

$ node run-week.mjs --brand meraki-blooms --start 2026-07-20 --against labarista
Meraki Blooms  week of 2026-07-20
  7 drafts: gbp 2, facebook 2, instagram 3  (1 video, 6 image)
  brand-bleed vs "labarista": PASS (0 foreign identity tokens)

Client sign-off gate: approve two posts, exactly two become schedulable

$ node approve.mjs --brand meraki-blooms --week 2026-07-20 approve 3,5
approved: #3, #5
  schedulable (approved only): 2/7  -> [#3 #5]

Read live analytics, then make a call

$ node report.mjs --brand labarista --period 2026-06-22_2026-07-21
  recommendation: Instagram Reels: 0 published this period against a
  target of ~8.6. The reach is already there; the gap is posting
  frequency, not audience. Close it first next month.

Performance figures omitted on purpose: this is a small local brand, and they are not the point. Happy to show them live.

What the engine decided

It didn't just report numbers. It found the single highest-leverage gap and told me what to do about it. That is the same judgement a media buyer makes every day, applied to a channel instead of an ad set.

Guardrails, built in

Never auto-publishes

The schema forces it off. No profile can opt in.

Never spends by accident

Rendering is off by default and refuses to run without an explicit spend confirmation, cost shown first.

Client sign-off enforced

A client brand blocks every post until it is approved. Approve two, exactly two become schedulable.

No brand identity in code

Every brand-specific word lives in its profile. A bleed check proves one brand never leaks into another's drafts.

How this maps to the role

Swap the social metrics for ROAS and CPA and this is the media-buying loop: generate creative, test it, read the numbers, kill the losers, scale the winners, and automate the decision so it comes from a dashboard, not a gut feel. I have not run paid ad budgets yet, and I am direct about that. What I bring is the automation layer around them, built with the same tools this role names. Runs on demand. Full code walkthrough available on request.