<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="/atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://duggan.ie/tag/ai/</id>
  <title type="text">@duggan — ai</title>
  <updated>2026-03-14T15:35:26.000Z</updated>
  <author>
    <name>Ross Duggan</name>
    <email>ross@duggan.ie</email>
    <uri>https://duggan.ie/</uri>
  </author>
  <icon>https://duggan.ie/favicon.ico</icon>
  <link href="https://duggan.ie/tag/ai/atom.xml" rel="first"/>
  <link href="https://duggan.ie/tag/ai/atom.xml?page=1" rel="last"/>
  <link href="https://duggan.ie/tag/ai/atom.xml" rel="self"/>
  <logo>https://duggan.ie/og-image.png</logo>
  <rights type="text">All rights reserved 2026, Ross Duggan</rights>
  <subtitle type="text">Posts tagged ai</subtitle>
  <entry>
    <id>https://duggan.ie/posts/build-everything</id>
    <title type="text">Build Everything</title>
    <updated>2026-03-14T15:35:26.000Z</updated>
    <author>
      <name>Ross Duggan</name>
      <email>ross@duggan.ie</email>
      <uri>https://duggan.ie/</uri>
    </author>
    <content type="html">&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Claude is changing how I write software dramatically.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;My biggest worry, as someone who's been writing software for a long time, is that I will be so blinded by my hard earned intuition on complexity that I will subconsciously be less ambitious than the moment calls for –&amp;nbsp;that some treacherous part of my mind stubbornly &lt;/span&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;knows&lt;/em&gt;&lt;/i&gt;&lt;span style="white-space: pre-wrap;"&gt; it's too hard.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;When I was 25 I thought it was a given that I would just never stop learning. Back then the risk, from what I could see of middle aged developers, was clownishly bungling your way into some obvious technological cul-de-sac. The intervening 15 years have tested it at times, but I had not considered that the raw intuition itself might end up the problem.&lt;/span&gt;&lt;/p&gt;&lt;h3 id="combinations-and-permutations" class="group relative"&gt;&lt;a href="#combinations-and-permutations" class="absolute -left-6 top-1/2 -translate-y-1/2 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 no-underline"&gt;#&lt;/a&gt;&lt;span style="white-space: pre-wrap;"&gt;Combinations and permutations&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;For the last few years, new companies were really the only time I got to try out new architectural patterns. They become concrete so quickly, and updating them becomes an exercise in changing the wheels on a moving car. Plus, there's always stuff that seems more important.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;One of the slightly unintentional effects for me has been the ability to experiment with a variety different architecture and deployment patterns.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;For a specific example, one of the projects I'm working on at the moment, &lt;/span&gt;&lt;a href="https://rockstar.ninja" rel="noreferrer"&gt;&lt;span style="white-space: pre-wrap;"&gt;rockstar.ninja&lt;/span&gt;&lt;/a&gt;&lt;span style="white-space: pre-wrap;"&gt; (saving and sharing Claude Code sessions), has a macOS taskbar application. I've never written one of these before, and it's been my first experience working with &lt;/span&gt;&lt;a href="https://developer.apple.com/documentation/security/notarizing-macos-software-before-distribution" rel="noreferrer"&gt;&lt;span style="white-space: pre-wrap;"&gt;Apple's notarization system&lt;/span&gt;&lt;/a&gt;&lt;span style="white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;The backend server and CLI are written in Go, so I've just been cross-compiling for Linux and deploying the system using &lt;/span&gt;&lt;code spellcheck="false" style="white-space: pre-wrap;"&gt;&lt;span class="bg-gray-50 dark:bg-gray-800/30 font-mono px-2 py-0.5 rounded border border-gray-200/60 dark:border-gray-700/50 text-gray-800 dark:text-gray-200 relative before:absolute before:inset-0 before:bg-gradient-to-r before:from-blue-50/30 before:to-purple-50/30 dark:before:from-blue-900/20 dark:before:to-purple-900/20 before:-z-10"&gt;rsync&lt;/span&gt;&lt;/code&gt;&lt;span style="white-space: pre-wrap;"&gt; over SSH. This is not too far from how we used to deploy boards.ie in 2008. Even the git repo for this one is just on one of my home servers.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;For another project, &lt;/span&gt;&lt;a href="https://bewitch.dev" rel="noreferrer"&gt;&lt;span style="white-space: pre-wrap;"&gt;bewitch.dev&lt;/span&gt;&lt;/a&gt;&lt;span style="white-space: pre-wrap;"&gt; (a terminal-based system monitor for Linux), I've gotten to build out the apt repo and multi-architecture build system that I always wanted to have when I started building command-line tools.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;This blog itself is something of a continuous project. I started frontend development again in 2024 after our company pivoted, and my blog has been a way for me to explore the space without worrying too much about making mistakes. It started as a Next.js / Supabase project, quickly became an Astro-based project instead, and recently I've been replacing Astro entirely, as it was never quite the right fit.&lt;/span&gt;&lt;/p&gt;&lt;h3 id="i-can-move-through-phases-more-quickly" class="group relative"&gt;&lt;a href="#i-can-move-through-phases-more-quickly" class="absolute -left-6 top-1/2 -translate-y-1/2 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 no-underline"&gt;#&lt;/a&gt;&lt;span style="white-space: pre-wrap;"&gt;I can move through phases more quickly&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Discovering what you're building as you're building it is par for the course in software development.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;The essential element of all of this is that, thanks to LLMs, it's been possible to &lt;/span&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;iterate rapidly&lt;/em&gt;&lt;/i&gt;&lt;span style="white-space: pre-wrap;"&gt;. That rapidity has enabled these projects to reach a level of quality (build automation, tests, documentation) that would otherwise have been hugely time consuming to produce.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;It is allowing me to start a variety of different projects, integrating architectural and agentic lessons from each one into each other, combining or discarding approaches and trialling new ones.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Certainly, it has sometimes enabled me to go off on ill-advised tangents, over-engineering some corner of the system before I quite understand it. That is not new though– the difference is that now the cost to correct those missteps has also reduced significantly.&lt;/span&gt;&lt;/p&gt;&lt;h3 id="it-s-easier-to-be-more-ambitious" class="group relative"&gt;&lt;a href="#it-s-easier-to-be-more-ambitious" class="absolute -left-6 top-1/2 -translate-y-1/2 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 no-underline"&gt;#&lt;/a&gt;&lt;span style="white-space: pre-wrap;"&gt;It's easier to be more ambitious&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Being able to iterate faster and correct mistakes faster means I get to consider projects and possibilities that would have been out of reach before.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;As a result, I am trying to build everything.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Everything I can think of, every project that has ever sat on the back burner. Any number of ideas for new software, features or fixes might pop into my head a day. If I reckon I have the spare usage to tackle them, they get tackled. I can't even tackle them all with LLMs, but I am sure starting to make a dent.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;It's the only way I can think of, in 2026, to try and crack a hole in that calcified intuition and start finding out where the edges are again.&lt;/span&gt;&lt;/p&gt;&lt;section class="changelog"&gt;&lt;hr&gt;&lt;p&gt;&lt;strong&gt;Changelog:&lt;/strong&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;time datetime="2026-03-16T21:31:24.000Z"&gt;Mar 16, 2026, 9:31 PM&lt;/time&gt; — Correct tense.&lt;/li&gt;&lt;/ol&gt;&lt;/section&gt;</content>
    <link href="https://duggan.ie/posts/build-everything" rel="alternate"/>
    <published>2026-03-16T21:25:39.999Z</published>
    <summary type="html">&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Claude is changing how I write software dramatically.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;My biggest worry, as someone who's been writing software for a long time, is that I will be so blinded by my hard earned intuition on complexity that I will subconsciously be less ambitious than the moment calls for –&amp;nbsp;that some treacherous part of my mind stubbornly &lt;/span&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;knows&lt;/em&gt;&lt;/i&gt;&lt;span style="white-space: pre-wrap;"&gt; it's too hard.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;When I was 25 I thought it was a given that I would just never stop learning. Back then the risk, from what I could see of middle aged developers, was clownishly bungling your way into some obvious technological cul-de-sac. The intervening 15 years have tested it at times, but I had not considered that the raw intuition itself might end up the problem.&lt;/span&gt;&lt;/p&gt;</summary>
  </entry>
  <entry>
    <id>https://duggan.ie/posts/cognitive-debt-in-ai-coding</id>
    <title type="text">Cognitive debt in AI coding</title>
    <updated>2026-02-15T10:25:18.000Z</updated>
    <author>
      <name>Ross Duggan</name>
      <email>ross@duggan.ie</email>
      <uri>https://duggan.ie/</uri>
    </author>
    <content type="html">&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Parachuting into an unfamiliar codebase, where the original author is long gone, is an experience that will be familiar to a lot of developers.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;People writing with AI assistants have been encountering this in a new form.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Simon Willison wrote a brief post about it recently, concluding:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure class="rich-quote my-8"&gt;&lt;div class="relative px-12 py-6 bg-gray-50 dark:bg-gray-800/50 rounded-lg"&gt;&lt;span class="absolute left-3 top-3 text-6xl leading-none text-gray-300 dark:text-gray-600 font-serif select-none" aria-hidden="true"&gt;“&lt;/span&gt;&lt;span class="absolute right-3 bottom-3 text-6xl leading-none text-gray-300 dark:text-gray-600 font-serif select-none" aria-hidden="true"&gt;”&lt;/span&gt;&lt;blockquote class="italic text-lg leading-relaxed" style="border: 0; padding: 0; margin: 0; quotes: none;"&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;I no longer have a firm mental model of what they can do and how they work, which means each additional feature becomes harder to reason about, eventually leading me to lose the ability to make confident decisions about where to go next.&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;figcaption class="text-sm text-gray-500 dark:text-gray-400 mt-4 not-italic flex items-center gap-1"&gt;&lt;span&gt;— Simon Willison&lt;/span&gt;&lt;a href="https://simonwillison.net/2026/Feb/15/cognitive-debt/" target="_blank" rel="noopener noreferrer" class="text-gray-500 dark:text-gray-400 hover:text-gray-300 underline decoration-dotted inline-flex items-center gap-1"&gt;simonwillison.net&lt;svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"&gt;&lt;/path&gt;&lt;polyline points="15 3 21 3 21 9"&gt;&lt;/polyline&gt;&lt;line x1="10" y1="14" x2="21" y2="3"&gt;&lt;/line&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/figcaption&gt;&lt;/div&gt;&lt;/figure&gt;&lt;span style="white-space: pre-wrap;"&gt;Interestingly, this has been my experience in the large codebases of every company I've ever joined. Even with reasonably good documentation, it can be difficult to get to grips with any sufficiently large codebase – say, over a million lines.&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;This can also be true of smaller systems. If you're new to programming, you will be learning what works best as you go, and so your codebase will change as you learn. Even an experienced developer can make plenty of design mistakes in a domain they are unfamiliar with.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Working with large, successful systems are the circumstances under which code review skills are built. Something true in one part of the system may not hold in another. Experienced developers have their own methods to build understanding, like creating or adding to test suites, extracting microservices, and cultivating the patience, persistence, and humility to &lt;/span&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;read the code&lt;/em&gt;&lt;/i&gt;&lt;span style="white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;What's new, though, is experienced developers needing these skills in their own personal projects.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Systems like Claude Code now have an integrated &lt;/span&gt;&lt;code spellcheck="false" style="white-space: pre-wrap;"&gt;&lt;span class="bg-gray-50 dark:bg-gray-800/30 font-mono px-2 py-0.5 rounded border border-gray-200/60 dark:border-gray-700/50 text-gray-800 dark:text-gray-200 relative before:absolute before:inset-0 before:bg-gradient-to-r before:from-blue-50/30 before:to-purple-50/30 dark:before:from-blue-900/20 dark:before:to-purple-900/20 before:-z-10"&gt;MEMORY.md&lt;/span&gt;&lt;/code&gt;&lt;span style="white-space: pre-wrap;"&gt; that they can use for projects in order to persist comprehension across sessions. I am using it and &lt;/span&gt;&lt;code spellcheck="false" style="white-space: pre-wrap;"&gt;&lt;span class="bg-gray-50 dark:bg-gray-800/30 font-mono px-2 py-0.5 rounded border border-gray-200/60 dark:border-gray-700/50 text-gray-800 dark:text-gray-200 relative before:absolute before:inset-0 before:bg-gradient-to-r before:from-blue-50/30 before:to-purple-50/30 dark:before:from-blue-900/20 dark:before:to-purple-900/20 before:-z-10"&gt;CLAUDE.md&lt;/span&gt;&lt;/code&gt;&lt;span style="white-space: pre-wrap;"&gt; religiously in order to build persistent knowledge of the system into each project&amp;nbsp;–&amp;nbsp;but it's early days.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Coding assistants are taking people from idea to working system much faster than before. They are reaching the points at which design and testing become valuable much more rapidly. Not only that, but it's also possible to turn many ideas that might have remained pleasant daydreams into reality, and dreams brought into reality can sometimes turn out to be nonsense.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;This may even tie into at least some of the sense of burnout that people have been reporting. It can be comforting and intrinsically rewarding to tinker away on a codebase, but if you're building a business, or at least software for other people, code is just part of it.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;It can be quite disheartening to realise that customers won't just appear out of thin air. Building for yourself is fun, but building for &lt;/span&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;nobody&lt;/em&gt;&lt;/i&gt;&lt;span style="white-space: pre-wrap;"&gt; is pointless. Claude Code isn't talking to your customers. It's not being thoughtful about the problem. It doesn't have a strong sense of aesthetics.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;It doesn't know that what you &lt;/span&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;don't&lt;/em&gt;&lt;/i&gt;&lt;span style="white-space: pre-wrap;"&gt; build can be as important as what you &lt;/span&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;do&lt;/em&gt;&lt;/i&gt;&lt;span style="white-space: pre-wrap;"&gt; build.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;All sorts of people, developers included, are finding out that coding is not software engineering, and that software projects are not startups. This is not new information, but it can take a long time for it to sink in. If people are able to get to that lesson faster, then it's a good thing.&lt;/span&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;There is currently no comments system. If you'd like to share an opinion either with me or about this post, please feel free to do so with me either via email (&lt;/em&gt;&lt;/i&gt;&lt;a href="mailto:ross@duggan.ie" rel="noreferrer" dir="ltr"&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;ross@duggan.ie&lt;/em&gt;&lt;/i&gt;&lt;/a&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;) on Mastodon (&lt;/em&gt;&lt;/i&gt;&lt;a href="http://mastodon.ie/@duggan" rel="noreferrer" dir="ltr"&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;@duggan@mastodon.ie&lt;/em&gt;&lt;/i&gt;&lt;/a&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;) or even on &lt;/em&gt;&lt;/i&gt;&lt;a href="https://news.ycombinator.com" rel="noreferrer" dir="ltr"&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;Hacker News&lt;/em&gt;&lt;/i&gt;&lt;/a&gt;&lt;a href="https://news.ycombinator.com" rel="noreferrer"&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;.&lt;/em&gt;&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;</content>
    <link href="https://duggan.ie/posts/cognitive-debt-in-ai-coding" rel="alternate"/>
    <published>2026-02-15T17:37:53.733Z</published>
    <summary type="html">&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Parachuting into an unfamiliar codebase, where the original author is long gone, is an experience that will be familiar to a lot of developers.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;People writing with AI assistants have been encountering this in another form.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Simon Willison wrote a brief post about it recently, concluding, "I no longer have a firm mental model of what they can do and how they work, which means each additional feature becomes harder to reason about, eventually leading me to lose the ability to make confident decisions about where to go next."&lt;/span&gt;&lt;/p&gt;</summary>
  </entry>
  <entry>
    <id>https://duggan.ie/posts/i-built-a-terminal-monitoring-app-and-custom-firmware-for-a-desktop-clock-with-claude</id>
    <title type="text">I built a terminal monitoring app and custom firmware for a desktop clock with Claude</title>
    <updated>2026-02-07T16:17:21.000Z</updated>
    <author>
      <name>Ross Duggan</name>
      <email>ross@duggan.ie</email>
      <uri>https://duggan.ie/</uri>
    </author>
    <content type="html">&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;The way that I've used AI for coding has changed drastically over the last year.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;In fact, the rate at which it is changing is probably the most drastic element of it –&amp;nbsp;I can't recall any time since my first year of college, twenty years ago, that I've experienced such a rapid evolution in my own ability to &lt;/span&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;do stuff&lt;/em&gt;&lt;/i&gt;&lt;span style="white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;This week I have written a fully self-contained system monitoring daemon and terminal UI, based on the &lt;/span&gt;&lt;a href="http://charm.land" rel="noreferrer"&gt;&lt;span style="white-space: pre-wrap;"&gt;Charm&lt;/span&gt;&lt;/a&gt;&lt;span style="white-space: pre-wrap;"&gt; toolkit and using &lt;/span&gt;&lt;a href="http://duckdb.org" rel="noreferrer"&gt;&lt;span style="white-space: pre-wrap;"&gt;DuckDB&lt;/span&gt;&lt;/a&gt;&lt;span style="white-space: pre-wrap;"&gt;. It archives metrics to parquet, shows ECC status, SMART health, temperature, sparklines, historical charts, and even has an alerts system.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure class="video-wrapper"&gt;&lt;video src="/files/a9aaa6b3317e5fae.mp4" autoplay="" muted="" loop="" playsinline="" data-playback="silentLoop" title="demo.mp4" style="max-width: 100%; height: auto"&gt;&lt;/video&gt;&lt;figcaption class="not-prose font-sans text-sm text-neutral-400 whitespace-pre-wrap break-words mt-2"&gt;bewitch comes in one colour: hot pink.&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;I am passingly familiar with Go, but this is a project that's been in the back of my head for a while, and would have been a monumental undertaking. It already works well enough, and I'm using it for a handful of servers.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Also this week, I built custom firmware to show Stripe subscription metrics for the Ulanzi TC001. I've linked to a good overview below if you're not familiar with it – basically a cheap and hackable desktop clock.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="link-preview-card border border-gray-200 rounded-lg overflow-hidden my-4"&gt;&lt;a href="https://blakadder.com/ulanzi-pixel-clock/" target="_blank" rel="noopener noreferrer" class="no-underline text-inherit flex flex-row"&gt;&lt;div class="flex-1 p-3 min-w-0"&gt;&lt;div class="link-preview-site flex items-center gap-1.5 mb-2 text-xs text-gray-500"&gt;&lt;img src="/files/148396ba0565f6b4.png" class="w-4 h-4 m-0"&gt;&lt;span&gt;Blakadder’s Smarthome Shenanigans&lt;/span&gt;&lt;/div&gt;&lt;div class="link-preview-title font-semibold text-base leading-tight mb-1"&gt;Ulanzi Desktop Pixel Clock TC001 Review&lt;/div&gt;&lt;div class="link-preview-description text-sm text-gray-500 leading-snug line-clamp-2"&gt;As I was trawling AliExpress in search for a decent but cheap photography light I found Ulanzi, a Chinese brand specialized in making video and photography equipment. Browsing their product list something peculiar jumped out in the recommended tab. A desktop pixel clock targeted to YouTubers, the Ulanzi TC001, priced at 59.99$. After various sales and coupons the price dropped down to a very affordable 43$ and that made me click the buy button.&lt;/div&gt;&lt;div class="text-xs text-gray-400 mt-2"&gt;blakadder.com&lt;/div&gt;&lt;/div&gt;&lt;div class="w-[200px] shrink-0 overflow-hidden bg-gray-100"&gt;&lt;img src="/files/9f1bede6662d0c51.jpg" alt="Ulanzi Desktop Pixel Clock TC001 Review" class="w-full h-full object-cover m-0"&gt;&lt;/div&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="white-space: pre-wrap;"&gt;This is the kind of project I have dreamed about putting together, but I've never found the time required to become familiar with firmware development outside of a few Arduino demos many years ago.&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Most of these project ideas go to a list of ideas that I look at and go, "some day, if I have the time." –&amp;nbsp;I rarely have the time. This blog was one such project, and I sat on it for ten years!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://blueforcer.github.io/awtrix3/#/" rel="noreferrer"&gt;&lt;span style="white-space: pre-wrap;"&gt;AWTRIX3&lt;/span&gt;&lt;/a&gt;&lt;span style="white-space: pre-wrap;"&gt; is the go-to firmware for customizing the Ulanzi TC001, but customization requires running a process on another machine and sending data over the network to the device. I wanted something I could bundle up and send to my other cofounders. So, again, I leaned on Claude Code to create custom firmware in Rust that communicates with the Stripe API, providing a subscriber count, MRR, and notification for new subscribers. It runs a wifi access point that you can connect to and configure, after which it connects to the wifi and communicates with Stripe via their API.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Ironically, given how long generative AI has been threatening art, I ended up having to do a lot of the actual pixel art for the device by hand. Precise pixel art is one area chat models remain mysteriously terrible at.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure class="video-wrapper"&gt;&lt;video src="/files/88013866aee053d5.mp4" autoplay="" muted="" loop="" playsinline="" data-playback="silentLoop" title="clock-demo-1.mp4" style="max-width: 100%; height: auto"&gt;&lt;/video&gt;&lt;figcaption class="not-prose font-sans text-sm text-neutral-400 whitespace-pre-wrap break-words mt-2"&gt;The Stripe subscription firmware shown here configured with a demo sandbox to test everything out.&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;I have never written a line of Rust, but I know it is a relatively unforgiving language, and the ESP32 is a less forgiving environment than most I've developed for, with 8MB of flash storage and something like 160KB of RAM.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;These are two projects that would have remained on the back burner forever, requiring activation energy that I just don't have to spare. They were both written over the course of a few days, here and there, between other work, and recovering from a cold.&lt;/span&gt;&lt;/p&gt;&lt;h2 id="a-year-ago" class="group relative"&gt;&lt;a href="#a-year-ago" class="absolute -left-6 top-1/2 -translate-y-1/2 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 no-underline"&gt;#&lt;/a&gt;&lt;span style="white-space: pre-wrap;"&gt;A year ago&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;When I was writing the engine that powers this blog in December 2024, I would upload a few files at a time through the Claude or OpenAI web UIs, try to get them to reshape them into something that seemed close enough to what I wanted, and then iterate on that work myself.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;This was slow, but the project of putting together a custom editor using Lexical was daunting enough that I would not have attempted it otherwise. At that point I had only about six months of modern frontend development experience and &lt;/span&gt;&lt;span&gt;&lt;span style="white-space: pre-wrap;"&gt;my reach exceeded my grasp&lt;/span&gt;&lt;sup&gt;[1]&lt;/sup&gt;&lt;/span&gt;&lt;span style="white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Then the startup I was working for ran out of runway, we shut down the company, I spent a couple of months learning Japanese, and then &lt;/span&gt;&lt;a href="https://duggan.ie/posts/traveling-to-japan-for-three-months-because-lifes-too-short" rel="noreferrer"&gt;&lt;span style="white-space: pre-wrap;"&gt;went bumming around Japan for a few months with my partner Ash&lt;/span&gt;&lt;/a&gt;&lt;span style="white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Fast forward to August 2025, I'm starting a new company, and coding assistants are starting to generate a good bit of heat on Hacker News.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;One of the first things I did after getting back was try to make some headway on my cofounder's MVP, and it seemed like a perfect opportunity to try out Claude Code. I had it write a few helper scripts, add logging, and act as a glorified find-replace in a few areas. For this tedious work it was quite useful, despite frequently giving up or failing the tasks.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;I had it write the first draft of a feature that we needed, and iterated on it myself, getting Claude to throw in some fixes here and there.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Actually, it now reminds me of the accounts recorded by the engineers using the first computer being built at Princeton in the 1940s (from &lt;/span&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;Turing's Cathedral&lt;/em&gt;&lt;/i&gt;&lt;span style="white-space: pre-wrap;"&gt;, by George Dyson).&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Essentially, the ENIAC often produced incorrect calculations, overheated and shut down during jobs, and was generally a hassle to work with. Despite all that, it was still better than doing it by hand, turning what would be months of human calculation into mere weeks of computer assisted work.&lt;/span&gt;&lt;/p&gt;&lt;h2 id="december-2025" class="group relative"&gt;&lt;a href="#december-2025" class="absolute -left-6 top-1/2 -translate-y-1/2 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 no-underline"&gt;#&lt;/a&gt;&lt;span style="white-space: pre-wrap;"&gt;December 2025&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;By December, I had written one major piece of functionality with Claude Code. Arguably I would have done a better job doing it by myself, maybe in a similar timeframe if I had been really dialled in and had no distractions.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;All of my experience was with Sonnet at this point, and while it was useful and sometimes surprisingly good, it wasn't a huge accelerant. If pushed, I'd have said something like 1.5x, maybe. My €22/month usage plan was enough to help me write helper scripts and break ground on new features though, which was already worth it.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;At the end of November though, Opus 4.5 had been released, and some time in December I decided to give it a try. It didn't seem massively different at first, but I was still working with it like it was Sonnet –&amp;nbsp;giving it small tasks, writing scripts, etc. It absolutely burned usage though, and until Opus I had never run into a limit before my usage counter reset. I literally didn't even realise there &lt;/span&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;was&lt;/em&gt;&lt;/i&gt;&lt;span style="white-space: pre-wrap;"&gt; a limit.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;It wasn't until I started asking it to implement features that I found it was making far fewer mistakes, and was in fact producing relatively good first passes.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;In October I had begun adding Github Copilot to some pull requests, and it had found a few issues. This was great, even if it came with some mistakes and noise. When you're a team of one and a half developers, an extra set of eyes is absolutely worth the trouble.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Eventually the &lt;/span&gt;&lt;code spellcheck="false" style="white-space: pre-wrap;"&gt;&lt;span class="bg-gray-50 dark:bg-gray-800/30 font-mono px-2 py-0.5 rounded border border-gray-200/60 dark:border-gray-700/50 text-gray-800 dark:text-gray-200 relative before:absolute before:inset-0 before:bg-gradient-to-r before:from-blue-50/30 before:to-purple-50/30 dark:before:from-blue-900/20 dark:before:to-purple-900/20 before:-z-10"&gt;Co-authored-by: Copilot&lt;/span&gt;&lt;/code&gt;&lt;span style="white-space: pre-wrap;"&gt; notes start showing up more frequently in the commit logs, and I found it useful enough to pay for the basic subscription once my free tier limits ran out.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;By the end of December, I was hitting my Claude Code limits constantly. I started using "extra usage" which lets you spend a little more to get to the end of whatever was being worked on when the included limits were reached.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;I experimented with using GPT-5 and Opus via the Copilot extension included with VSCode. Once I run through the limits there, I start going through extra usage on that.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure class="image-wrapper"&gt;&lt;img src="/files/210bc16b22348def.png" alt="Metered usage.png" width="inherit" height="inherit" style="max-width: 100%; height: auto;"&gt;&lt;figcaption class="not-prose font-sans text-sm text-neutral-400 whitespace-pre-wrap break-words mt-2"&gt;The point at which Copilot started being very useful.&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Using Copilot, I built the first application that I have not read line-by-line, &lt;/span&gt;&lt;a href="https://duggan.ie/vat-invoice-generator" rel="noreferrer"&gt;&lt;span style="white-space: pre-wrap;"&gt;a VAT invoice generator&lt;/span&gt;&lt;/a&gt;&lt;span style="white-space: pre-wrap;"&gt;. I needed to generate mock invoices to do some basic interactive testing of the OCR flow for Manano. As long as it generated something that looked plausible, it was fine, but I found that with GPT-5 doing the bulk of the actual coding, I was able to freewheel on ideas about design and local-first software.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;I wanted it to be like &lt;/span&gt;&lt;a href="https://tiddlywiki.com" rel="noreferrer"&gt;&lt;span style="white-space: pre-wrap;"&gt;Tiddlywiki&lt;/span&gt;&lt;/a&gt;&lt;span style="white-space: pre-wrap;"&gt;, where it could be used as a file on the desktop as easily as something at a URL. I wanted it to be WYSIWYG rather than a set of dull forms to fill out. And having a bunch of visually distinctive templates to make sure a variety of visual styles would work.&lt;/span&gt;&lt;/p&gt;&lt;h2 id="christmas-break-structured-prompts" class="group relative"&gt;&lt;a href="#christmas-break-structured-prompts" class="absolute -left-6 top-1/2 -translate-y-1/2 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 no-underline"&gt;#&lt;/a&gt;&lt;span style="white-space: pre-wrap;"&gt;Christmas break, structured prompts&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Over the Christmas period, while Ash was visiting her family, I had the opportunity to get stuck into the feature idea backlog for my blog. This felt like a good testing ground for the coding assistants, as it was a bit cobbled together, had gone through a few architectural lurches, but I had written enough of the codebase myself to evaluate the results.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Also, being a blog, the stakes were low. Every time I'd have some idea for the blog I'd jot it down in Apple Notes. Here was what I had built up:&lt;/span&gt;&lt;/p&gt;&lt;aside class="callout my-6"&gt;&lt;div class="border-l-4 border-blue-500 bg-blue-50 dark:bg-blue-900/20 px-6 py-4 rounded-r-lg"&gt;&lt;strong class="block text-sm font-semibold uppercase tracking-wide text-blue-700 dark:text-blue-300"&gt;duggan.ie features/bugs&lt;/strong&gt;&lt;div class="mt-2 text-base leading-relaxed"&gt;&lt;p&gt;&lt;b&gt;&lt;strong style="white-space: pre-wrap;"&gt;Saving/updating published posts&lt;/strong&gt;&lt;/b&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;When a post has been published, any subsequent updates should include an optional reason for the update.&lt;/span&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;If a post is published, hitting save or using the save shortcut (Cmd+S) should pop up a dialog with a textbox to describe the reason for the change. This should be plaintext only, no special formatting.&lt;/span&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;It should still be possible to change without including a reason. In that case, the update should not change the updated_at marker.&lt;/span&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;The “save” target should move to the dialog box, so that hitting Cmd+S again will save the post.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;strong style="white-space: pre-wrap;"&gt;Changelog&lt;/strong&gt;&lt;/b&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;Include the post updates in published posts.&lt;/span&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;It should be implemented as a collapsed summary + details element at the bottom of the post.&lt;/span&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;It should also be included in the Atom feed.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;strong style="white-space: pre-wrap;"&gt;Feedback system for shared drafts&lt;/strong&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Goal: Create a feedback system for shared links.&lt;/span&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;Context:&lt;/span&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;Shared links are designed to be shared with a single person. The URLs are deliberately obfuscated and they have configurable expiry, after which they return 404.&lt;/span&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;The editor is built using Lexical, and stores the lexical node data in the post_revisions table, with a posts table to hold the rendered html and reference to the currently fresh post_revisions record.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Implementation details:&lt;/span&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;Implement the feedback system as a Lexical plugin.&lt;/span&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;The shared links can use a Lexical editor with our feedback system plugin.&lt;/span&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;Other than using the feedback system, the shared link editor should be read-only – the user should just be making notes, not editing the text directly.&lt;/span&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;Each shared link will likely need to make a copy of the main editor node data on creation.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Open questions:&lt;/span&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;How best to handle when the main editor updates the post data. Should the shared links be updated? Should the user get a note/bar at the top of the screen saying something like “the author has updated the draft, would you like to refresh?” etc.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;strong style="white-space: pre-wrap;"&gt;Opengraph integration for links&lt;/strong&gt;&lt;/b&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;When pasting a link into the editor, it should give me the option to include it as nicely formatted block with OpenGraph data (image, title, content, etc) like Notion.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;strong style="white-space: pre-wrap;"&gt;Video/image loading skeleton&lt;/strong&gt;&lt;/b&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;Context: images and videos can be dragged and dropped into the editor, and are displayed inline.&lt;/span&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;Goal: While the images are uploading, there should be a loading skeleton in place to show that it is being processed.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;strong style="white-space: pre-wrap;"&gt;Enhanced video/image resizing controls&lt;/strong&gt;&lt;/b&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;Context: image and video resizing in the editor is very basic&lt;/span&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;Goal: enhance the resize functionality so that arbitrary resizing is supported.&lt;/span&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;Additional support: helpful resize controls, like “original”, “full width”, etc., should be included&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;strong style="white-space: pre-wrap;"&gt;Light / Dark mode&lt;/strong&gt;&lt;/b&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;Initial change to light mode seems to result in a white screen&lt;/span&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;Continue button flashes when changing, sometimes on loadMake tags distinctive&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;&lt;strong style="white-space: pre-wrap;"&gt;Tag management area&lt;/strong&gt;&lt;/b&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;Include emoji / stickers / SVG images as part of the tags&lt;/span&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;Should be able to specify a colour for each tag using a colour wheel, etc.&lt;/span&gt;&lt;br&gt;&lt;b&gt;&lt;strong style="white-space: pre-wrap;"&gt;V2&lt;/strong&gt;&lt;/b&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;More comprehensive emoji selector (with keyword search)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;strong style="white-space: pre-wrap;"&gt;Post list&lt;/strong&gt;&lt;/b&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;Add a new post status: archived&lt;/span&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;The post list navigation should be broken out by published vs draft vs archived in the left navigation.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/aside&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;It was quite a decent chunk of work in my book.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;These notes were originally just for my own reference, but you'll notice that at some point I started editing the notes with a basic structure for Claude Code that I felt was clearer.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;I thought I'd make good headway on a few of them, but over the Christmas break I steamrolled &lt;/span&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;every one of them&lt;/em&gt;&lt;/i&gt;&lt;span style="white-space: pre-wrap;"&gt;, iterated on a few, and even added some extras once I ran out.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;I started out just about coming up short on Claude limits, having to wait 30 minutes or so before starting again. But by the end of this process I was smashing through those limits really quickly, and had to start getting more targeted and careful about what I wanted to work on.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Eventually though, I was paying extra usage on both Copilot and Claude Code, still cheaper than springing for a higher usage plan, but chafing at the limits.&lt;/span&gt;&lt;/p&gt;&lt;h2 id="the-yegge-inflection-point" class="group relative"&gt;&lt;a href="#the-yegge-inflection-point" class="absolute -left-6 top-1/2 -translate-y-1/2 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 no-underline"&gt;#&lt;/a&gt;&lt;span style="white-space: pre-wrap;"&gt;The Yegge Inflection Point&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;This month, I finally sprung for Claude Code Max –&amp;nbsp;though only 5x, not yet the 20x. It's just too powerful an upgrade on my capabilities as a developer to pass up. Other people can wait to see where it goes and look back on this period with sagacity and the wisdom of hindsight.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;I am still using Claude Code interactively in VSCode, I haven't gotten to the stage where I &lt;/span&gt;&lt;a href="https://steve-yegge.medium.com/welcome-to-gas-town-4f25ee16dd04" rel="noreferrer"&gt;&lt;span style="white-space: pre-wrap;"&gt;never read the code that's being produced&lt;/span&gt;&lt;/a&gt;&lt;span style="white-space: pre-wrap;"&gt;, though maybe I'll get there, too. Steve Yegge is there with a few other people, and they are probably living in &lt;/span&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;a&lt;/em&gt;&lt;/i&gt;&lt;span style="white-space: pre-wrap;"&gt; version of the future, but it's not the &lt;/span&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;only&lt;/em&gt;&lt;/i&gt;&lt;span style="white-space: pre-wrap;"&gt; version of the future.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;There are lots of different kinds of software. Not all of it will be amenable to this style of development.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;For a 20 year old aspiring software developer in college, I have no idea how they are going to get to their version of &lt;/span&gt;&lt;span&gt;&lt;span style="white-space: pre-wrap;"&gt;mastery&lt;/span&gt;&lt;sup&gt;[2]&lt;/sup&gt;&lt;/span&gt;&lt;span style="white-space: pre-wrap;"&gt;. I suspect it will be very different to mine, and will take a very different route. I think it will be daunting, but I hope exciting. Nobody starts off knowing how everything works.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;For me, it's exciting. If at the end of the day all I end up with is a bunch of completed side projects, it will have been money well spent.&lt;/span&gt;&lt;/p&gt;&lt;section class="changelog"&gt;&lt;hr&gt;&lt;p&gt;&lt;strong&gt;Changelog:&lt;/strong&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;time datetime="2026-02-08T23:21:38.000Z"&gt;Feb 8, 2026, 11:21 PM&lt;/time&gt; — Fixed formatting in notes.&lt;/li&gt;&lt;/ol&gt;&lt;/section&gt;&lt;div class="footnotes"&gt;&lt;hr&gt;&lt;p&gt;&lt;strong&gt;Notes:&lt;/strong&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="white-space: pre-wrap;"&gt;...to paraphrase Robert Browning.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="white-space: pre-wrap;"&gt;For want of a slightly less pretentious term. Basically I just mean skilled and experienced enough to be useful at their craft. Being able to dive deep, take responsibility, adapt and learn on the fly.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;</content>
    <link href="https://duggan.ie/posts/i-built-a-terminal-monitoring-app-and-custom-firmware-for-a-desktop-clock-with-claude" rel="alternate"/>
    <published>2026-02-07T21:42:11.094Z</published>
    <summary type="html">&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;The way that I've used AI for coding has changed drastically over the last year.&lt;/span&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;In fact, the rate at which it is changing is probably the most drastic element of it –&amp;nbsp;I can't recall any time since my first year of college, twenty years ago, that I've experienced such a rapid evolution in my own ability to &lt;/span&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;do stuff&lt;/em&gt;&lt;/i&gt;&lt;span style="white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;This week I have written a fully self-contained system monitoring daemon and terminal UI, as well as custom Rust firmware for the Ulanzi TC001 desktop clock.&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span style="white-space: pre-wrap;"&gt;These are two projects that would have remained ideas, never making it out of my notes folder.&lt;/span&gt;&lt;/p&gt;</summary>
  </entry>
</feed>