# @duggan > Personal blog of Ross Duggan. ## Projects - [Projects](https://duggan.ie/projects.md): A selection of some recent projects, and ones I just like! - [usagi](https://duggan.ie/projects/usagi.md): usagi is a macOS taskbar application that shows your Claude usage 🐇 - [FileTranscriber](https://duggan.ie/projects/filetranscriber.md): FileTranscriber is an Apple Silicon macOS app that lets you transcribe media files directly from the context menu ## Pages - [About](https://duggan.ie/about.md): I’m Ross! I’m from Dublin, Ireland 🇼đŸ‡Ș I have been a software developer working in startups (with occasional interruption) since around 2008. I’ve worked for Boards.ie, Engine Yard, Barricade, Sophos, and Clearword. Today I'm the CTO of Manano, where with my cofounders we're trying to help tradesmen and other small business owners do their invoicing and get paid faster. ## Posts - [Usagi 1.1.0](https://duggan.ie/posts/usagi-110.md): Small update to Usagi, I've included the weekly usage bar for Fable just below the weekly usage bar. - [The dream of v2](https://duggan.ie/posts/the-dream-of-v2.md): Joel Spolsky once called it "the single worst strategic mistake that any software company can make", and not for nothing: "When you throw away code and start from scratch, you are throwing away all that knowledge. All those collected bug fixes. Years of programming work." Even twenty years into my career, despite understanding, both logically and from experience that a rewrite is a high-risk move with limited chance of success– I am still often tempted. Coding assistants are making it more tantalizing than ever, and maybe, just maybe, even attainable. - [Wingman — bootable Windows 10/11 USB sticks on macOS](https://duggan.ie/posts/wingman-bootable-windows-1011-usb-sticks-on-macos.md): Once again found myself needing to create a bootable Windows USB stick on macOS, once again surprised at how fiddly it was. This time, though, I made an app. - [Build Everything](https://duggan.ie/posts/build-everything.md): Claude is changing how I write software dramatically. 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 – that some treacherous part of my mind stubbornly knows it's too hard. 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. - [Building a Stripe dashboard with an ESP32 desktop clock and Rust](https://duggan.ie/posts/building-a-stripe-dashboard-with-an-esp32-desktop-clock-and-rust.md): Putting together a little desktop notifier for new Stripe subscribers using Rust! 🩀 - [microgpt on the ESP32 – but... why?](https://duggan.ie/posts/microgpt-on-the-esp32-but-why.md): Yesterday I was looking at the zclaw project, and I thought it would be cool if the ESP32 could run an actual language model. Then I remembered that Andrej Karpathy had dropped microgpt a couple of weeks ago, and thought it might be fun to try and get a GPT running on the ESP32. I've got a couple of them lying around from a few other tinkering projects, as well as a functioning ESP32 Rust project to base it on. - [Cognitive debt in AI coding](https://duggan.ie/posts/cognitive-debt-in-ai-coding.md): Parachuting into an unfamiliar codebase, where the original author is long gone, is an experience that will be familiar to a lot of developers. People writing with AI assistants have been encountering this in another form. 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." - [I built a terminal monitoring app and custom firmware for a desktop clock with Claude](https://duggan.ie/posts/i-built-a-terminal-monitoring-app-and-custom-firmware-for-a-desktop-clock-with-claude.md): The way that I've used AI for coding has changed drastically over the last year. In fact, the rate at which it is changing is probably the most drastic element of it – 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 do stuff. 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. These are two projects that would have remained ideas, never making it out of my notes folder. - [Self-hosting git and builds without running a bunch of web services](https://duggan.ie/posts/self-hosting-git-and-builds-without-running-a-bunch-of-web-services.md): GitHub, Github Actions, and the GitHub Container Registry have been how I've been handling builds, but it's been slow, and it's started to seem absurd to have all these builds occurring in some random datacenter presumably on the other side of the Atlantic ocean, that I am then pulling back to a server in Europe. I started fishing around for a locally hosted replacement, coming across Forgejo, Woodpecker CI, and OneDev in addition to more familiar names like GitLab and SourceHut. At some point it occurred to me that this was a lot of ceremony for something relatively simple. How hard could it be just to have a git remote and hang some builds off it? I'm not trying to launch my own GitHub here. - [New Year's Resolutions 2026](https://duggan.ie/posts/new-years-resolutions-2026.md): I was never big on New Year's resolutions. However, as I get older I appreciate that there are natural moments of reset in your life. New decades, new jobs, new homes. New years are one of the predictable ones. Conveniently, they come with a built in universal counter and even a glass of champagne and fireworks at the end. Might as well take advantage of the infrastructure. So, I've thought about what I've been doing over the last while that I'd like to continue doing, do or better, or do less, and come up with what feels like a pretty achievable list: Run 5km twice weekly; weights twice weekly; eat less meat; drink less; and less frequently; write every day; publish every week. Some of these are measurable, some a bit more vague. Drink less, for example. I'll get into my rationale below. - [Moving Cloudflare out of the critical path](https://duggan.ie/posts/moving-cloudflare-out-of-the-critical-path.md): I'm a big fan of Cloudflare, but the extended outage on November 18th was long enough that I started wondering whether I really needed it to be in the critical request path for my blog. - [10GbE](https://duggan.ie/posts/10gbe.md): A price negotiation call to Virgin Media ended up with me upgrading to 5Gb fibre broadband. This took me on a bit of a journey investigating things that have changed in home networking since 1Gb networking cards hit the scene. Turns out, somehow both more than I expected and less than I imagined! - [A year of not really blogging](https://duggan.ie/posts/a-year-of-not-really-blogging.md): I started building a new blog in December 2024, and wrote my first substantial post in January 2025, but I have only published a handful of posts since then. What does that tell me? - [Sync new purchases to iPod Classic](https://duggan.ie/posts/sync-new-purchases-to-ipod-classic.md): I recently refurbished an old iPod Classic, and purchased some albums in the iTunes Store (yes, it still exists!). Once I found out that most iPod Classics are capable of playing Apple's lossless format, ALAC, I really wanted to sync them over to experience this heretofore unimaginable audio clarity. However, even though I could download them, the albums refused to show up in the sync list. Switching back to AAC worked fine, but ALAC was not working. - [VAT invoice generator](https://duggan.ie/posts/vat-invoice-generator.md): I needed an invoice generator to quickly produce some random test invoices while building Manano, as part of a feature letting tradesmen track receipts by sending photos to our WhatsApp number. I tried a few invoice generators that showed up in Google results, but all of them were oddly slow, wouldn't remember details without signing up, and sometimes produced odd looking outputs. Eventually I realized it would probably be straight forward enough to whip one up myself
 - [Fixing a problem at 40 that stumped me as a 10 year old](https://duggan.ie/posts/fixing-a-problem-at-40-that-stumped-me-as-a-10-year-old.md): A few months ago my parents gave me a box of my stuff they’ve had variously in attics and storage since I moved out in my early twenties. One of the things in it was my Sega Mega Drive — boxed, and with games and accessories. Unfortunately, I didn't have a TV that I could connect it to! The only connector packaged with it was designed to plug into the aerial socket of a CRT television. In the last week however, I've gotten hold of a CRT television after a bit of digging around. - [Japan May 2025 – Hokkaido and Kyushu](https://duggan.ie/posts/japan-may-2025-hokkaido-and-kyushu.md): First few weeks of our Japan trip were fantastic. Despite some minor confusion over our visa length on entry, we had a great start in Sapporo, with nice weather and friendly people. - [Goodbye Hokkaido, next stop... Okinawa?](https://duggan.ie/posts/goodbye-hokkaido-next-stop-okinawa.md): We've been going over the pros and cons of the current route, and have decided that the V-shaped travel route is not our best option. Instead, we're going to jump from Hokkaido to Okinawa, and head back up from there! - [Preparing for the Japan trip](https://duggan.ie/posts/preparing-for-the-japan-trip.md): As I wrote about in February, Ash and I are traveling to Japan for three months (May → August). It's a trip I've always wanted to take, and since I'm between work engagements I've been taking some time to prepare. Three months is a long time to spend in a country you've never visited, and I'm going to go over a few ways we've been preparing. - [Traveling to Japan for three months because life's too short](https://duggan.ie/posts/traveling-to-japan-for-three-months-because-lifes-too-short.md): I've been fascinated by Japan since I was a teenager. Thanks to Hayao Miyazaki (among others) the food, landscape, and architecture all exist in some dreamy, liminal space in my mind alongside wood sprites and lost civilizations. Maybe it sounds daft, but the idea of actually visiting the country always seemed like it would break the spell somehow? Like anywhere, Japan has crime, social problems, bad weather, and if I go, me. - [Hacking together a Job Runner using Supabase Edge Functions](https://duggan.ie/posts/hacking-together-a-job-runner-using-supabase-edge-functions.md): Supabase is a collection of backend services (Postgres, PostgREST auth service, S3 storage, function runtime) that you can develop against locally and then deploy to production. They don't yet provide a fully integrated background job running system. This post shows a detailed example of how you might keep your stack slim and build a system like this for yourself in Supabase, rather than using a third party! - [Ignoring good advice and building my own blog (again)](https://duggan.ie/posts/ignoring-good-advice-and-building-my-own-blog-again.md): It's kind of a classic developer mistake to build a blog before they start writing. As Jeff Triplett writes: "Write and publish before you write your own static site generator or perfect blogging platform. We have lost billions of good writers to this side quest because they spend all their time working on the platform instead of writing." This is good advice. I am just preternaturally incapable of following it. - [Hello!](https://duggan.ie/posts/hello.md): I'm still putting things together here, but I've got an about page that gives a brief summary of who I am.