Title: The model cannot own the money | MidnightDev
URL: https://midnightdev.dev/writing/the-model-cannot-own-the-money
Description: Dozen matches brands with small TikTok and Instagram creators. The AI writes the captions. It never accepts a deal, posts, or pays anyone. Here is why, and where the build stands.
Generated from the live page on 2026-10-22. Do not edit by hand; run `pnpm twins`.

---

[writing](https://midnightdev.dev/writing.md) /agent graphs · 19 august 2026 · by [Alex Bouchard](https://midnightdev.dev/alex-bouchard.md)

# The model cannot own the money

My first build took 45 minutes and looked finished. It wasn’t.

Dozen matches brands with TikTok and Instagram creators who have 1k–50k followers. The AI writes the captions. It never accepts a deal, posts anything, or pays anyone. That one rule shaped the whole product.

01 / the gap

## Finding creators is easy. Everything after is a spreadsheet.

Small creators already make $50–$200 a post. They find that work in DMs, in Discord, or not at all. Brands that want real reach either overpay one big name or hire someone to wrangle a dozen small ones by hand.

GRIN and Aspire sell that person an $11k–$100k a year dashboard. Collabstr and #paid sell a directory and leave the DMs to you. Finding names isn’t the problem. The problem is everything after: the brief, the draft, the FTC disclosure, the revisions, the post, the payment.

That’s a sequence of steps, not a chat. My first version skipped the hard ones. It marked accept, post and pay as done so the demo would run start to finish. The captions were fine. The money steps were make-believe.

02 / three shortcuts

## Three easy ways to build this wrong

### Let the AI make the calls you can’t undo

Accepting a deal puts a creator’s name on it. Posting puts a disclosure in public. Paying moves someone else’s money. If the AI owns those steps, the demo finishes and you’ve built a caption generator with a progress bar. When a check fails, it has to stop the line. The AI can’t talk its way past it.

### Charge for the dashboard instead of the work

Big influencer software sells seats to the person running campaigns. Fine if you sell to agencies. Wrong if the product is supposed to *be* that person. Dozen takes 18% when a campaign pays out (15% on priority or on a $2,500+ budget). No seat license. Dozen gets paid when money moves.

### Show a finished campaign as if it were real

A demo that looks paid is the fastest way to mislead people. Dozen’s demo is labeled as a sample, built on test creators. Its view counts are estimated from each creator’s usual engagement, not pulled from TikTok. I’d rather you see an unfinished step than a fake payout.

03 / the steps

## Twelve steps. The AI owns one.

Writing the draft is the only step the AI finishes. Software, fixed rules or people finish the rest. The four steps you can’t take back are marked below. A separate checker fails the build if the AI is ever put in charge of one.

| Step | Who finishes it | Done when |
| --- | --- | --- |
| intake | software | Budget is at least $200, and the niche and platform are set |
| safety · can’t undo | rule | Banned categories are blocked; if in doubt, the answer is no |
| assemble | software | 6–16 creators picked, fees worked out, fake-follower risk under 70 bps |
| offer | software | Rate range set and the brand’s escrow funded |
| accept · can’t undo | person | 60% of offered creators say yes, or the brand refills from the bench |
| draft | AI | Captions written only for creators who said yes |
| verify | software | #ad disclosure present, must-say lines in, banned lines out |
| revise | software | At most two retries, and only on the draft |
| review | person | The brand sees the whole batch at once |
| post · can’t undo | person | The disclosure is still there on every post |
| measure | software | Engagement looks normal next to the creator’s usual |
| pay · can’t undo | rule | Escrow funded, everything posted, no open dispute |

Two loops keep it honest. If a draft fails its check, it gets rewritten, at most twice, without restarting the campaign. And the offer stays open until 60% of the creators offered say yes *and* at least six spots fill, or the brand picks replacements from the bench. People who said no still count. Six yeses out of sixteen isn’t enough.

04 / escrow

## No one can say yes until the brand has paid

If creators can accept before the brand’s money has landed, they’re putting their name on a promise. My first version did exactly that. Offers went out as soon as the team was picked. That was the second shortcut I had to rip out.

Now a new campaign waits for funding. Offers are written, but nobody can accept yet. The brand pays the full budget through Stripe Checkout. Dozen then asks Stripe directly: is it paid, is it this brand and this campaign, and is it at least the full budget? One cent short and the campaign stays locked. With no Stripe key, a checkout never opens.

Only then can creators accept. Payment has its own check on top of “everyone posted” and “the numbers look normal”: the money has to already be in escrow. If a post’s engagement is more than 3.2× the creator’s usual, or under 0.15×, that creator’s payment is held. The campaign isn’t marked paid just so it looks finished.

When everything is clean, payment writes a ledger entry: who is owed what. Actually sending money to creators’ banks needs Stripe Connect, and that isn’t set up yet. Recording a payment I can’t send yet is honest. Telling a creator they’ve been paid would not be.

05 / where it stands

## What works, and what doesn’t yet

The tests run the real product code, not a copy of it. As of 19 August 2026: **43 product tests and 5 checker tests, 0 failures**. They confirm that nobody can accept before the brand pays, that paying less than the budget is rejected, that a missing Stripe key stops checkout cold, that an engagement spike holds that creator’s payment, and that a clean campaign records the payout while bank transfers wait on Stripe Connect.

- ### Stripe Checkout works. Real money hasn’t moved yet.
  Brands can pay the full budget through Stripe. With no Stripe key, nothing opens and nothing gets funded. No live brand budget has gone through it.
- ### Creator payouts are a ledger entry for now
  A clean campaign records what each creator is owed and the 18% fee. Bank transfers need Stripe Connect, which isn’t set up. Nobody has been paid.
- ### Creators confirm their own posts
  They tap “mark posted” and the #ad check runs again. The system doesn’t pull the live post from TikTok or Instagram yet. The public demo is a labeled sample.
- ### No live campaigns
  No brand has run a campaign and no creator has been paid. I’m not claiming any sales volume.

06 / the takeaway

## The interesting part is what the AI isn’t allowed to finish

Most AI agent demos show off a run that goes start to finish. That’s the wrong thing to show. What matters is the short list of things the AI can’t do on its own — accept a deal, post, pay, publish, send money — and what stops it when it tries.

Writing captions was never the hard part. The hard part is refusing to say a creator got paid until they actually did.

sources

- [Dozen case study — the public product page](https://midnightdev.dev/work/dozen.md)

[all writing](https://midnightdev.dev/writing.md) · [Dozen case study](https://midnightdev.dev/work/dozen.md)

Next step

## Want to talk it through?

Book a 30-minute call. I will tell you plainly whether I can help and what I would test first.

[Book a call](https://calendly.com/alex-midnightdev/30min?utm_source=midnightdev&utm_medium=site&utm_campaign=essay-model-money) [or email alex@midnightdev.dev](mailto:alex@midnightdev.dev)
