For the past two weeks I've been turning my content system into a marketing factory. I type one sentence, and a carousel, a story set and a reel come out the other end, each one checked before I see it.

I've written about the AI team that makes the pieces and the markdown files my business runs on. This post is about the floor between them: how a request becomes a post, how a post becomes a lead, and what a week of it cost.

Why: leads, not likes

On 5 November I counted what my old content system had produced. Its tracker held 356 items, 113 of them finished AI Playbook carousels. Scheduled or posted: zero.

It could make content. It couldn't ship any of it, and it couldn't tell whether a piece would bring anyone to my door. So I changed what the system is for: it now exists to bring leads to two pages.

  • Affarit Studio's page, @affaritstudio, with the AI Playbook: everyday AI for business owners and teams. Its one ask is "Comment AI PLAYBOOK", and the answer is the AI Playbook on affarit.com.
  • mint.talks, my old podcast's Instagram, now Mint Talks | AI app building: what an app with AI really costs, the mistakes that sink a launch, what to ask a developer. Its one ask is "Comment LAUNCH", and the answer is the Mobile App Launch Checklist on this site.

Each page gets a carousel, a story set and a reel a day for 90 days. Affarit's page starts on 23 November, and mint.talks has 42 pieces planned from the same day.

There are no targets yet, on purpose: two weeks of baseline per page first, then I set a number, because anything earlier would be made up. My view, for a business my size: followers are a vanity number, and a signup to a lead magnet is the one that pays. That's what the whole factory is built to count.

The shape: one workspace per brand, one engine, one place to decide

The old app had grown the way side projects grow: three ways to make content with three sets of checks, eight paths to the AI with four sets of flags, and one brand's settings in seven places.

On 5 November I deleted most of it and rebuilt the app around three ideas.

Brands are workspaces

Each brand is a workspace with its own tabs: Overview, System, Plan, Library, Drops, Radar, Results and a few more. The System tab is the asset editor for Juno's brand system (colours as roles, type, marks, templates), and Save only writes when the code checks pass. This site's colours and fonts come from that same file.

One engine for every AI call

Every model call in the app goes through one file, engine.cjs. A call is a labelled step, and each label is a row in a table: the model, the effort, a dollar cap, a time limit, the tools it may use and the cage it runs in. A label without a row is refused, so nothing runs unmetered. On the morning of 6 November the table had 39 rows, and the nightly lesson review below added a fortieth the same day.

When I moved every call onto it, a golden record proved nothing changed: a test drives every call site with a fake model and compares what each hands the CLI, byte for byte, with what it handed before. The app's suite had 526 tests on 6 November.

Home asks only real decisions

The first version sent me every blocked piece. My note to the team on 5 November, in capitals: "WHY IT NEEDS ME?"

Now a piece that would block goes once to the teammate who can fix it, with wider powers: a footage problem to Kai, an unsourced number to Vera, a caption to Mila. Only what's really mine reaches Home (a licence, money past a cap, a name, an account, publishing), as a small dialog: what's wrong in plain words, what the team tried, and two to four buttons that act.

0 of 20

blocked pieces the team solved without me

Team ▸ Health, the 7 days to 6 Nov. The other 2 came to me; the whole step cost $0.90

Eleven teammates, one job each

The team grew by one since I introduced it. Every teammate has a name, a lane and a memory that follows them into every repo:

  • Ada, the showrunner: turns my requests into packages, plans and tickets.
  • Vera, the researcher: a claims ledger with a primary source and a date for every fact.
  • Theo, the script writer: every spoken word.
  • Mila, the copywriter: every read word, slides to captions.
  • Cleo, the case-study writer, new on 5 November: anonymised case studies from my notes.
  • Kai, the video editor: the edit, captions, sound, and cutting my own raw video.
  • Otto, the animator: films drawn entirely in code.
  • Juno, the brand designer: each brand's system, proven on real layouts.
  • Rio, strategy: topics, packaging, the plans and the weekly post-mortem.
  • Nico, the social media manager: platform-native posts, never the posting itself.
  • Iris, the standards editor: facts, policy, licences, voice. The only one who can fail work, and she never fixes it herself.

Lanes are strict: a writer can't add a fact the ledger doesn't hold, and nobody marks their own work as passed.

The floor plan

This is the path a carousel takes from my sentence to Home. A reel follows the same shape, with a script, the footage and a render in the middle.

