Sixty posts I didn't write
Yesterday I took the password off the site; today I'm submitting the sitemap to Google. What I owe a text I didn't write, and what broke in the first hour.

By Georg Malahov
At 23:28 local time yesterday I took the password off the site. For six months it had been sitting behind a form with one field: without the password any visit hit a placeholder. This morning I'm verifying the domain in Search Console and submitting the sitemap — seventy-seven addresses, four products, sixty-one posts in three languages.
Submitted and read the same day: 77 addresses, status Success. This isn't the index yet — it's only the application
What opened
I started assembling the hub in April, after going through a year and a half of voice notes and counting sixteen projects. Today the domain holds four products, the blog and a timeline on the front page. The note base has six hundred and twenty-four entries, the first from 11 December 2024.
The blog is sixty-one posts, each in three languages, a hundred and eighty-three files. All dated honestly: the post about a January coworking space is dated January, not the day I assembled it. The feed reads like a chronicle because it is one — only it was published after the fact, all at once.
Three languages isn't decoration. Russian is my first language, the one I think and dictate in; German is the country I live and work in; English is what people search my products in. Russian comes first, and the other two aren't machine-translated but rewritten: each has its own set of turns of phrase that weren't in the original, and its own list of what mustn't be in it.
Before the password came off, the site was checked by more than my eyes. Eighteen pages across three languages, all returning 200. A sitemap with language alternates. Search markup on the front page and on every product. The RSS feed. Emails going out and arriving. A daily scheduled job on the server. A visit counter on every page. The list is long and dull, which is exactly why it was worth going through before the pages became visible.
What I don't do
I don't write the texts on this blog.
I dictate a voice note — in the car, on a walk, on the balcony in the evening. The note gets transcribed and broken down into a base: projects, people, decisions, milestones. A draft is assembled from the base. I read it, correct it and sign it off.
This was worth saying out loud, because otherwise it comes out as a quiet deception. A reader sees first person, a date and specifics, and fairly assumes a person sat behind every sentence. A person did sit there — just not at the work people usually picture.
So what do I owe a text I didn't write.
The only answer I've found: correct everything that raises a doubt. Any spot where my eye catches, where a phrase doesn't sound like something I'd say, where a fact looks suspicious, gets fixed. Not "good enough overall" but literally all of it. Carried through to the absolute, that produces a text I know almost by heart — which is exactly what would have happened had I written it myself. The difference is in how these texts get made, not in who answers for them.
What it looks like in practice
The proofreading is built so it can be done from a phone.
I open my own post on the site, select a piece of text and press a button. Then I speak the comment: what's wrong, what to replace it with, why. Comments accumulate and then leave as one batch into a GitHub issue. An agent picks them up from there: it applies the fix in all three languages at once and — more importantly — writes a rule out of it.
It feels close to a conversation. I read as an editor and say the comments out loud, as if whoever wrote this were sitting next to me and we were going through the text together. Then the fixes land, I re-read, and with each pass my eye catches less often.
The rulebook
The rules accumulate in a separate document. It currently runs to seventy-two sections and just over three thousand lines. It isn't a style guide but a record: what I said, why, and what it turned into.
For example: an employee's or a customer's name never appears in the text. My own word from a voice note licenses the thought but not the colloquialism — I speak and write differently. A headline can't be more dramatic than its own body. Nothing gets written about an individual user: what stays is only what I understood, with no trace by which a person could be recognised.
The mechanical half of the rulebook moved into a check that runs on every change: twenty-nine rules, withdrawn words, a ban on third-person self-reference, a requirement to name a month in a chronological post. Whatever a regular expression can catch is caught by the machine; the rest stays on the eye.
What broke
Four cases are worth naming, because they're all about the specific ways a generated text lies.
The rulebook started contradicting itself. One rule said: if the word is in the voice note, that's the author's voice, keep it. Another: colloquialisms come out. Both can't hold, and the notes are full of colloquialisms. It resolved by splitting them: the note licenses the content — that this thought and this image may be written at all — but not the register. The wording is chosen by written language.
One check rule stayed silent for months. It looked for a word boundary, and a word boundary in JavaScript only understands Latin script — on Russian text it never fired once. It surfaced when I wondered why a banned word had sailed through to publication. There turned out to be three copies of the same bug.
Three product guides were factually wrong. They were assembled from memory rather than from the code, and diverged from the product on the main point. The three drafts are deleted and the guides are being rewritten from the source.
A headline diverged from its own text. In the nine-month Call Copilot tally the body said it precisely: about a dozen people had paid over nine months, and one live subscription was left by the end of August. The headline said "one paying user". Yesterday's post picked up the headline rather than the body and built a turn on it that never happened. The tally is renamed, the post corrected.
The first night
I took the gate off at 21:28 UTC. The night went off plan from there.
Three files pointed at a host that doesn't exist. robots.txt, sitemap.xml and llms.txt were serving addresses like http://build.invalid — the placeholder the image is built with. Those three routes rendered at build time rather than per request, and had memorised it for good. That sitemap couldn't go to Google: three hundred and eight addresses led to a host that isn't there. The pages themselves were fine — they're rendered on request.
The front page didn't name the person. The title and description were the defaults of the template this project started from — identical in three languages, about developer tools. For six months I'd been writing texts in the first person while the shopfront introduced an anonymous template.
By morning, a crawl of every page in the sitemap across three languages gave zero broken links across three hundred and eighteen internal ones. The only remaining complaints were about length: some post descriptions run past a hundred and sixty characters, and search will cut off the tail.
Closed by morning
The loose ends I left for a fresh head overnight are closed by morning: product page titles now say what the product does rather than only what it's called; the legal texts under the German and Russian addresses stopped carrying an English title; addresses with an /en prefix lead to the prefix-free ones; and production got a readiness check, so a deploy no longer drops pages for a few seconds.
What I'll count as a result
There is no external traffic — I established that back in August, and the hub was built because of it. So the check is simple: someone arrives at a post from search. Not through my link, not from my email, on their own.
An honest caveat: the first arrivals probably won't come from search. This week I wrote to cooled-off Call Copilot users and I intend to keep sending them links to posts. Those are arrivals too, but I brought them myself. I'll count the two separately: mine and search. The first one from search is the number this was all for.
The count hasn't started: instead of numbers, Google suggests coming back in a day or so
There's nothing to measure yet: where the figures go, Google says the data is being processed and suggests coming back in a day or so. Indexing takes weeks, so the next note on this won't come soon.
We'll see.