📢
← Back to Blog

I Built a Seamless Premium A+ Generator With Claude Code and Gemini — Here's the Build Log

John Aspinall · · 7 min read

The hardest part of Premium A+ content isn't the design. It's the seams.

Premium A+ gives you five full-width modules stacked vertically. The premium look — the one you see on 88 Acres, on the best supplement and food brands — is when those five modules read as one continuous page. Color bands flow across the boundaries. A wave shape starts in module 2 and finishes in module 3. The eye never catches a seam.

Doing that by hand in Photoshop is fiddly, slow, and the kind of thing a designer charges real money for. So I built a tool that does it. This is the build log — the problem, the stack, the actual prompt structure, what broke, and what it costs me now.

The problem, in dollars

A custom Premium A+ page from a freelance designer runs $1,500 to $3,000 and takes a week to two weeks of back-and-forth. The seamless, flows-as-one-page version is the upper end of that, because most designers build each module as an island and then fight to make the edges line up.

I run creative for a lot of brands. At even a handful of Premium A+ builds a month, that's real money and real calendar time sitting in a queue. And the part eating the hours — edge continuity — is mechanical. It's exactly the kind of thing that should be a script, not a billable design sprint.

The manual cost I was trying to kill: roughly 6–10 hours of designer time per page just on getting five modules to stack cleanly, plus the agency markup on top.

The stack

I built it with Claude Code as the orchestrator and Gemini 2.5 Flash Image as the generator, glued together with Python and Pillow. Nothing exotic:

  • Gemini 2.5 Flash Image generates each module independently at its native 2.44:1 aspect ratio.
  • Pillow center-crops and LANCZOS-resizes every module to exactly 1464×600 (Amazon's Premium A+ module spec).
  • A seam spec — a small Python config — defines the four boundaries between the five modules. Each seam gets a shared background hex color and an optional shape that's meant to cross it.
  • A Pillow post-pass paints a 3px flat-color strip at each seam line. That's the insurance policy. More on why in a second.

The whole thing runs from one command:

python generate-stack.py --client pure-protein

It reads a per-client stack-spec.py, generates all five modules, enforces the seams, and assembles a stacked QA preview (1464×3000) so I can eyeball the full page before anything touches Seller Central.

How the seam logic actually works

This is the part that makes it look premium instead of looking like five stock banners glued together.

The trick is that every seam is one flat color, and each module is designed so its top 60px and bottom 60px are clean horizontal color fields — no text, no product, no busy imagery. Those zones are where wave curves and color blocks bleed across the boundary.

The seam spec looks like this:

SEAMS = {
    1: {"color": "#0FA3A3", "element": "a light wave curve silhouette"},
    2: {"color": "#F5F1E8", "element": None},
    3: {"color": "#1A2B4A", "element": None},
    4: {"color": "#F5F1E8", "element": None},
}

Seam 1 sits between module 1 and module 2. Seam 2 between 2 and 3. And so on. The engine feeds seams[N] as the bottom-edge instruction for module N and the top-edge instruction for module N+1 — so both sides of a boundary are told to end on the same color band.

Each module prompt carries explicit edge instructions. A simplified version of what gets sent to Gemini for module 2:

Full-width Amazon A+ module, 2.44:1.
[Brand note: teal #0FA3A3 + cream #F5F1E8 + navy palette, clean sans-serif,
premium-natural feel, wave motifs.]
Content: benefit panel — three icons with short headlines.
TOP EDGE: the top 60px must be a clean horizontal band of #0FA3A3 (teal),
with a light wave curve silhouette continuing downward from the band.
BOTTOM EDGE: the bottom 60px must be a clean horizontal band of #F5F1E8 (cream),
no text or product within that zone.

That edge discipline is 80% of the battle. The flat-color zones give the post-pass something clean to overwrite.

What broke (and how I fixed it)

Two things broke, predictably.

1. Gemini drifts the hex values near the edges. You ask for #0FA3A3 and you get something three or four hex values off at the very bottom row of pixels. Stacked next to the next module, that tiny drift reads as a visible step — a faint line across the page. Exactly the seam I was trying to kill.

The fix is the 3px bridge strip. After generation and resize, Pillow paints a hard 3px band of the exact seam hex right at each boundary. Gemini gets to do the creative work; Pillow guarantees the color match at the line. Continuity insurance. This single post-pass is what took the output from "pretty good" to "actually seamless."

2. Gemini drifts the product. Feed it a product photo and it'll occasionally invent a wrong wordmark or shift a flavor name. On a supplement tub that says "PURE PROTEIN" in an italic display face, it'd hand back "Pure Protien" in the wrong font half the time.

Two fixes. First, the product photo gets passed as an actual image part, not just described in text. Second, the module prompt gets aggressive about preservation: "preserve the exact 'PURE PROTEIN' wordmark from the attached photo, including the italic display face — do not redraw or restyle the label." And critically, I built per-module regeneration:

python generate-stack.py --client pure-protein --only m3
python generate-stack.py --client pure-protein --only m2,m4

So when module 3 drifts the label, I regenerate only module 3 in a few seconds instead of rebuilding the whole page and gambling on five fresh modules. That --only flag is the difference between a tool you fight and a tool you actually use.

The numbers

Per page, the Gemini generation cost is under $1 — five image generations plus the occasional module regenerate. Call it $1–2 all in even with a couple of reroll rounds.

Time: from a filled-out spec to five upload-ready PNGs plus a stacked QA preview is about 10 minutes, most of which is me reviewing the preview and re-prompting one or two modules. Against the 6–10 hours and $1,500–3,000 of the manual path, that's not an incremental improvement — it's a different category of cost.

The honest caveat: the strategy still takes human time. Deciding the five-module narrative, the seam colors, the brand palette, what each module needs to say — that's the spec, and the spec is where the judgment lives. The tool doesn't replace the merchandiser. It replaces the six hours of pixel-pushing after the merchandiser has decided what the page should do. AI generates direction and production; humans still own the strategy. That line hasn't moved.

What an operator could replicate

You don't need my exact tool. You need the pattern:

  • Treat continuity as a config, not a design step. Define your seam colors and edge zones up front. The "premium" look is mostly discipline at the boundaries, and discipline is automatable.
  • Generate, then enforce. Don't trust the image model to nail exact hex values or wordmarks. Let it do the creative lift, then run a deterministic post-pass (Pillow, a few lines) to lock the parts that have to be exact.
  • Build per-module regeneration from day one. The single biggest usability win was being able to re-roll one module without touching the other four. Without it, every drift costs you the whole page.
  • Keep a human on the spec. The tool is a force multiplier on execution, not a replacement for merchandising. If you hand it a bad five-module story, it'll produce a seamless bad page very fast.

This is the kind of build that used to be a "someday I'll learn Photoshop scripting" project. With Claude Code writing the Python and Gemini doing the rendering, it was an afternoon. The leverage isn't the AI generating a pretty image — it's the AI letting me turn a recurring six-hour design task into a ten-minute config-and-review loop, for the cost of a coffee.

Want results like these for your listings?

Book a free visual strategy audit and see exactly what changes your marketplace listings need.

Get Your Free Audit