AivexaNewsSearch
AI news for builders and product teamsChecked every hour

A new feature for my blog, built using my voice

Collected Oct 9, 2026

Simon Willison shipped a new feature for his blog on the day of writing: a Newsletters page that indexes every newsletter he has sent out, covering both his free weekly Substack and his monthly sponsors-only updates. He built it almost entirely by voice, talking to his laptop from the kitchen while cooking dinner.

The tool was the ChatGPT desktop app, in its Codex tab, using the voice conversation mode, running against a local development environment. He started the session against his local simonwillisonblog checkout by typing an instruction to start the dev server and open it in the browser, which gave him a running preview so he could ask to be shown the new pages and track progress visually. Then he clicked the "Start new voice chat" button (not the microphone button, the one to its right), set the laptop up in the kitchen, and talked through what he wanted.

His plan was a simple Django feature: a new model, a migration, view code, templates, and a couple of import functions to populate the database from external sources. He was confident the model in use, which he names as GPT-6 Astra High, could handle it. The voice transcript Codex captured includes him working out the content rules out loud, deciding the newsletters should not appear on tag pages or the blog index but should show up on date-based archive pages, and that the monthly newsletters with unique content should become searchable once they are public a month after sending, while the Substack ones are copies of content already on the blog. He describes the session as lasting about half an hour, the time it took to cook dinner, with the model replying, occasionally asking clarifying questions, and modifying code. The full transcript, disfluencies included, is published as a Gist.

By voice alone he got surprisingly far. The work produced a new Django model and migration to represent imported newsletters, plus Django Admin configuration for it. Four imports were working: the most recent Substack items via RSS; every other Substack item via Substack's undocumented API, which the model already knew about (it tried /api/v1/archive directly, then searched to figure out pagination and found 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. It also produced the /newsletters/ and /newsletters/2026/ public archive pages, made newsletters appear on day and month archive pages but not tag pages or the homepage, made weekly Substack newsletters link out to Substack while archived monthly newsletters get their own pages, and wired everything into his site search.

Almost ready to ship, the catch was the imports. Astra offered to export data from his local copy for import into production, but he wanted the imports to work like his other import scripts. Because some of the data lived in a private GitHub repository, that would mean creating a new API key, and he knew that part would require sitting at the keyboard for a while.

Once he had finished cooking and judged the feature mostly complete, he had Codex create a branch and open a pull request, then reviewed the code in the GitHub pull request interface. It was nearly what he needed, except one import script used Git in a subprocess. Since one import needed to pull from a private Git repository, he judged the API the better approach, switched to typing, and had Codex swap it for an API-based import. The changes he made during review are visible as extra commits on the pull request. Fixing the import mechanism and tweaking how the public pages display took another half hour of typed prompting before he was happy to deploy to production by landing the pull request.

The end result is live at the new newsletters index page, with individual pages for previous monthly newsletters. The index shows recent Substack weekly newsletters and GitHub sponsors monthly newsletters mixed together in reverse chronological order, with links to by-year archive pages further down. GPT-6 Astra designed the page and then adjusted that design based on his spoken feedback, delivered from across the kitchen while he glanced at the local preview.

His own verdict is that voice-driven coding demos of this kind work well in the setting OpenAI likes to show them in, such as DevDay, but he does not expect this to become a daily driver. He has previously written about using ChatGPT voice mode on his phone while walking the dog, mostly for research and brainstorming and occasionally to have code snippets written and tested. This felt different: the visual preview, plus the ability to type or paste when something does not work vocally, makes it a much more powerful way to work with a coding agent. He still returns to typing for the details, since pasting examples and error messages, or highlighting the specific code or feature that needs changing, remains more efficient than describing it in words. He also notes he mainly works from home, which is convenient because he would not want to talk to his computer this way in a shared workspace.

The killer feature for him is multi-tasking: he usually cooks with a podcast or TikTok running, and now he can build things instead.

For developers and product teams, the practical reading is that voice plus a live visual preview plus a keyboard escape hatch is a workable combination for scaffolding features, not just for demos, though the workflow here still ended in a typed review phase. A likely trade-off is that voice suits the first pass and the broad structure while fine-grained iteration, credential setup and pasting real error output stay keyboard work for now. The import design detail is worth noting on its own: choosing an API-based import over shelling out to Git subprocesses avoids baking repository credentials and process handling into application code, an inference from the change made during review rather than a stated rule.

Why it matters: this is a concrete, end-to-end account of voice-driven agentic development producing a shipped feature in a real codebase, which gives developers a realistic picture of where the approach is strong and where it stalls. Teams evaluating coding agents can treat the combination of voice mode, local preview and later typed review as a plausible workflow rather than a stunt, while planning for the credential and import plumbing that still needed hands on the keyboard. The multi-tasking angle is the part most likely to change habits, since it turns otherwise dead time into development time.

Read at Simon Willison

Based on reporting from the original publisher. Visit the source for full context and later updates.

Publisher excerpt

I shipped a new feature for my blog today: the Newsletters page, which offers an index of all of the newsletters I've sent out, both my free weekly Substack and my monthly sponsors-only updates. I built the feature almost entirely using my voice, chatting away to my laptop while I cooked dinner. Codex voice mode I used the ChatGPT desktop app for this, in the Codex tab, using the voice conversation mode, running against a local development environment. Here's what that looks like: I started the session against my l