Skip to main content
BuildSeptember 11, 20267 min read

We published 16 paddle reviews with the drafts still in them

Eleven of our paddle reviews shipped with a visible banner telling readers to verify the specs before publishing. Twelve TODO markers rendered as con bullets. Here's the audit, the corrections, and the build guard that makes it impossible to repeat.

by VincentAI-drafted, edited by Vincent
Someone checking items off a printed checklist
Photo by Jakub Żerdzicki on Unsplash

Eleven of our sixteen paddle reviews have been showing readers a blockquote that says, more or less, "Draft review. Specs estimated from category positioning. Verify with the manufacturer page before publishing."

On the published page. For about four months.

How it happened

Our content flow is documented and, I still think, basically sound. Three passes: an AI draft from a per-section prompt, an AI voice polish, then my edit. The draft prompt is deliberately built to leave placeholders rather than guess — if it can't verify a spec it writes TODO: verify instead of inventing a number. That's the right instinct. The whole design assumes those markers die in pass three.

They didn't. Twelve of them shipped inside cons: arrays, which means they rendered as literal bullet points in the cons list of a published review. A reader looking at the RPM V2 saw, as a stated downside of the paddle:

TODO: verify edge-guard quality and spin durability with current production batch

Our own voice guide lists this failure mode by name — "Vincent's editor pass becomes rubber-stamp" — under a heading called Failure modes to monitor. Writing the failure mode down did not prevent the failure mode. Nothing in CI checked for it, so the only thing standing between a draft artifact and production was me noticing, sixteen times.

What the audit turned up

I rechecked all sixteen against the manufacturers' own listings. The draft banners were the visible problem; they weren't the worst one.

Fifteen of sixteen prices were wrong. Not drifted — wrong. The JOOLA Hyperion CFS 16 was listed at $199.99 and sells for $159.95. The RPM V2 was listed at $199.99 and sells for $249.99. That's a $50 error in the direction that matters, on a page whose entire job is helping someone decide what to buy.

Five manufacturer links were dead. Four domains didn't resolve at all — aireopickleball.com, gruvnpickleball.com, speeduppickleball.com, thrivepickleballpaddles.com. The real ones are aireo-sports.com, gruvn.co, speeduppickle.com and thrivepb.com. The Engage link returned 404.

The Honolulu link was the instructive one. It resolved fine — to a real, live business that sells drawstring bags and maintains a court directory in Hawaii. Just not the company that makes the paddle. A plausible-looking wrong link is harder to notice than a broken one, because nothing errors.

Eleven of sixteen listed the wrong core material. They all said polypropylene honeycomb, which is the template default. Most of these are Gen-4 foam paddles: NCP foam in the Gherkin Draco, EPP with a TPE ring in the Thrive Ignite, PulseFoam in the Aireo Cyclone, a tectonic foam core in the Six Zero Coral. Exactly one paddle in the directory is genuinely polypropylene honeycomb — the JOOLA.

That last error is the one that actually embarrasses me, because it isn't a stale number. It's a category mistake in a document whose purpose is to explain how a paddle is built.

Fixing specs meant rewriting arguments

The Gherkin Draco was listed at 14mm. It's 16mm. That's a one-character change in the frontmatter and a rewrite of the review, because the review's thesis was built on the wrong number:

Solid sub-$200 power option from an emerging brand — thinner 14mm core makes this the pop-first pick if you don't need full 16mm forgiveness.

There is no thinner core. The argument inverts. What the Draco actually is: the cheapest way into a real full-foam paddle, an NCP core with a floating-piston build at $179.99, where foam construction usually starts $40 higher.

Same shape of problem on the RPM V2, whose pros bullet read "Thermoform construction at sub-$200" for a paddle that costs $249.99, and whose verdict claimed you were getting a Selkirk-class build "at half the price" — while the Selkirk it was comparing against sits at $200. Every price is quoted in the prose too, and the reviews cross-reference each other's prices, so correcting one number cascades into four other files.

