← All work
AI · SaaS · LIVE

Campaign Fleet

An AI marketing service that writes a week of marketing for each product and checks every line against facts the customer has confirmed. Product design for a SaaS product now live at campaignfleet.com.

Campaign Fleet on desktop and phone: the home page with its map of facts and claims, the mobile home page, and the claim-recall demo on a phone

AI tools can write a week of marketing in minutes, which is exactly the problem: they can also invent a figure nobody measured, call a product “the fastest” when nobody timed it, and keep repeating an old price long after the website changed. For a small team, one wrong number in one email can cost a refund and a customer's trust. The design question was how to make AI-written marketing something a person can actually stand behind.

01
Discover

I mapped the ways AI-written marketing goes wrong for a small business: invented figures, unverified superlatives, and claims that quietly go out of date. The common thread was not the quality of the writing. It was that nobody could tell where a statement came from, or which pieces were affected when something changed.

02
Define

So the product is built around the confirmed fact, not the post. Every claim cites a fact confirmed from the customer's own site; a claim with no source is blocked rather than softened; and when a fact changes, every piece that repeated it is recalled. Approval and posting stay with a person. The AI drafts, but it never has the last word.

03
Design

I made the record visible everywhere: numbered sources inline in every draft, blocked lines shown rather than hidden, and recalled pieces stamped and paired with a corrected draft. The marketing site follows the same rule. Instead of describing recall, it runs a working demo on a made-up shop, so a visitor sees the product's central idea before reading a feature list.

OUTCOME

Live at campaignfleet.com in early access, with plans from $49 a month and a first payment the customer can refund themselves within 14 days.

SELECTED SCREENS

From the promise to a working recall

Six screens from the live site at campaignfleet.com, including the interactive demo before and after its one button is pressed.

HOME
The promise, drawn as a record

The headline states the deal in two lines: the writing is done for you, and nothing is shown to you unchecked. Beside it, the fact sheet is drawn as a live map, with facts as fixed points, claims orbiting them and agents moving between read, review and approve, under a running count of claims, facts and recalls. The visual argument is that the system keeps a record, not that it writes fast.

WHY · THE PROBLEM
Show the refusal, not just the output

AI writing fills a page in seconds, but it can also invent a number nobody measured or call you “the fastest” when nobody timed it. So the example on this section is a checked post where two lines carry a numbered source and the third, a superlative, is marked no source: blocked. The product's value is the line it refuses to publish, so the page shows that line.

TRY IT NOW · BEFORE
A working demo instead of a description

Recall is hard to explain and easy to show, so the landing page runs it on a made-up shop. On the left is the fact sheet, each fact confirmed from a line of the shop's own site. On the right are three published pieces, each citation numbered back to a fact. One button changes the price on the site.

TRY IT NOW · AFTER
Every piece that repeated the old price, pulled back

Press it and the fact updates, the two pieces that quoted $29 are stamped Recalled, and each gets a corrected draft queued for approval. The blog brief, which never mentioned the price, stays published. The demo makes the core design rule visible: a change to one fact reaches exactly the pieces that depended on it, and no others.

WHAT YOU GET
Control as a setting, not a promise

Each capability is described by what the customer sees rather than how the model works: proof behind every line, a warning when a fact changes, and approval the customer sets per product and channel, from approving every piece to letting a reviewer agent take routine ones. Five cases always come back to a person regardless, including the first piece on a new channel, anything marked as regulated and anything that spends money.

PRICING
Priced by products, not seats

The unit that grows with the customer's work is the number of products being marketed, so that is what the plans count: Solo, Portfolio and Agency. Every feature is in every plan and teammates are unlimited, which keeps the comparison to one question. The terms sit in plain text under the cards: you can try it without risk and refund your first payment yourself within 14 days.

ACROSS DEVICES

One responsive product on phone, tablet and desktop

Campaign Fleet's site and app are one responsive web product. These are live screens captured from campaignfleet.com and app.campaignfleet.com: in Safari's engine at iPhone 15 and iPad Pro 11 size, in Chrome at Pixel 7 size and on a 1440-pixel desktop, shown in iOS, Android, iPad and browser frames.

iOS

iPhone 15 · 390 × 844 pt · Safari
IPHONE 15 · SAFARI · HOME
The radar plays first, even on a phone

The hero is the product working: facts as points, claims as lines, and a price that changes and pulls back the sixteen pieces that quoted it. On a phone it comes before the headline, so the first thing a visitor sees is the promise kept, then the words for it.

IPHONE 15 · TRY IT NOW
A working demo under one thumb

The recall demo stacks into one column: the fact sheet, each fact with the page and line it came from, then a full-width button to change the price. Press it and the posts below are recalled in place, so the demo works without leaving the page or zooming.

IPHONE 15 · SIGN IN
One field, no password

The app's sign-in is an email field and one button. The link arrives by email, so there is no password to type on a phone keyboard, and the note under the button says so before anyone wonders.

Android

