Simon Willison builds a blog feature by voice in Codex with GPT-6 Astra

On 9 October 2026 Simon Willison shipped a new Newsletters page for his blog: an index of every newsletter he has sent, covering both his free weekly Substack and his monthly sponsors-only updates. He says he built it almost entirely with his voice, chatting to his laptop while he cooked dinner.
The tool was the Codex tab of the ChatGPT desktop app, in its voice conversation mode, running against a local development environment. He started the session by typing "Start dev server and open in browser", which gave him a live preview of the site so he could later ask the agent to show the new pages and track its progress visually. He then clicked the "Start new voice chat" button (not the microphone button, but the one to the right of it) and set the laptop up in the kitchen. The model was GPT-6 Astra High. He judged the job a simple enough Django feature that he was sure the model could do it: a new model, a migration, view code, templates and a couple of import functions to populate the database from external sources.
He shares an extract of the voice transcript Codex captured, full of hesitations, in which he works out aloud that newsletters should be a new content type, should not appear on tag pages or the blog index, should appear on date-based archive pages, and that the monthly ones should be searchable once they are made public a month after they go out. The Substack ones should not be searchable because they are copies of content already on his blog. The model understood what he wanted. The full transcript is linked in a Gist.
The session ran for about half an hour, the time it took to cook dinner. The model replied, occasionally asked clarifying questions, then modified the code. By voice alone they produced: a new model and migration for imported newsletters plus Django Admin configuration; four working imports; public archive pages at /newsletters/ and /newsletters/2026/; newsletters on day and month archive pages but not on tag pages or the homepage; weekly Substack newsletters that link out to Substack while archived monthly newsletters get their own pages; and integration with the site search engine.
The four imports were: the most recent Substack items via RSS; every other Substack item via Substack's undocumented API, which GPT-6 Astra knew about (it tried /api/v1/archive directly) and then ran a search to work out how to paginate, finding an article by Karen Spinner; all published monthly newsletters from his simonw/monthly-newsletter-archive GitHub repository; and the most recent private sponsors-only newsletter from a private repository.
The work was almost ready to ship, but not quite. The model offered to export data from his local copy so he could import it into production. He wanted it to work like his other import scripts, and because some of the data lived in a private GitHub repository that meant creating a new API key, which required him to sit at the keyboard.
Once dinner was done, he had Codex create a branch and open a pull request, and reviewed it in the GitHub PR interface. It was nearly right, except the model had used Git in a subprocess for one of the import scripts. Since one import had to pull from a private Git repository, he thought an API would be a better bet, so he switched to typing and had Codex swap it for an API-based import. He also made a few tweaks to the display of the public pages. That took an additional half hour of typing-based prompting before he was happy to land the PR and deploy to production.
The finished index page mixes his recent weekly Substack newsletters and monthly GitHub sponsors newsletters in reverse chronological order, with links to by-year archive pages further down. He says GPT-6 Astra designed the page and then adjusted the design based on his spoken feedback as he glanced at the local preview across the kitchen.
His verdict: he does not expect voice mode to become a daily driver. The visual preview, plus the ability to type or paste when something does not work vocally, makes it a much more powerful way of interacting with a coding agent than ChatGPT voice mode on his phone, which he has used on dog walks for research, brainstorming and occasional code snippets. But he still switches back to typing for details, since pasting examples and error messages or highlighting code is more efficient than describing it in words. The killer feature for him is multi-tasking: he usually cooks with a podcast or TikTok running, and now he can build something instead.
Key facts
- Simon Willison built a Newsletters index page for his Django blog almost entirely by voice in the Codex tab of the ChatGPT desktop app, using GPT-6 Astra High.
- The voice session lasted about half an hour; reviewing the pull request and typed prompting then took an additional half hour before he deployed to production.
- Voice alone produced a new model and migration, admin configuration, archive pages, search integration and four working imports (Substack RSS, Substack's undocumented API, a public GitHub repository, a private repository).
- The voice session stopped short at the imports: a private GitHub repository needed a new API key, and in review he had Codex replace a Git subprocess call with an API-based import.
- His conclusion: not a daily driver, but multi-tasking is the killer feature, and typing remains better for details.
Why it matters
This is a concrete, first-hand account of voice-driven work with a coding agent that goes beyond a demo: a real feature, shipped to a live production site. The author contrasts it with phone-based ChatGPT voice mode, saying the visual preview and the option to type or paste make this a much more powerful way of working with a coding agent. He names the ability to multi-task as the killer feature for him.
Who it affects
Developers who already use coding agents and could try hands-free sessions while doing something else. The author is explicit that it suits working from home, since he would not want to talk to his computer like this in a shared workspace.
How to use it
The author's recipe: open the Codex tab in the ChatGPT desktop app against a local development environment, type a first prompt such as "Start dev server and open in browser" so you get a live preview, then press "Start new voice chat" (the button to the right of the microphone button) and talk through what you want. Ask the agent to show new pages so you can track progress visually. When you reach details, imports needing credentials, or code review, switch to typing, paste examples and error messages, or highlight the code that needs changing. The source does not say the voice mode is available to all users or on which plans.
How solid is it
It is a single first-person account by the person who did the work, and the transcript extract and the PR commits are described as available for readers to inspect. The claims are anecdotal: one feature, one developer, one Django codebase. The model name GPT-6 Astra High and the Codex voice mode are as the author reports them; no pricing, release date or technical specification is given in the post.
Risks and caveats
The voice session did not finish the job alone. The model picked a Git subprocess for one import, which the author judged wrong for a private repository, and he had to sit at the keyboard to create an API key and then spend another half hour on typed prompting and review. The author says the feature was simple enough that he was certain the model could do it, so results on harder work are not covered. He also notes that describing code in words is less efficient than pasting or highlighting it.
“The killer feature for me is the ability to multi-task.”
— Simon Willison, on his blog