One request, one carousel
  1. 1One sentence
  2. 2Ada's package
  3. 3Vera's ledger
  4. 4Mila's words
  5. 5Iris's gates
  6. 6Ready on Home
  1. 1I askOne sentence in the Ask box. Ada answers with a package.
  2. 2ResearchVera writes the claims ledger: at most six claims, each with its source and date.
  3. 3CopyMila writes a deck.json: each slide a named layout with its fields. Never HTML.
  4. 4G1/G2Code checks first, then Iris checks the facts and the copy.
  5. 5DesignCode lays the slides out from the brand's tokens and measures each one.
  6. 6Package and G3/G4Mila writes the caption, alt text and posts. Iris reads every rendered slide.
  7. 7ReadyIt waits on Home with its previews, files and post text, on its calendar slot.

Code checks over taste

The model writes words and structure, and code does the layout. Each slide is filled into the brand's template and a headless browser measures it: overflow, the smallest font size, colour pairs and contrast, missing glyphs, a story's safe zones, the slide count. A slide that fails goes back to Mila with the report.

Taste is the part a model skims, so whatever I can turn into a check, I do, and it runs before Iris sees anything:

  • every number on a slide is in the claims ledger (a slide counter like "02 / 08" claims nothing);
  • no banned phrase and no AI-writing tell;
  • no other brand and no client, with the names read from my private notes when the check runs and never stored;
  • exactly one ask, on the last slide;
  • a real caption (a placeholder never passes), alt text for every slide, and a post per platform within its limit.

Affarit's old carousels showed why. When the first six went through the new gates on 5 November, all six came back blocked: unsourced numbers, lines too small to read, a dead link, two asks on one piece, slide counters that didn't match. They're being remade as decks, with Vera sourcing every number and the originals kept in git.

The rule behind it is one line in the team's memory: a failure that repeats becomes a code check at the step that makes it. Team ▸ Health lists the repeated failures no check covers yet, each with a "Make it a code check?" button that writes a proposal for me.

0.00

rounds of G1/G2 a deck needed on average

Team ▸ Health, the 7 days to 6 Nov; G3/G4 took 1.67. 17 of 26 decks needed a second G1/G2 round

Covers

Covers were my one creative call. My decision on 5 November: "mix. creative, sometimes random brand new ones". So carousels rotate through the brand's cover looks, never the same twice in a row, and about one in five gets a new cover drawn inside its tokens, redrawn until it passes every check above.

Case studies, Radar and Drops

Three more ways in run on the same engine and through the same gates.

Case studies

Cleo writes a case study from my own notes on a project: an A4 PDF, its LinkedIn post, a companion carousel and a story set. It's always anonymised. What names the client stays in a private intake outside git, every write is scanned for the client's names, products, people and places first, and a draft that leaks is never written.

Radar: news to a post in minutes