Pixel 7 · 412 × 915 dp · Chrome
PIXEL 7 · CHROME · HOW IT WORKS
Says who does each step

Every step names who does it: you, an AI model or fixed code. Only two of the eight involve a model, and the page says so near the top. At phone width the steps run as one numbered column.

PIXEL 7 · WHAT YOU GET
Square cards, one per promise

Features are square-cornered sheets with a thin rule and a corner tick, like entries in a log. Each holds one promise and how it is kept, so a reader can stop after any card and still have the whole of that point.

PIXEL 7 · PRICING
Priced by product, read in a column

Plans are chosen by how many products you run, not by seats, and each plan stacks into a full-width card with its price in the mono figure style and its limits as a short list.

Tablet

iPad Pro 11 · 834 × 1194 pt · Safari
IPAD PRO 11 · SAFARI · HOME
The radar gets the width

At tablet width the menu fits on one line and the radar takes the full width, with the headline and the green line that carries the promise directly under it.

IPAD PRO 11 · TRY IT NOW
Cause and effect on one screen

On a tablet the fact sheet and the posts that quote it fit on one screen, so a changed price and the pieces it recalls in red are visible together without scrolling between them.

Desktop

1440 × 900 · Chrome
DESKTOP · 1440 × 900 · THE WEEK
The weekly loop, drawn as an orbit

On a wide screen the week is shown twice: as five written steps and as five points on one orbit, read, plan, draft, review and approve. The loop is the product, so the page draws it as one.

DESKTOP · HOW IT WORKS
A long read, set like a document

How it works is meant to be read in full, so it runs as one measured column with each step's owner in mono under its title. The light headline weight keeps a long page calm.

DESIGN SYSTEM

How I built Campaign Fleet from its design system

As the product designer I made one rule carry the whole look: colour means a state, never decoration. Everything else stays cold, dark and square so the states are what you notice. I then wrote the system down from the live stylesheet, with a script reading the values out of the CSS, so the site, the app and the emails all come from one set of decisions.

  1. Make colour a state

    Green for what is on the record, red for what was recalled, amber for the step waiting on a person, muted for retired. Nothing else gets those hues, and the green action button shares the green of a proven claim.

  2. Set records in mono

    Claims, sources, labels and figures are IBM Plex Mono, so anything a reader might check against a source looks checkable. Reading text is Plex Sans, with light headlines rather than bold ones.

  3. Keep it square

    Every sheet, field, button and chip has square corners, like a ledger. Only the dots on the radar are round, which makes the radar the one soft thing on the page.

  4. One system, three surfaces

    The marketing site, the signed-in app and the emails share the tokens, so signing in does not change the look. The phone, tablet and desktop screens above are that one system.

ONE DECISION, TOKEN TO SCREEN
Red means recalled, and says so

The recall state is five tokens: the red, its dark wash, the green it is set against, the mono stamp style and square corners. They make the stamp and the recalled line, and the live demo shows both the moment a price changes. The word “Recalled” is always there, so the state never depends on telling red from green.

23colour primitives, read from the live stylesheet
22chrome variables, each pointing to a primitive
4record states as modes of one collection
6.4:1lowest contrast of any text pair
RECORD STATES · ONE MODE EACH
Four states, three variables

Every fact, draft and post is waiting, on the record, recalled or retired. In Figma each state is a mode of the same three variables (text, fill and edge), so a designer sets a frame's mode and its chip, background and edge all change together. Every state also carries its word, and recalled lines are struck through, so the state never depends on telling red from green.

CHROME · ONE NIGHT MODE
Named for what they do

Chrome variables are named by role and point to primitives named by value. The green that marks a confirmed fact is also the only filled button, so the one action on a page and the proof behind it share a colour.

TYPE · IBM PLEX SANS AND MONO
Light headlines, mono records

Eleven text styles. Headlines are light rather than bold, which keeps a page about trust from shouting. Mono marks anything a reader might check against a source, and nothing is set under 14px.

SHAPE, SPACE, DEPTH
Measured before it was handed over

Every text pair passes, the lowest at 6.4:1 (red on its own wash). Building the tokens also showed two colours written as literals in the CSS rather than as variables, the control border and the lead-text frost; they are primitives in Figma so the file and the code can be brought back into step.

WHAT THE AUDIT FOUND
Two colours outside the system

Reading the CSS turned up two values written as raw hex instead of tokens: the outline button border and the lead-paragraph text colour. I added them as named colours so the file matches the product, and flagged them to become proper CSS variables so the two can’t drift.

HANDED OVER
In Figma and in Claude Design

A Figma kit of layered boards with the tokens as variables, with each record state as a mode, plus a plugin that rebuilds the live pages as editable layers. The same system is set up in Claude Design, so an AI agent building for Campaign Fleet starts from the real rules.

All work
GET IN TOUCH

Open to senior product design roles

Remote (US hours), hybrid or onsite — full-time or contract. Happy to walk through the decisions behind any case study here.

Email betayards@gmail.com →