The account defense that starts before the RFP arrives
The efficiency was going to come up in this review either way. The only question left was who walked in with the sheet.
A second-generation family-owned agency in the Mid-Atlantic, about 35 people, full service. The anchor account is a regional hospitality-and-entertainment group: tavern kitchens, family supper houses, a couple of live-music halls, every property running its own calendar and every division holding its own budget. It is a large enough share of revenue that the principal knows the percentage without looking it up. Last year the client squeezed and a slice of the work went elsewhere. Now the rest is heading to review, and the RFP isn’t in hand yet. Weeks, not quarters.
Everyone in the building already knows what the review comes down to: cost and efficiencies. And every incumbent who has ever defended an account knows the question waiting at the end of that sentence. If you could do this work for 10% cheaper, why didn’t you do that before?
Before
A promotion arrives as one approved idea: the fall supper series, Thursdays, a price, a date range, a line of legal. Then it becomes a family. The lobby poster, the in-venue screens, the leaderboard, the 300x250, 2 social crops, an email header, the marquee out front, every frame rebuilt by hand off the last one by whoever had the afternoon. Multiply by the properties, the divisions, and the calendar, and most of the studio’s week is re-typesetting promotions it already approved.
The change is what actually cost them. A date moves 2 weeks in, because a date always moves, and somebody opens every file again. Or doesn’t, and a frame goes live carrying the old dates, which is how a marquee ends up advertising a night the room is dark.
They had tried the obvious things. The layout tool has a batch export, and that button is exactly why nobody here trusts automation: the 300x250 comes back as a shrunk poster with a headline no one can read and legal copy under the legibility floor. Master templates that every new promotion broke inside a month. And AI, sort of. Someone had a subscription and a folder of prompts, nothing formalized, nothing anybody would put in front of the client.
The principal’s position on all of it wasn’t skepticism about the technology. It was arithmetic. Show a client an efficiency and the client takes it: 25% off the retainer, pocketed, thank you very much. Why hand them the knife?
Because the knife is already on the table. RFPs are scoring AI integration now and pricing in AI economics; we have watched an agency decline one because the margins stopped working. That story is going to exist inside this review whether or not the incumbent writes it.
The difference between offering an efficiency and confessing one is who brought the sheet.
What was done
We didn’t start with the RFP response, and we didn’t start with a model. We started with one promotion.
The decision that shaped everything came before any code: the efficiency is not a discount, it’s inventory. Hours that come out of production get traded, at flat budget, for scope the client buys elsewhere today or doesn’t buy at all. That set the engineering bar. The number has to hold up per promotion, in a room, against someone who wants it not to.
So the promotion stops being a layout file and becomes a record. One approved promo as structured data: every string of copy, the offer long and short, a price token, the legal line, a date range carrying 3 pre-approved display forms. No layout in it. No sizes in it.
Then the part the studio actually cares about. Each size declares its own layout decisions instead of inheriting a scale factor: which elements survive and the written reason each dropped one was dropped, the 2 or 3 line-break arrangements it may use, the point sizes it may step down through, the logo lockup, the safe area, and what gets dropped first if the block still overflows. The generator walks that menu in the declared order, measures the laid-out type in the real rendering engine with the real fonts loaded, stops at the first combination that fits, and writes every candidate it measured into the manifest.
That trace is what makes the number defensible later. Not “the AI chose,” but a declared menu, 4 candidates measured, the first fit taken.
Taste gets logged, not overridden. An art director forced a different line break on the 300x250 because the auto-fit version stranded a word under the price block. That override carries an author, a reason and a lock, and it’s re-applied on every regeneration. The generator also computes what it would have chosen without the lock, so the override is auditable instead of merely obeyed.
Then we changed the record. The series got extended 4 weeks, a real edit to the promo file, and nothing downstream was told which sizes that touched.
3 of the sizes also come out as 12-second animations from the same record, so a motion pass exists before a request lands in the animation queue.
What it is not, stated plainly, because a sheet like this gets read by people hunting for the catch. The 9 sizes run on 5 layout families, not 9 bespoke designs. The key art is vector built for the demo; photographic key art needs per-size crop rules this spec doesn’t model. The poster renders raster in RGB, a comp and not a print-ready file. The 3 animations share one motion system. And the conflict detector notices that a locked value drifted. It doesn’t reason about whether the new value is fine.
The wobble
The hard part was never the cascade. It was measuring. The first version asked the browser how wide the headline was and got the container’s width back, because a line of type set in a block element reports the block. So everything fit, and nothing did. A copy-fit engine that returns a clean fit on a headline running past the frame edge is the exact failure an art director clocks in half a second and never forgives. We ended up measuring the laid-out text itself, in the real rendering engine, against the box the spec declares. Then the banners taught the same lesson a second way: the 728x90 and the 300x50 passed the safe-area test with the price block sitting on top of the CTA, because a flex row holds its children’s intrinsic width and lets siblings collide without anything crossing the safe rectangle. Both bugs are the same bug. A tool that says it fits when it doesn’t is worse than no tool, because the whole point is a number somebody has to defend in a room.
After
Measured on our build, not on their floor. One approved record, 9 sizes, 1.402 seconds for the still family, an average of 0.156 per size. The animated variants are the slow part and took 39 seconds more.
The change is the better number. Extending the date range refreshes 6 frames in 1.131 seconds, skips the 2 sizes whose specs say no date element survives there, holds the 1 locked marquee date and raises it as a conflict instead of overwriting it. Nothing told it which frames to rebuild.
Machine seconds are not an agency’s day. Somebody still approves the promotion, reads the conflict, and decides what goes in the sheet. What changed is which of those things are the work.
The texture matters more than the clock anyway. A date change stopped being a rebuild and became a refresh plus one conflict for a human to settle. The art director’s fix for the stranded word stopped being folklore and became a line with their name on it that survives every regeneration. Venue ops pinned a marquee date because the room is dark for an inspection that week, and the machine held it against a record change that would have quietly overwritten it. That last one is what turns a studio, not the seconds.
And the principal walks into the defense with something other than a lower price: a sheet showing exactly what a promotion run did, frame by frame, with every layout decision and every human override on it, plus a longer list of what now sits inside the same budget line, starting with the animated variants and the email set that used to be a change order. The review hasn’t happened yet. This is what they walk in with.
What it required
The principal in the weekly check-in, personally, from the first week. Not to approve invoices: to answer questions about their own client that nobody else in the building could answer.
They had to write the rules down. Which elements survive at which size and why, which line breaks are approved, what the point-size steps are, where the safe area sits, what gets dropped first when the block overflows. That is a senior art director’s taste converted into declarations, and it costs hours of somebody arguing about a widow at 300x250. There is no version of this where we invent those rules for them.
They also had to take an auditable machine over an obedient one: it holds a lock, refuses to overwrite it, and hands a human the conflict. Less satisfying than a green light, and the only honest version.
The hardest part has a number on it. Putting an efficiency in an RFP response means living inside it afterward. Commit too little and you lose on price. Commit too much and you win the account unprofitably. The sheet doesn’t make that call. It means the call gets made against a measured run instead of a feeling.