DR NON●ARKARA
← W20 · The World in Twenty Minutes

Anniversary Special · A Day in the Life of a Vibecoder

SeriesW20
Item2026-09-19
Referencebrief-2026-09-15-special-vibecoder
Date2026-09-19
Extent13 min · 2,451 words
Made withscript Claude Opus 5 (hand-written from this project's own logs) · voice ElevenLabs eleven_multilingual_v2, cloned voice (cloud) · checked Whisper large-v3-turbo (local), whole episode, coverage 0.984 · published Claude Code
Full transcript

This morning, before my coffee was even hot, an episode of this show was already finished.

A computer on my desk in Bangkok had read the world's news. It picked the stories and wrote twenty minutes of radio. Then it spoke all of it in my voice, and sent it to Spotify and Apple.

I did not type a single line of it.

Hey guys, Non here, coffee in hand. This is a special. The show is a little over a month old, and today I want to show you exactly how it gets made. Not the hype. The actual day.

Because what I do now has a slightly silly name. It is called vibecoding. And I think almost anyone listening could learn a version of it. So I am going to walk you through one day, hour by hour, with the tools, the mistakes, and the numbers. No nonsense. Results only.

Let's start with what vibecoding actually is, because the name makes it sound like a lifestyle brand.

The term came from Andrej Karpathy, one of the founding members of OpenAI, early last year. Vibecoding means you build software by describing what you want in plain language. An AI writes the code. You judge whether the result works. You do not memorise syntax. You never need to know where the semicolons go.

So what is left for the human? Three things the machine cannot hold for you. The purpose, meaning who this is actually for. The taste, meaning what good looks like. And the judgment, meaning whether the result is true.

The machine holds everything else. The libraries, the file names, the order the code runs in. I call this being a director, not a typist.

Here is my toolbox, so you can picture it. Claude Code is my main builder. It lives in my terminal and on my desktop, and it writes and runs code on my own machine. A local model called Gemma writes the daily scripts, running free on my laptop through a program called Ollama. A voice model called F5 turns text into my voice. Another model, Whisper, listens back and checks what was actually said. Cloudflare stores the files and serves them to the world.

And today, for this special, the voice you are hearing was made by ElevenLabs, a paid service, because I wanted this one to be perfect. Every other tool on that list costs me nothing to run.

Six in the morning. The machine wakes up.

Here is what happens while I sleep. A scheduler on the laptop starts a script. The first thing the script does is check that the internet is actually awake. Twice, it tried to read the news before the Wi-Fi had connected, and published nothing.

Then it reads the feeds. The Economist, the BBC, Al Jazeera, NPR, Nikkei Asia, and Hacker News. It ranks the stories, drops anything the show led with in the last three days, and picks five.

Then Gemma writes. Not the whole episode at once, but one story at a time, about five hundred words each. I learned that the hard way. Ask a small local model for a three-thousand-word episode and it forgets the rules halfway through. Ask it for five hundred words on one story and it holds the voice.

Then come the gates, which is the part nobody talks about. Every paragraph gets checked by code before it goes anywhere near a microphone. Did it invent a statistic that is not in the source? Rejected. Did it invent a memory, something like "last week I met a taxi driver who told me"? Rejected, because I never met that driver. Is a sentence too long to say in one breath? It gets split.

Then comes the voice. Whisper listens to every chunk of audio and compares it to the script. If a phrase went missing, that chunk is made again.

Then it uploads, and Spotify and Apple collect it on their own.

Total cost per episode? Zero baht, plus a little electricity. The laptop was on anyway.

Seven thirty. I put the episode on and go for a walk.

And this is where the real work starts. Because a month ago, what I heard was not good.

I would be walking along, listening to myself, and the voice would suddenly say a word from no language on Earth. Strange little placeholder sounds. And my accent kept sliding into something Thai-Malaysian that I do not even speak with.

So I complained. And here is my confession. We did not fix it for weeks.

Every day, my AI and I built another patch. A retry system. A trimmer that cut garbage off the end of a sentence. A pause limiter. A pronunciation dictionary. We tuned the speaking pace, and then tuned it again. Each fix improved a number. None of them fixed what I was hearing.

Do you know why?

Because we were measuring with Whisper. And Whisper is a very good listener that is very polite about accents. It hears a strange accent and writes down the correct word anyway. So my ruler could not see my problem. The number went up, and the voice still sounded wrong.

That is my first rule, and it cost me weeks. Before you trust a score, ask whether that ruler can even see the problem. If the complaint is about accent, and your gauge ignores accent, your gauge is decoration.

Ten o'clock. The one-line fix.

So how did we finally find it? We stopped guessing and looked. We printed the default settings of the voice model itself. One command, a few seconds.

And there it was. The model has a setting called steps, which is how many times it refines the sound before handing it over. The researchers who invented this model used thirty-two. The software package I installed ships with eight, a fast demo setting.

My pipeline never changed it. So every single episode of this show, from day one, was made at a quarter of the refinement the model was designed for.

At eight steps, the word mountaineer came out as mountain air. At thirty-two, it came out as mountaineer.

We changed one number, from eight to thirty-two.

Then we measured it properly, with three different random seeds instead of one. Because I had already been fooled once. A single test told me a different setting was much better. I believed it and changed the default. Then we ran it three times, and the difference vanished into noise.

So that is rule two. Read the defaults before you build a single workaround. And a bonus rule. One test is a rumour. Run it three times before you believe it.

The results? Audio scores went from around zero point nine one to zero point nine six. Some of that came from other fixes too, to be fair. But the foreign-sounding words mostly stopped.

It did cost something. Each episode now takes about four times longer to generate. And that created my next disaster.

The render now ran past an hour. A safety timer in the code, set back when renders were fast, killed it at sixty minutes.

So the system did exactly what I had told it to do in an emergency. It fell back to the Mac's built-in voice, a British robot called Daniel. And it published that. On the twenty-ninth of August, my show went out in a voice that was not mine.

Nobody warned me. The code was just being very obedient.

We raised the timer to three hours. We also made the error message say why it failed, instead of printing a line of gibberish. The lesson? When you change how long something takes, go and check everything downstream that was waiting for it.

Noon. The near-miss that still scares me.

Most episodes end on an obituary, a person who died this week, from The Economist. But The Economist sits behind a paywall. So for weeks, my show had one line to go on. A name, and a sentence.

I asked the AI to do better, to research the person and find out what they actually did. So it built a Wikipedia lookup.

On the first real run, the obituary was for a man called Frank Smith. The headline said he never managed to prove he was innocent.

The system found a Frank Smith on Wikipedia. It checked the name, and got a full match. It checked that the page was a biography. It was.

It was a cartoon animator, who died in nineteen seventy-five.

My show was one render away from a terrible mistake. It would have described an animator's family and career as the life of a man who spent seventy years in prison, insisting he was innocent.

The real man was Francis Clifford Smith, the longest-serving prisoner in American history. He died this summer, at a hundred and one.

So what caught it? A date. A name cannot tell two Frank Smiths apart. But someone who got an obituary this week did not die in nineteen seventy-five. Now, if the death year is not recent, the page is rejected.

Rule three. A name is not an identity. When a machine says it found the right person, the right file, or the right customer, make it prove it with something that cannot collide.

Two in the afternoon. The instruction that was impossible to follow.

For weeks, my daily episodes opened flat. "Did you know that." A summary instead of a story. Meanwhile, the episodes I wrote by hand opened on a man stuck in a petrol queue in Moscow, and you could see him.

I assumed the small model just was not talented enough. I was wrong.

The prompt told the model to open on a real, specific fact from the main story's article. And the article was never given to it. It received five headlines, and nothing else. We were asking it to quote a book we had never handed over.

So we fixed the plumbing and gave it the article. The very next opening it wrote was this. "Anushila Bhandari is waiting for her husband, Aurus, a thirty-three-year-old engineer missing in a mud-filled tunnel along Nepal's Trishuli River."

Same model, same price. It just finally had the material.

And here is the part I am proud of. We did not simply believe the fix. We tested three versions side by side. The old prompt with no article. A better prompt with no article. And the better prompt with the article. The better prompt alone changed nothing. Only the article did. If we had skipped that middle test, we would have shipped a fix that did not work, and felt very clever about it.

Rule four. When a machine looks stupid, check what you actually gave it.

Four in the afternoon. Hire a rival.

Around this time, I got curious and handed the whole project to a different AI. Grok, from xAI. I asked it to be honest.

It was brutal. It pointed out that my news show had opened on the same story three mornings in a row. The same hacking story, reworded each day, on the twenty-ninth, thirtieth, and thirty-first of August.

It was right. And the embarrassing part is that we had already built a system to stop repeating obituaries. We just never applied the same idea to the lead story. We fixed the case, and missed the class.

So rule five, and it is the cheapest one on this list. Let a second AI review the first one's work. They have different blind spots. It costs you ten minutes and a bit of pride.

Five o'clock. The gauge that was too strict.

Here is a mistake in the other direction, because I do not want you to think the answer is always more checking.

After all those fixes, we added a very strict check for garbled words. Then the render log showed something odd. One episode had three hundred and sixty-six chunks of audio, and the system had regenerated four hundred and seventy-six times. More do-overs than chunks. It also flagged fifty-one chunks as bad. Yet the episode as a whole still scored zero point nine six seven. Those two facts cannot both be true.

So we looked. Most of the rejections were fake. The first culprit was apostrophes. My scripts use the curly kind, and Whisper writes the straight kind, so a word like world's looked like two different words and the checker screamed garbage. Numbers too. Whisper writes forty percent as digits, and the checker decided the words had vanished.

We fixed how the checker splits words. Do-overs fell from one point three per chunk to under one. Chunks shipped imperfect went from fourteen percent to around five.

Rule six. When the part and the whole disagree, suspect the gauge, not the product.

Seven in the evening. Build time.

Most evenings, I build something new. Last week it was a website, an archive for both shows. The link is in this episode's description.

Here is why I wanted it. Spotify and Apple are distribution, not storage. If either platform drops my shows tomorrow, those episodes vanish from their apps. So I asked for an archive of every episode with its full transcript, plus the ninety-nine essays underneath my philosophy show. All of it searchable, as flat files with no database to break.

It held a hundred and fifty-three items the afternoon it was built. It has mind maps that show which essay each philosophy episode was built from. And every line on those maps comes from recorded data, not a guess.

The design? Airline baggage tags. Every episode is a tagged bag. The big three-letter code is the show, and the small print is the tracking number. There is nothing on the page that a baggage handler would not need.

So, results, after five weeks.

More than sixty episodes across two shows, published almost every day. Written, voiced, checked, and delivered by machines on one laptop, for almost nothing. An archive that survives the platforms. And a voice that sounds more like me every week.

What did I actually do all day? I listened, and I complained precisely. I asked why. And I refused to believe a number until we had looked at the thing itself.

That is the whole skill.

If you want to try vibecoding, here is your first step, and it is small. Pick one boring thing you do every week. Describe it to an AI the way you would brief a smart intern. Let it build a bad first version today. Then spend your energy on the only part it cannot do.

Judging whether it is true.