{
  "id": 13123268,
  "title": "A new feature for my blog, built using my voice",
  "url": "https://urgent.news/2026/10/09/a-new-feature-for-my-blog-built-using-my-voice",
  "topic": "ai",
  "section": "AI",
  "published": "2026-10-09T12:54:06.000Z",
  "source": {
    "name": "Simon Willison",
    "slug": "simon-willison",
    "url": "https://simonwillison.net/2026/Oct/9/built-using-my-voice/"
  },
  "original_language": "en",
  "account": "Today, I unveiled an innovative feature for my blog: the Newsletters page. This page provides an index of all newsletters I've sent out, encompassing both my free weekly Substack and monthly sponsors-only updates. I developed this feature solely through voice interaction with my laptop, while simultaneously preparing dinner. Utilizing the ChatGPT desktop app in Codex tab mode, I conversed with the AI in a local development environment. Here's a glimpse of the process: I initiated the session by inputting a command, which displayed a preview of the site I was working on. This allowed me to visually track the progress of the new pages later. After selecting \"Start new voice chat,\" I positioned my laptop in the kitchen for a hands-free interaction while cooking. I had a clear vision of the desired outcome—a simple Django feature tailored to my needs. Using GPT-6 Astra High, I outlined the requirements, which included a new model, migration, view code, templates, and import functions to populate the database from external sources. During the voice conversation, I clarified my preferences for the newsletters' inclusion. I wanted them to appear on date-based pages but not on tag or blog index pages. The model understood my requirements and proceeded to modify the code accordingly. The conversation extended for approximately half an hour, coinciding with the duration of my dinner preparation. One challenge arose with the imports, as Astra suggested exporting data from the local copy. However, I desired the imports to function similarly to my existing scripts, necessitating the creation of new API keys. As dinner concluded, I had the model generate a branch and open a pull request. Upon reviewing the code in the GitHub PR interface, I made necessary adjustments, including switching to an API-based import for one of the scripts. It took an additional half-hour of typing-based prompts to finalize the design and address any remaining issues. The end result can be viewed at the new newsletters index page or by accessing the page for a previous monthly newsletter. The index page presents a reverse chronological mix of my recent Substack weekly newsletters and GitHub sponsors monthly newsletters. Further down, links to by-year archive pages are provided. While the voice-driven approach proved effective, the integration of a visual preview and the flexibility to type or paste information when required made the overall experience significantly more powerful. However, for intricate tasks, I still prefer typing. Working from home allowed me to multitask efficiently, combining cooking, podcasts, and TikTok with coding. This feature marks a new development method for me, offering a unique blend of voice interaction, visual feedback, and typing capabilities.",
  "summary": "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…",
  "key_points": [],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}