CampaignForge AI - The Journey
Chapter 10: Eating Our Own Dog Food
Date: 2026-05-09 Vertical: B2B SaaS | Budget: $500/month
Where We Left Off
Chapter 9 resolved the architecture: three separate flows, each failing independently. The campaign graph runs campaigns. The journey content flow publishes chapters. The operator decides what crosses between them.
The pipeline was declared ready for real Meta Ads data. The diagnostic brain, the rework loop, the approval gates — all wired and tested. The missing piece was the API connection to feed live impression and conversion data into Agent 06.
Before connecting that wire, something else needed to be done. To run a real Meta campaign, there has to be a real landing page worth sending traffic to. That meant looking at the CampaignForge homepage with honest eyes.
The Problem With Looking at Your Own Work
CampaignForge AI has an Agent 00. Its job is to audit a landing page before any campaign strategy begins. It checks HTTP health, mobile readiness, and conversion readiness. The entire premise is that you should not spend money on ads that land on a page that is not ready to convert.
I had not run that check on my own homepage.
That is a meaningful gap when you are about to spend $500/month on paid Meta traffic targeting marketing managers and founders who have never heard of CampaignForge AI. Cold paid traffic is expensive. Every click that lands on a page and leaves without an action is a direct cost. The landing page is the final conversion layer — all the targeting, creative, and budget decisions upstream are only as good as what happens when someone actually arrives.
I commissioned an external audit of the page. The finding came back blunt: technically solid, but not built to convert cold paid traffic.
What the Audit Found
The full assessment: fast load time, HTTPS, mobile-ready. A good technical foundation. The conversion layer was the problem.
Critical issues:
- No customer testimonials, case studies, or social proof. B2B SaaS audiences need validation before converting. A marketing manager evaluating a tool they have never heard of is not going to give their email to a page that shows none.
- The CTA was an email link.
mailto:[email protected]?subject=CampaignForge AI Early Access. For cold paid traffic, that is not a CTA — it opens the user's mail client and asks them to compose an email. Most will not. - No pricing or ROI framing. B2B buyers evaluating a product that replaces agency spend need to understand what they are replacing and at what cost. The page gave them nothing.
- The "Actively building" status bar sat just below the hero. For the Build Journal audience — people following the development in public — it is context. For a cold visitor arriving from a Meta ad, it is a reason not to trust the product with their ad budget.
The headline:
> "From Brief to Live Campaign — Autonomously."
Accurate. But it does not mirror the language a person who has been running agency costs of $5,000/month would use when looking for an alternative. Message match from ad to landing page is a direct conversion lever. The headline was not pulling it.
The Irony Is the Point
Agent 00 exists because I believe you should not spend on ads that land on a broken page. The "broken" in the audit was not technical — HTTP status 200, valid SSL, mobile-responsive. The broken was conversion readiness.
That is exactly what Agent 00 is designed to catch. CRO score. Messaging clarity. Trust signals. Friction in the primary CTA path. The same categories the external audit flagged are the categories Agent 00 evaluates.
The product's own homepage failed the audit the product is built to run.
That is worth writing down. Not as a criticism — the page was built quickly to establish a web presence while the pipeline was being built. But it is the clearest possible demonstration of why Agent 00 sits at position zero in the pipeline. Spending money before that check runs is how you waste the budget the Cost Approval gate is designed to protect.
What Changed
Claude implemented the fixes directly, working from the audit findings.
Headline:
Before: "From Brief to Live Campaign — Autonomously."
After: "Replace Your Ad Agency With 12 AI Agents."
The new headline is the message a marketing manager spending $5K/month on an agency understands immediately. It mirrors the language a Meta ad targeting that person would use. Message match from ad to page — the specific lever the audit flagged.
Hero subheading — ROI anchor added:
The previous sub described what CampaignForge does. The new version opens by naming what it replaces:
> "Most SaaS teams spend $3,000–$8,000/month on agency fees. CampaignForge AI handles strategy, creative, launch, and optimisation across Meta, Google, and LinkedIn — autonomously, with your approval at every gate."
The buyer now has a reference point before they read anything else.
Primary CTA — email link replaced with a waitlist form:
The mailto: link is gone. Clicking the primary CTA now opens a modal with a proper form: name, work email, and monthly ad spend. The monthly ad spend field doubles as a lead qualification signal — it tells me immediately whether the person submitting has a budget worth the early access conversation.
The form submits via Formspree (@formspree/ajax CDN, form ID xkoypnaj). The library handles field-level validation errors, button disabling during submission, and the success state reveal — no manual fetch code, no custom DOM toggling. On success, the form is replaced with a confirmation.
Hero stat — replaced:
Before: 263+ Tests Passing
After: ~$5K/mo Agency Cost Replaced
Tests passing is an engineering metric. Cold traffic does not care. The new stat is a buyer metric — it frames the value proposition in the same currency as the problem being solved.
"Actively building" status bar — removed:
Replaced with a slim social proof strip: pipeline running on real briefs, 9 chapters of transparent build logs, HTTPS and mobile-ready, no spend without operator sign-off. The same information reframed from "this is not finished" to "here is what you can trust."
The Formspree Integration
The @formspree/ajax CDN library was chosen over a manual fetch implementation for one reason: it handles the error states that a manual implementation typically skips.
A manual fetch either succeeds or shows an alert. The Formspree library surfaces field-level errors — if a required field is missing or the email format fails server-side validation, the error appears next to the field, not as a generic modal. The data-fs-submit-btn attribute disables the button during submission. The data-fs-success attribute reveals the confirmation block when Formspree returns 200.
The integration pattern:
<form id="waitlistForm">
<input type="email" name="email" data-fs-field>
<span data-fs-error="email"></span>
<button data-fs-submit-btn>Request Early Access</button>
</form>
<div data-fs-success>You're on the list!</div>
<script>
window.formspree = window.formspree || function() { (formspree.q = formspree.q || []).push(arguments); };
formspree('initForm', { formElement: '#waitlistForm', formId: 'xkoypnaj' });
</script>
<script src="https://unpkg.com/@formspree/ajax@1" defer></script>
No bundler. No npm. One script tag.
The Honest State After Chapter 10
What changed on the homepage:
- Headline → "Replace Your Ad Agency With 12 AI Agents"
- Hero sub → opens with the agency cost anchor ($3K–$8K/mo)
- Primary CTA → modal waitlist form (name, email, monthly spend), replaces
mailto:link - Hero stat → "~$5K/mo Agency Cost Replaced" replaces "263+ Tests Passing"
- "Actively building" status bar → removed, replaced with a social proof strip
- Formspree integration via
@formspree/ajaxCDN — field-level error handling, success state, button state management
What did not change:
- Page structure, branding, and Bootstrap layout
- How It Works, Features, Approval Gates, and Journey CTA sections
- No server-side code, no build step — plain HTML/CSS/JS deployed via Cloudflare Pages
What this demonstrated:
- Agent 00's audit categories are real. Conversion readiness, CRO score, message clarity — these are not theoretical checks. The product's own homepage failed them.
- The full audit → diagnosis → implementation loop took one session. External audit provided the findings. Claude implemented the fixes from the detailed recommendations. The homepage that was about to receive paid traffic now has a functioning CTA, a qualified lead capture form, and messaging that matches the audience it is targeting.
What Comes Next
The homepage is ready to receive paid traffic. The waitlist form is live. The Formspree endpoint captures name, email, and monthly ad spend for every submission.
The next step is the one that has been the stated next step since Chapter 9: connecting the Meta Ads API to Agent 06 so that the performance data flowing into the diagnostic brain is real, not fixture data. A campaign run. Real impressions, real clicks, real conversion numbers feeding a real diagnosis.
The pipeline has been ready for this for two chapters. The landing page is now ready for it too.