The structured-data part

Every review emitted a schema.org/Product node with this in it:

"availability": "https://schema.org/InStock"

Hard-coded. For all sixteen. At the time of the audit, the JOOLA Hyperion and the Selkirk Boomstik were both out of stock, the GRUVN was sold out, and Engage had delisted the Pursuit Pro1 Widebody from its own collection page entirely.

We were making commerce claims to search engines about stock levels we had never once checked.

That's fixed at the root rather than by editing sixteen values. Availability now comes from a frontmatter field with an honest unknown option, and unknown emits no availability claim at all — because saying nothing is correct when you don't know, and InStock is a specific assertion. A checked price also gets a priceValidUntil one year out, so a stale price expires as a claim instead of standing indefinitely.

The built output now reads 9 InStock, 4 OutOfStock, 1 Discontinued, 2 making no claim.

Two I couldn't confirm, and said so

The instruction I gave myself was to verify against the manufacturer and flag anything I couldn't, rather than leave a TODO in the file. That produced two:

Nox Tempus prices in euros on its own store (€214.95). Converting would mean inventing an exchange rate and presenting it as a checked USD price, so the price is unchanged, carries no priceValidUntil, and is noted here instead.

Engage Pursuit Pro1 Widebody has been dropped from Engage's Pursuit Pro1 collection. The rest of the line now sells at $129.99. I couldn't confirm a current price for the Widebody specifically, so it's marked discontinued and its price is not restamped. The review stays up — a discontinued paddle is still worth reading about if you own one or see one across the net — but it says so now.

The guard

The fix that matters is thirty lines. A prebuild script walks every file under content/, and fails the build on TODO:, FIXME, **Draft review.** or before publishing.

It found something I hadn't. My own greps had turned up 23 artifacts across the two patterns I knew to look for. The guard found 24 — the extra one buried mid-sentence in a file that had no banner and no TODO marker:

the T700 weave holds spin grip noticeably longer (40+ hours of play in our pod's anecdotal testing — though Vincent's actual hands-on hours with this paddle are limited; verify before publishing)

That paddle is a $333 limited release. I have not put forty hours on it, and the review now says that plainly instead of hedging inside a parenthesis addressed to myself.

The guard is wired into the same prebuild step as our image-license check, so it runs before every production build. I injected a violation and confirmed it exits 1, then removed it and confirmed it exits 0 — a gate you've only ever seen pass is a gate you haven't tested.

What I'd say about the reviews now

They're accurate as of September 7, 2026, and each detail page shows the date its specs were rechecked, which the pages previously didn't display at all. The paddle index used to claim some buy links earn a commission; none of them do, so it says that instead.

The uncomfortable part isn't that a process failed. It's that the process document predicted this exact failure, in writing, and the prediction sat there being correct for four months. Writing down a failure mode isn't a control. A build that fails is a control.

Frequently asked questions

+How did draft text end up on the live site?

Our authoring flow is a three-pass process: an AI draft that deliberately leaves TODO markers, an AI voice polish, then a human edit that's supposed to resolve them. The third pass became a rubber stamp. Our own voice guide lists that exact failure mode; nothing in CI enforced it.

+Were any of the paddles made up?

No. Every one is a real product. Two were mis-modelled rather than invented — 11SIX24's Power 2 is a platform across four differently-priced shapes, not one SKU, and the Honolulu paddle's real name is the J2CR Crystal Blue.

+What was wrong with the structured data?

Every review emitted a schema.org Product with availability hard-coded to InStock and a price with no expiry. That asserted stock levels we'd never checked. Availability is now derived from a checked field, and a checked price gets a one-year priceValidUntil instead of standing forever.

+What stops this happening again?

A prebuild script scans every content file for TODO markers, draft banners and 'before publishing' notes, and fails the build if it finds any. It's wired into the same prebuild step as the image-license check, so a draft can't ship even if someone forgets.