At UENI, customer websites are generated by an AI pipeline the team calls WPPA. It takes an Elementor master template, reads the placeholder slots in it, and fills each one with copy and imagery written from the customer’s own intake data. One template becomes hundreds of different small-business sites.
I did not build WPPA. My job is the layer it reads: the placeholder tagging system across roughly thirty template families, each with a business, services and store variant. If a slot is named badly, every site generated from that template inherits the mistake.
What the AI actually receives
The first thing I did was stop guessing and find out exactly what the model gets for each field.
It gets the field’s name, a length instruction, a brief for the section and a brief for the page. It never sees the sample text that sits in the template. That sample does two jobs, and neither of them is “example for the AI”: its word count becomes the length instruction, and it makes the template look finished to the humans editing it.
That one fact reorganised everything. A beautifully written sample paragraph is invisible to the model. A careless name is not.
The name carries the subject
Because the model never sees the sample, the placeholder name is the subject. And it is read literally.
The cleanest example: an image slot called Hands-At-Work. The intent was a craftsperson busy at a task. What came back was hands. Just hands, disembodied, at work. The model did exactly what it was told.
It goes further than one field. The section briefs are written fresh on every build from the customer’s data and from the placeholder names in that section. So a name does not just steer its own slot, it steers the brief for everything around it. Name a section’s slots after the template’s sample business and the whole section drifts toward that business.
The sample carries the length
The split of roles is clean once you see it: the name sets what a field is about, the sample’s word count sets how long it is.
Which means renaming a slot cannot fix a field that comes back too long. Only editing the sample can. I learned to read every proposed change for both parts, because a “rename” that also quietly shortened the sample would look like the rename had worked.
Some things are not worth tagging
Not every piece of text should be a slot. Button labels like “Read More” or “Send Message” are generic UI chrome. The model, given a two-word slot and no sample, reached the same generic label anyway. Tagging them adds risk and no value. To keep a label fixed, you leave the widget without a placeholder.
The same goes, more seriously, for anything that must not be invented: reviews, ratings, statistics, awards, people. Those sections get their surrounding copy tagged and nothing else.
Verified is not generated
The last lesson is about time. WPPA builds from a snapshot taken when a template is captured, not from the live template. I can rename, retag and verify a slot over REST, see it correct on the site, and still have it change nothing for customers until the team re-captures.
So “done” has two meanings, and the reports I write say which one applies.
Why this was worth doing carefully
Prompt engineering usually means writing one prompt. Here the prompt is distributed across hundreds of names inside a visual page builder, written by different people over time, and read by a model that takes them at their word.
Treating those names as an interface, with rules, a vocabulary and a linter, is what turned a set of templates into something that generates predictably. The tooling that makes that possible is the next post.