Skip to main content
Jun 25, 2026 · 7 min

The fence around the machine

When generating a page costs nothing, the page isn't the product. The gate that decides whether it ships is.

Khoa

The scariest thing about generating content at scale is how easy it is to generate bad content at scale. A model that can write a thousand pages can write a thousand mediocre ones just as fast, and publish them under your name. So the most important thing I built for SoiTarot wasn't a generator. It was a fence — the set of automated checks every page had to clear before it was allowed to exist. This is the quality half of the build.

Quality can't be a vibe at scale

When you write by hand, quality control is just you, reading. That doesn't survive contact with volume. The moment a pipeline is producing pages faster than a human can read them, "I'll check the output" becomes a fiction. Quality has to be encoded — turned into rules a machine applies to every page, every time, with no tired afternoons.

So every generated page ran a gauntlet in CI before it could ship. If it failed any check, it didn't publish — full stop.

GateWhat it rejects
Banned-words listDeterministic fortune-telling claims ("you will…") — for taste and for risk
Natural-language ruleTranslated-sounding, stiff, or templated Vietnamese
Structure checkPages missing the SEO scaffolding (headings, schema, internal links)
Freshness + indexingStale dates; IndexNow fired automatically on every deploy

None of these are clever. That's the point — they're cheap, mechanical, and absolutely unforgiving, which is exactly what you want standing between a generator and the public.

The banned-words list did more than protect taste

The fortune-telling filter is worth dwelling on, because it's where ethics and SEO happened to agree. A tarot site that promises deterministic outcomes — this card means you will get the job — is both distasteful and a liability. Banning that language forced every page toward the honest framing: reflection, not prediction. That's better for the reader, lower-risk for me, and, as it turns out, the kind of measured tone that ranks. One small rule, three problems handled.

The generator was never the product. The fence was. Anyone can make a thousand pages; the work is deciding, once and mechanically, which thousand are allowed to exist.

A fence is taste you only have to apply once

This is the move I keep coming back to across the whole project. Doing quality control by hand is paying the same tax a thousand times. Encoding it in a gate is paying it once — you spend a hard hour deciding what "good" means precisely enough that a check can enforce it, and then it runs forever, on every page, while you sleep.

It also reframes what a solo builder actually does. I didn't write fifteen thousand pages. I wrote the rules fifteen thousand pages had to obey — which is a smaller, sharper, and far more leveraged job. The fence is why the combinatorial firehose of pages didn't turn into index-bloating junk, and it's the verbal cousin of the single locked art direction that kept the images in line.

Generation is solved and basically free. What isn't free — what's now the entire job — is the judgment to build the fence, and the discipline to let nothing past it.