The headline numbers

// READ TO APPROVED ~1 hour 33-ad October refresh, live the same afternoon
// APPROVED ASSETS 274 unique files, eight packs, July to October
// HAND BUILD, MODELLED 46-91 hours the same 274 files at 10 to 20 minutes each
Each square is 20 minutes. The October refresh took about an hour from the start of the performance read to an approved pack; building the same 33 files by hand, at 10 to 20 minutes each, is a modelled five and a half to eleven hours.

The timings come from the work's own records: git commit times for each batch spec, the render and review timestamps each run writes to its folder, and the engagement's decision log for when ads went live. The hand-build figure is a model, not a measurement, and its assumptions are set out under Results. Performance results for the October set are not in yet; it went live on 1 October.

The brief

Bubble matches London parents with local babysitters through an app. Its paid media was relaunched in July across Meta, Google App campaigns and Apple Search Ads, and the creative demand that comes with that is wide rather than deep. Every message has to exist at four or more placement ratios. Each ad sends people to one of three destinations (the iOS app, the Android app or the website), and each destination carries its own trust signal. Parents plan around the school calendar, so summer holidays, back to school and half-term are real hooks, each with its own window. And in September Bubble ran a London Underground and rail poster campaign whose art and sitters needed to reach paid social while the posters were still up.

The brief was to make that volume routine: refresh creative as often as the results asked for it, keep every file correct for its platform and destination, and be able to say afterwards exactly what any ad in market contained. Bubble brought strong raw material: a rights-cleared brand photo shoot, a set of sitter portraits that had been one of the account's best performers, and later the out-of-home campaign's photography of real Bubble sitters.

This sat inside an S02 Paid Media Management engagement: the creative system was built to serve the account, not as a separate design project.

What changed

The system is the one described in the ad creative automation method, and it was built for this account first. In short:

  • A design system in Claude Design with every testable axis as a parameter: message route, season, location, visual style, ratio and destination. Thirteen templates at launch, fourteen by the end of September, covering offer ads, statements, social proof, carousels, store screenshots and the out-of-home poster format.
  • A git repository as the source of truth, from 13 July, with Claude Design as the editing surface. Every render records the design-system commit that drew it.
  • Batch specs in YAML with a hypothesis and a contract, validated before anything renders, and a frozen filename grammar that names every tested axis so platform reports join back to the files.
  • A four-lane review gate (composition, legibility, ad policy, brand) run by agents over every pack, approved only when each finding is fixed or accepted with a reason.
  • Two adapters for Bubble's own art: one runs finished poster artwork into ad sizes as it is, and one turns the out-of-home sitter photography into cut-out plates the templates can compose.

The first launch pack was 132 approved files: eleven concepts across up to six ratios and three destinations. Seven more packs followed: summer holidays, back to school, the out-of-home proofs, the account's top performers restyled for out-of-home, the tube poster art in ad sizes, the sitter posters, and the October refresh.

One morning, read to live

The October refresh is the cleanest example of the loop working end to end, because every step left a timestamp. It began with an agent reading September's results directly from Bubble's Meta ad account through the Meta Ads MCP server, broken down by ad, creator and message. Two findings shaped the batch: the lead creator's video was carrying most of the spend and showing signs of fatigue in a rising cost per registration, and a back-to-school hook was behind a majority of September's web purchases. The refresh was built to carry the out-of-home sitter posters and that hook into every Meta campaign.

The October refresh, 1 October 2026 A timeline. 09:51, the performance read starts through the Meta Ads MCP server. 10:13, the batch spec is committed. 10:31, a revised spec. 10:43, the final render. About 10:55, the review approves the pack after three rounds and nine findings, six fixed and three accepted. 15:13, the refresh is live across web, iOS and Android. // 1 OCTOBER · READ TO LIVE 09:51 10:13 10:31 10:43 ~10:55 by 15:13 The performance read September, by ad, creator and message via the Meta Ads MCP server Batch spec committed hypothesis · contract · routes Spec revised hooks matched to sitters Final render 27 posters · 6-card carousel Review approved 3 rounds · 9 findings 6 fixed · 3 accepted · 0 open Live every Meta campaign · web, iOS, Android about an hour to approved · live that afternoon
The October refresh from the git and run records: the spec was committed 22 minutes after the read began, and the pack was approved about an hour in.

The final pack was 33 files: nine poster executions at three ratios, and a six-card carousel. One render served web, iOS and Android, because in these templates the destination only changes the label, so there was nothing to duplicate. The review took three rounds and filed nine findings, six fixed in the templates and three accepted with a written reason. The refresh went live across every Meta campaign the same afternoon.

One honest qualification. The hour was fast partly because the poster template it used had been built and reviewed the evening before, when Bubble's sitter photography from the out-of-home campaign was turned into a 36-file pack in a little over an hour of rendering and review. The refresh was quick because the system already knew how to draw a Bubble poster, which is the point of owning one.

The refresh was quick because the system already knew how to draw a Bubble poster. That is the point of owning one.

Results, against a hand build

There is no clean "before" to compare with: the system was built alongside the relaunched account rather than replacing a process that had been timed. So the comparison is with a model of producing the same files by hand, and the model is deliberately simple so anyone can change it. It assumes an experienced designer needs 10 to 20 minutes per file to adapt an approved master to another ratio, swap the copy, check the safe areas and export. It leaves out everything hand production also needs, such as briefing and rounds of feedback, and the pipeline side leaves out the one-off build of the design system, which was real work and is not amortised here.

PackFilesMeasured, pipelineModelled, by hand
October refresh (1 Oct)33~1 hour, read to approved5.5-11 hours
Sitter posters (30 Sep)3664 minutes, render to approved6-12 hours
Back to school (20 Aug)3237 minutes, spec to packed5.3-10.7 hours
Every approved pack, Jul-Oct274n/a46-91 hours

The hours matter less than what they buy. A refresh that costs an hour can follow the results week by week; one that costs a day and a half of design time waits for the next brief. The same is true of the out-of-home campaign: poster art Bubble supplied one afternoon was in paid social, in every ad size, the next day.

Correctness is the other result, and it is harder to put a number on. Every one of the 274 files traces to the commit and settings that drew it, every pack passed the review gate before it shipped, and the destination rules live in the templates rather than in someone's memory. When a defect was found, it was fixed once in the template and every later render carried the fix.

On performance, the early signal is encouraging and small. In an August read of one Meta app-install ad set, the two pipeline-built ads ran about 18% and 24% below the ad set's blended cost per install; a sample that size does not crown a winner, and it is reported as a direction, not a result.

What's next

The October set is the first refresh authored from a structured performance read, so it is also the first one the formal loop can grade: platform reports joined to the run manifests on the filename grammar, ranked by concept, route and creator, feeding the November wave. Out-of-home returns in November, and the poster format is now a template rather than a one-off, so the next campaign's sitters go from photography to paid social in a single evening.

Takeaways

  • The speed comes from the system, not the session. An hour from read to approved pack is possible because the templates, the review rubrics and the poster format already existed.
  • Read performance where it lives. An agent reading the ad account through MCP turned "how did September go" into a batch spec in about twenty minutes.
  • Make the destination a parameter. One render serving web, iOS and Android is only safe when the template, not a person, decides which trust signal each one carries.
  • Model the comparison honestly. With no timed "before", a stated model with its assumptions shown is more useful than a confident claim nobody can check.