My Site Was Lying to People
Loads from YouTube only when you press play. Watch on YouTube
I have a side project that hosts a few small apps under one roof. It is a hobby: a mix of personal things and work-adjacent things, built on nights and days off around a restaurant job. Nobody is paying for it, which is exactly why it is a good place to be honest about what building software actually looks like.
I had not opened its issue tracker since May.
So instead of adding anything, I went through what was already there. The code, the deployments, and the documentation. What I found was that my own site had been telling visitors two things that were not true, and I was the last to know.
The two lies
One page reported "3 of 4 signals live." Underneath that sentence were four hardcoded constants. Nothing was live. The page was not broken in any way a visitor could see — it looked confident and specific, which is worse than looking broken.
The other was a booking form. You filled it in, pressed the button, and it said "Sent." The message went nowhere. There was no inbox behind it, and the form had never been wired to one. Anyone who tried to reach me through that page got a green tick and silence.
Both had been that way for months.
Neither was a bug in the sense of something crashing. They were both the software being confidently wrong, which is the failure mode I care most about — and the one I spend most of my coaching time on, because it is what makes people stop trusting the tools entirely.
What actually found them
Not me reading the code. I have read that code plenty of times.
What found them was an audit run by agents, in two passes, with one rule that made the difference: every finding was handed to a second agent whose only job was to argue it down. Not to confirm it. To refute it.
That produced 140 findings. Of the ones that have been judged so far, about a third did not survive the argument. They were plausible, they read like real problems, and they dissolved the moment something pushed back.
That ratio is the most useful number in this whole exercise. A list of 140 problems sounds like a catastrophe. A list of 140 problems where a third are wrong is a research tool — and if I had not built the refutation step, I would have spent a week fixing things that were not broken while the two real lies sat there untouched.
There is a version of this you can do without any agents at all: write down what you think is wrong, then genuinely try to talk yourself out of each item before you touch it. The agents make it faster. They do not make it different.
The fixes were the boring part
The dashboard now says "Demonstration data." The booking form now returns an honest error and tells you to text or email instead. Both changes took minutes.
What I would keep from the whole exercise is not either fix. It is a small thing that shipped beside them.
A check that reports what is missing
I added a health endpoint to the site. Most health checks answer a single question, is it up?, and return a green tick.
This one returns what is missing:
{ "ok": true, "knowledge": "missing", "chunks": 0 }
There is an agent on that site meant to explain the projects to visitors. It has never had a knowledge base loaded. The build was quietly leaving the file out, because one line in a config told it to ignore it, and nothing ever said so out loud.
Now the site says so itself, to anyone who asks, including me.
I could have written "fix the knowledge base" on a list. Lists are where that kind of task goes to die quietly. Instead the state is published, and when it reads "loaded" with a real chunk count, the work is genuinely done. Nothing else can fake it — not a commit message, not a note to myself, not an agent reporting success.
A check that can only tell you good news is not a check. I have written that sentence in my own notes for months. This is the first time I built something that obeys it on a public URL.
Why I am publishing the unflattering version
Because the flattering version is not useful to anyone.
Every project I have ever seen has a gap between what it claims and what it does. The gap is not a character flaw. It is what happens when a thing is built over time by someone with other obligations. What varies is whether anyone looks, and whether the looking is honest enough to find the things that make you wince.
I write about testing before you trust it and about a routine that caught its own bug. This is the same idea pointed at my own work, which is the only place it costs me anything.
The project is still unfinished. There is a knowledge base that is not loaded, an audit tail that has not been judged, and a list of things I know are wrong and have not fixed yet. That is the honest state, and it is on the record now in a form I cannot quietly edit.
If you have a site that has been running for a while without anyone looking at it closely — that is the normal condition, not a confession. The useful question is not whether something is wrong. It is whether anything would tell you.
I teach people to use Claude, Google AI, and ChatGPT on their own device, with their own messy files. If you want a hand with something like this, the free 30-minute call is the place to start. No pitch.