Our AI QA agent caught our own landing page contradicting itself

We pointed Prufa at prufa.dev. It found our meta tag promising a 60-second audit while the homepage said 2 minutes — a real trust bug on our own site.

We build an AI QA engineer. So before writing anything else about it, we did the obvious thing: we pointed it at our own homepage. On 2026-07-01 we ran the free Prufa audit against prufa.dev and read the report like a stranger would.

It found a real one. Not a broken link, not a missing tag. A contradiction in our own words.

What it caught

Our page <meta name="description"> — the copy that shows up in search results and link previews — promised a “free 60-second audit.” The body of the homepage, and the FAQ answer embedded as structured data, said the report lands “in under 2 minutes.”

Both sentences are individually fine. A link checker sees nothing wrong. A schema validator sees nothing wrong. Every string is valid on its own. The problem only exists in the relationship between them: a visitor who reads the search snippet (“60 seconds”) and then reads the page (“2 minutes”) sees us disagree with ourselves about the one number we lead with.

That is the kind of bug that survives every deterministic check and every human proofread, because nobody reads the meta tag and the FAQ back to back. A machine that reads the whole page at once does.

Why deterministic checks miss it

Most of what a QA tool reports is machine-checkable in the strict sense: this link returns 404, this image has no alt text, this header is absent. You can verify each one with plain code and no judgment.

A self-contradiction is different. “60 seconds” and “2 minutes” don’t conflict because of any rule you can write down in advance — they conflict because they are two answers to the same question. Deciding that takes a reading pass that understands meaning. That is exactly the kind of judgment we let the LLM make, and exactly the kind we refuse to trust blindly.

So the finding is gated. The reading pass has to quote both conflicting strings verbatim, and then plain code verifies both quotes actually appear on the page before the finding is allowed to exist. The model supplies the judgment that the two numbers disagree; the code supplies the proof that we didn’t imagine either one. If either string isn’t really on the page, there is no contradiction finding. This is the same split that runs through the whole product: the LLM navigates, the evidence decides.

What tier this finding is (and why we’re honest about it)

This was an advisory finding, not a verdict. Prufa never told us the page was “broken.” It flagged an inconsistency worth a look, in the advisory section of the report, and it was right. We treat contradictions as advisory on purpose: they are real and verifiable, but the fix is a copy decision a human should make, not a grade we should dock you for automatically.

The honest footnote: when we first ran it, this finding sat at the bottom of the report in a flat “Advisory” bin, next to softer opinions like “your headline metaphor is a little vague.” That undersold it. A contradiction you can prove is a different animal from a matter of taste. So we’re giving that class its own “Consistency” section in the report — same advisory tier, much more visible.

The fix

We standardized on the number we lead with everywhere: the audit is a 60-second audit, in the meta tag, the homepage body, the FAQ, and the pricing microcopy. One claim, one number, no gap for a visitor to notice.

Total time to find it: about a minute. Total time to fix it: a few edits. That is the whole point of pointing the thing at yourself first.

The takeaway

We audited 49 Show HN launches and found that 78% shipped a critical bug on day one. Those are the loud failures. This one was quiet: a page that was live, indexed, and disagreeing with itself in a way no single check would catch. If you want to see what your own page says when it’s read all at once, run the free 60-second audit — no signup, no card. Then read the advisory section. That’s where the interesting stuff hides.

Frequently asked questions

Can a QA tool catch when website copy contradicts itself?

Yes, but it needs to read meaning, not just markup. A contradiction like a meta tag promising a '60-second audit' while the page body says 'under 2 minutes' is invisible to a link checker or a schema validator — both strings are individually valid. Catching it takes a reading pass that understands the two numbers conflict, then a check that both strings actually exist on the page before reporting it. Prufa does this on the free audit as an advisory finding.

Why is a copy contradiction a real problem and not just a nitpick?

Because visitors read your ad copy and your page in sequence. Someone who clicks a search result or a shared link promising a '60-second audit' and then lands on a page that says 'under 2 minutes' notices the gap, and the gap costs you a little trust at the exact moment you are asking for it. It is small individually and it compounds across a page full of claims.