Each brand has its own sources: company newsrooms and blogs, Hacker News, new GitHub repositories. Code filters first (age, rumour words like "reportedly", the brand's topics), then Haiku triages what's left. It got that job by passing an evaluation: 38 of 38 on a labelled test set, for $0.0044.

What matters shows up on Home with Make it and Not for us, and what I dismiss teaches the triage.

The first real run was on 5 November, on Google's news that Google Vids now runs on a new video model. I clicked Make it. Vera confirmed the news on Google's own page in 19 seconds, and 4.5 minutes later a 9-slide carousel and a 6-frame story set were ready, through the same gates as everything else, for $0.91.

It wasn't clean. Code refused the first attempt because Vera wrote "same" instead of the source URL in five ledger rows, and the carousel's cover kicker read "Radar, 5 Nov 2026", the app's own name for the feature. A code check catches that now.

Drops: my own photos and videos

I can drag a photo or a raw video anywhere in the app. The file stays outside git, and code on my Mac reads it: length and loudness, a transcript with word times from Whisper large-v3-turbo, a face check with macOS Vision. I'm asked about the rights once, and "not sure" blocks every use.

Ada proposes what it could become (a reel Kai cuts from a talking head, a carousel from the photos), and nothing is made until I pick one. My face and voice only go to my own brand, and code checks that four times: when Ada proposes, when I approve, at the design step and at the render.

The Ask box: one sentence, one package, one click

This is the front door: one box on Home, in ⌘K and in every brand's header. I write a sentence, and Ada answers with a package of up to six pieces (reel, carousel, story set, case study, guide, post), each with a working title and an angle, plus what she needs from me.

Code checks her reply against a schema and adds what a model shouldn't guess: the dates (a free slot within 14 days), and the cost and time from Health's measured numbers per format. One click approves it, to be made now or tonight.

The first package went through on 6 November: "Make a carousel and a story set for Affarit on how to brief an AI agent so it doesn't go off the rails." The estimate was $2.64, and both pieces were ready for $1.16.

From a post to a lead, counted per piece

A post only counts if I can tell which one brought a signup. This is the chain:

  1. 1The askEvery reel and carousel ends on "Comment" and the page's keyword. Every story set ends on "Reply" and the keyword, because stories have no comments.
  2. 2The DMAn automatic DM answers with the lead magnet's link, tagged with the page and the piece: utm_campaign=<page>-<piece id>. A paid tool or the app runs it, my call.
  3. 3The signupThis site keeps the landing link's tags in memory for the tab and sends them with the signup form. Nothing is stored on the visitor's device.
  4. 4The countEach brand's Results tab shows every piece's reach, saves, keyword comments, signups, and signups per 1,000 reach.

It keeps counts only: no commenter's name, handle or email is ever stored. And anything not connected yet shows as "not connected", never as a zero.

Once a week Rio and Nico read the numbers and write a post-mortem: what brought signups, what didn't, and at most four proposals (more slots for a kind of post, a hook to test). I accept or dismiss each.

Publishing is built too: a piece publishes itself on its planned day unless I hold it. Instagram and Facebook go through one Meta app, tested on fakes and inert until I connect the accounts. Instagram's API can't add a link sticker, so a story that needs one waits for my hand.

How the team learns

Any teammate can propose a lesson. I accept it or dismiss it, and a dismissed lesson is a tombstone that's never proposed again. On 4 November I went through 24 waiting lessons and accepted 21.

That depends on my attention, so on 6 November I added a steward. Every night Iris reviews the new proposals. A craft lesson whose evidence checks out goes on trial as provisional: it reaches the prompts marked as on trial, and I can still dismiss it. Code compares every quote she gives as evidence with its record, character for character. A lesson on trial graduates after ten clean pieces of its kind, or it's retired if its failure comes back three times. Lessons about my decisions, money, names or publishing stay mine. Its first run, on the morning of 6 November, reviewed 20 lessons for $0.22: 13 went on trial, 4 stayed with me, 1 was merged and 2 had no evidence.

The second input is my own edits. When I change a deck's words, a title or a line of narration, the before and after are kept, and two edits with the same pattern for the same teammate (shorter, sentence case, a hype word gone) become a style lesson proposed for them.

What it costs

Every call is metered, and Team ▸ Health reads the ledger with no AI involved. Its numbers on 6 November:

$0.00

spent on AI in the 7 days to 6 Nov

1,821 model calls: 1,805 on Sonnet, 16 on Haiku

  • A carousel: $1.12 when it's ready.
  • A story set: $0.51.
  • A reel: $1.33.
  • A case study: $1.32, from the one made so far.

Those are Health's per-format numbers over the 14 days to 6 November: each ready piece's own steps, priced from the usage ledger.

Video is running hot. A ready video cost $3.00 over the last 7 days against a baseline of $2.27 on 4 November, 32% more, and Health has its alert up. The money sits in the rounds (every failed gate is a fix plus a re-check), so the next savings will come from catching failures earlier.

The nightly autopilot is capped at $35 a night and $200 a week, and a run that would cross a cap stops and says so.

What stays mine

  • Names and accounts. The team proposes; I pick a page's name and create the account.
  • Money. Anything past a cap, any paid tool, any paid voice.
  • Approval. Nothing is made without my yes on a topic or a package.
  • Publishing. Each page's autopilot is my switch, and Hold works on any piece.
  • My face and voice. Only on my own brand, and never an AI voice or an AI face as me. The reel made for this article has no voice at all.
  • Clients. No public piece ever names one; code checks it at the gates and before anything publishes.

What's next

Before 23 November, Iris and Rio review each page's first three days of every format, and I switch each page's autopilot on myself. On 6 November the team also got a queue for what comes after:

  • One idea, every format. Every ready carousel also becomes a 15–25 second reel, its slides animated with kinetic type and music.
  • Named series, so followers know what's coming: Ship or skip, What it really costs and Ask your dev on mint.talks; Prompt of the week, One workflow, before and after and Tool teardown on Affarit's page.
  • A second lead magnet per page by day 30, made as a PDF by the same engine.
  • The keyword DM inside the app, instead of a paid tool.
  • Remix the winners: a piece in the top 10% of its page's signups per 1,000 reach gets remade once, in another format or with one fix.

Day 30 is the first review per page. By day 60, any kind of post that never brought a signup gets cut.

If you want to build your own

I'd start with the harness around the agents, before the agents themselves: one onboarding file of rules, a ledger row for every model call, a contract where agents propose and you accept, and checks that run before anyone reads the work. Everything above sits on those four, and they're the templates in my AI Harness Starter Kit, cleaned of my data.

Free · one emailThe AI Harness Starter KitSeven copy-paste templates for the part around the model: the onboarding file, an agent, the propose-only contract, a deny-list, a guard script, a model-call ledger and a daily eval checklist.Get the kit