Context
On Fluent's Walmart Connect team, producing pitch-ready ad mockups for advertiser decks was a manual, repetitive design task. Every new ad concept meant compositing a brand's logo and offer copy onto locked screen templates by hand in Photoshop, one asset at a time. Having noticed this bottleneck firsthand, I built an internal tool to automate it.
The Problem
Manual mockup production didn't scale. Every new advertiser or campaign meant repeating the same compositing work by hand, and that time came directly out of hours better spent on strategy and client-facing work. There was no standardized way to produce a new mockup quickly, correctly, and consistently across the many ad placement formats the team worked with.
Approach
I built the tool as a reusable internal project: a Python-based image-compositing pipeline that takes a brand's logo and offer copy and automatically places them onto locked base ad templates, producing pitch-ready output without manual design work. A few principles guided how I built it:
- Touch only what changes: the pipeline swaps just the logo, headline, and copy, leaving every other pixel of the original template untouched
- Never distort a brand's logo: logos are scaled proportionally, never stretched to fit a slot
- Sample, don't guess: background colors behind a swapped element are sampled dynamically from the image itself rather than hardcoded, so the tool adapts to new templates without manual recalibration
- Guide the input: an intake step asks for the right fields depending on which ad format is being produced, so using the tool doesn't require memorizing what each template needs
What I Built
The finished tool supports 12 distinct ad placement types across the team's major product lines, and produces a finished, deck-ready mockup in a fraction of the time manual compositing took.
Adoption & Impact
The tool is now used by multiple teammates for day-to-day mockup production, not just by me, and it was recognized internally in Fluent's company-wide innovation challenge for AI-powered tools. It's also been used in live team training sessions to demonstrate practical, AI-assisted workflows to colleagues outside my immediate team.
Reflection
The hardest part of this project wasn't the first version, it was making the tool reliable enough that a teammate could use it without me in the room to troubleshoot edge cases. Early versions technically worked but broke in subtle ways, a slightly misaligned line of text, a logo edge that didn't quite match its background, that weren't obvious until someone else actually tried using it. That pushed me to document fixes permanently rather than patch them one-off, a habit I'd now apply to any tool I build for someone else to rely on.