Case study ยท AI prototype ยท 2-week build ยท Junโ€“Jul 2026

CampaignForge

Turns one brief into 5 ad copies, a self-hostable landing page, and a 3-email welcome sequence in a single pass. Built for affiliate media buyers who buy traffic, capture opt-ins, and monetize via email. Three platform deploys from one button.

5 hrs
Down to minutes per package
3
Platform deploys in one click
96%
Message consistency score
2 wks
From research to working prototype
CampaignForge landing page โ€” hero with pitch metrics: 5 hrs to minutes, 2ร— throughput, 96% angle match
CampaignForge landing page, built as an internal pitch deck

The invitation

An automated outreach campaign found me for a build challenge run by It's Today Media, an affiliate marketing company based in Baltimore. Their operational mission is explicit: "We buy media at scale to build email and SMS lists." That is not e-commerce. That is list-building: buy traffic, capture opt-ins, nurture, monetize. I used the invitation as a catalyst. Not because of the contest, but because I had already been sitting on a thesis about a gap in this exact market.

The gap nobody fills

I spent the first week reading every adjacent tool before writing a line of code. Jasper, Copy.ai, HubSpot Campaign Assistant, Anyword. They all generate ad copy from a brief. Done. That territory is settled.

The gap nobody fills is the intersection of three things: deploy-ready self-hostable landing page HTML, labeled angle ร— formula A/B system, and an affiliate list-building email arc. All three from one brief, in one pass.

CampaignForge problem section โ€” three pain cards: copywriter bottleneck, LP dev time, message drift
The three structural pains: copywriter bottleneck, LP dev time, message drift

Message match is where the money is

A 2014 Moz study, reproduced by Disruptive Advertising across 500+ accounts, measured a 212.74% conversion rate lift and a 69.39% CPA reduction when ad copy and landing page carry the same message. KlientBoost separately measured a 66% CVR lift from matched messaging alone. Those are not rounding errors.

And yet most tools generate ad copy in one session, the landing page in another, the email in a third. The angle drifts. The message fractures. I generate all three in one call, so it cannot drift โ€” because the LLM never gets a chance to reframe the offer between assets.

CampaignForge solution section โ€” faux app frame showing generated output with 4 tabs
One brief in, three assets out โ€” all on the same page

How the pipeline works

Instead of one mega-call that tries to produce everything at once, the pipeline splits into four focused stages. Stage 1 generates five ad copy variants, each tagged with its persuasion angle and DR formula: Fear ร— PAS, Curiosity ร— Slippery Slide, Social Proof ร— AIDA, Aspiration ร— BAB, Authority ร— QUEST. Stage 2 generates landing pages in parallel โ€” one per angle. Stage 3 writes the three-email cold-traffic arc. Stage 4 audits message consistency across all assets and scores it.

The email arc is specific to affiliate list-building. Email 1 delivers the lead magnet with zero affiliate links. Email 2 tells a story with a real name, age, location, number. Email 3 surfaces the offer as a recommendation, not a pitch. This is not generic marketing. Cold traffic needs trust before offer, every time.

CampaignForge app โ€” brief form with 5 fields and sample topic picker
The brief form โ€” five fields, one Generate button, sample topics for quick testing

Deploy Hub: one click, three platforms

The part that closes the loop. One button fires three deployment channels in sequence. First, the landing page goes live via Vercel REST API โ€” a single zero-dependency HTML file uploaded inline, live URL in two to five seconds. Then that URL becomes the destination for Meta Ads, pushed via Pipeboard MCP as a paused campaign with five creatives. Zero spend until you hit publish. Meanwhile, the three-email drip sequence lands as draft campaigns in Brevo, attached to an empty subscriber list as a safety net.

Each platform integration went through its own decision. Vercel REST over Cloudflare Workers because Vercel accepts arbitrary HTML inline โ€” no wrapping, no escaping. MCP HTTP over CLI subprocess because serverless functions cannot spawn binaries. Brevo over Mailchimp because one API key header is cleaner than MCP token toggles, and the free tier fits a pilot.

CampaignForge impact section โ€” before/after comparison showing 50 hours saved per month
The math: 20 campaigns/month ร— 5 hours = 100 hours of production. CampaignForge cuts that in half.

What the operator's data said

The team runs about 20 campaigns per month. Each campaign package โ€” ad copy, landing page, emails โ€” takes roughly 5 hours across several people. That is 100 hours a month spent on production alone, roughly 60% of one full-time role.

With CampaignForge, the generation itself takes under 30 minutes. Add 2 hours for polish and QA, and the package drops from 5 hours to 2.5. That is 50 hours a month freed up โ€” enough to double throughput with the same team, or redirect capacity into A/B testing and optimization that rarely gets done.

CampaignForge how-it-works page โ€” under the hood section showing each vendor, role, and why it was picked
The transparency page โ€” every vendor, component, and MVP status badge

What happened next

The challenge closed. Matt wrote back honestly โ€” the outreach was automated, and being based in Indonesia was the deciding factor. Timezone overlap and US work situation made it tough to move forward. He had a strong pool of candidates to choose from.

I did not continue to production. But the thesis I brought to week one was proven by week two. One brief, one pipeline, three platform deploys, 96% message consistency. The gap I found in the research was real, and it was closeable in two weeks of focused work. That is the version worth documenting.

The decisions that mattered

Every non-trivial choice, documented and verifiable from source.

Single LP vs five. The concept called for five angle-matched landing pages. Reality: reasoning models burn token budget fast. The pipeline generates five in parallel when budget allows, falls back to one when it does not.

Vercel REST over Cloudflare. Vercel accepts arbitrary HTML as inline file data. Cloudflare Workers would need the HTML wrapped into Worker source with escaped quotes. One credential instead of two.

MCP HTTP over CLI subprocess. The first prototype spawned the Pipeboard CLI binary. It worked locally but broke on Vercel โ€” serverless functions cannot spawn processes. Direct JSON-RPC over HTTP fixed it. Zero install for the user.

Sequential multi-call over one mega-call. One call for all assets meant the model ran out of output tokens halfway through the emails. Four focused stages with dedicated token budgets solved it, with fault isolation as a bonus.

Stack

Next.js 16 App Router, React 19, Vercel AI SDK v7 with structured output via Zod v4. Provider layer supports both OpenCode Go and Z.AI Coding Plan โ€” 16 models total, switchable without re-entering keys. Tailwind v4 for the dark theme. Zero database, zero auth, zero server-side state. BYOK from localStorage. Deployed on Vercel Hobby, free tier.

CampaignForge how-it-works page โ€” setup guide with 4 steps and honest MVP status badges
How it works page โ€” setup guide and technical transparency with MVP status badges

The cheapest way to learn if a gap is real is to build the smallest thing that closes it.