The 12 Days of Shipmas
What would you build if the gap between idea and working v1 suddenly shrunk?
Looking for a way to push my ai-assisted coding to the next level I got inspired by The 12 Days of Shipmas. I completely neglected to engage in any of the social aspects of the project (it might be time to admit that I’m too old for Discord) but I really liked the underlying idea so I decided to go it alone on Extreme Mode and attempt to complete 12 standalone projects in the first 12 days of December.
To start out I set some of my own rules:
No more than 2 hours per project
I’ve still got a day job. If the project was getting close to my time limit I would ruthlessly cut scope and prioritize working features over nice to have ones
Its gotta be functional open source
The build should be working, tests should to be passing, if someone wants to contribute the path should be clear
One thing this project quickly revealed for me is that with AI I’m able to work across many languages with almost equal speed and quality. The switching costs between languages are now very low. If I find a better library in Nodejs than Golang for a particular problem the projects gonna be in JS. If I want to play around with Rust I don’t even have to open the docs.
Maintaining a relatively simple OS projects is a whole lot easier than it was 10 months ago. I’ve revived my newrelic-exporter for Prometheus from stasis, have shipped several other small projects, which gave me confidence going into this project I have no concerns with the potential time commitment of picking up fixes, reviewing PRs, or adding on features with these 12 projects and the likely many more to follow.
My main goal here was to get the creative juices and motivation flowing. As a negative/pessimistic oriented person I am more likely to shit on an idea or not build it because something similar exists than to embrace the “just build it” mentality I see in some of my friends. I’m trying to rewire my brain a little, AI makes the cost of experimentation and dead-ends so much lower so why waste my life sitting here kvetching that something doesn’t exist or that a particular project I rely on is broken or slow.
I’ve realized that building new tools like these locally is now so fast and easy that if you don’t find a tool you want in a 5 minute search or what you find doesn’t pass the vibes check you can probably build yourself a tool almost as quickly as you can install and configure a random third party one.
I used my normal Claude Code development environment that I’ve already written about here before to build all these projects. They were all done using Opus 4.5 throughout. Although I have a lot of Skills and slash command already piled up I found that for these projects my default global CLAUDE.md that I’ve spent a lot of time refining did the trick and that most of these projects were finished with less than 10 prompts back and forth. All the estimated API costs come from Sniffly. I find it has very different recommendations than ccusage but I’m mainly looking to understand the difference between projects than to get exact numbers.
The Projects:
December 1st: https://github.com/mrf/beads-synced
Beads Synced is a Github action that takes the local beads database and syncs it with the issues in your Github project. This was probably the most useful and most feature complete entry for week one. I still capped at two hours so any utility here is thanks to the AI getting very close to a fully working project during the first 20 minute prompt session. Estimated API Costs $8.02
December 2nd: https://github.com/mrf/branch-cleaner
I had high hopes for this project but honestly doing this directly in a Claude session (as long as you don’t have 5000 branches) is probably still more nuanced and performant. I do like having some guardrails around this potentially risky behavior, but for something you do once every few months it may not be worth it to have a standalone tool. You end up doing all the branch deletion yourself anyway so its very safe at least for a v1. Estimated API Costs $17.54
December 3rd: https://github.com/mrf/runbook-generator
Also had high hopes here and felt pretty let-down by the results. Got stuck fighting with the concept of line numbers across different history files for quite a while. Ended up cutting the scope so it only worked with zsh to make that easier to resolve. The increase in API costs is definitely related to a lot of debugging work and not to the initial build. Claude was definitely confidently wrong here more than once, and honestly the end results are not significantly better than I could do with 15 minutes in Vim. Estimated API Costs $31.37
December 4th: https://github.com/mrf/pr-dashboard
Speed to v1 here was way faster than my cli tools. I had something working in less than 5 minutes. I guess I’m not the only one building baby react sites. Interesting side note, I’m running more local webserver projects like this than I ever have before, I always have Sniffly open to make sure I”m taking full advantage of that Max subscription, and at home I’ve been having a lot of fun with Comfy and Agor. Working with UI is still an annoying feedback loop for me with ai-driven dev, I probably need to spend the time to hook up the playwright MCP instead of screenshot copy/paste from web inspector repeat workflow. Unlike the previous two days everything came together so easy worked out the gate that I just kept adding features instead of cutting features. The end result was instantly useful, closing some long neglected PRs and seeing some potentially disruptive incoming work that I’d have missed. Estimated API Costs $5.20
December 5th: https://github.com/mrf/pr-aging-tracker
Creating a cross platform desktop app is no longer hard, somehow I missed the electron revolution. I need to search harder for a challenge apparently. This one completed shockingly quickly and worked after the first prompt. Didn’t even hit a half hour of my 2 hour cap. Estimated API Costs $1.85
December 6th: https://github.com/mrf/git-commander
I thought it would be fun to do something less productivity focused and more fun for the weekend. I’ve been wanting to build my own game for years, decades even, but have never followed through. It was equal parts exciting and disheartening to see Claude one shot a very solid text adventure game with a cute storyline and good narrative consistency. When I started I assumed Claude would do the scaffolding but the fun and creative parts would fall to me, but Claude really nailed the creativity here as well. Estimated API Costs $5.37
December 7th: https://github.com/mrf/personal-health-dashboard
It took far far longer to get my actual health data exported from my phone than it did to build v1 of this. The complexity of the initial app was very high, but after hitting some performance bottlenecks on import I think it hit the right mix of necessarily complicated. Cheated a little bit on the 2 hour limit here because when I finally got a chance to look at my own data I created a bunch more dashboards and spent more time iterating on new dashboard ideas as I got more and more excited about getting custom views into my data. Estimated API Costs $37.87
December 8th: https://github.com/mrf/port-watcher
This one came together just as quickly and easily as my previous menubar electron app. I found some port conflicts and some long-running npm sessions right away so I was instantly happy with my personal results from this one. Estimated API Costs $5.61
December 9th: https://github.com/mrf/meeting-buffer
Lost quite a bit of time and tokens to a deadend attempt to do this in JS, sure we had something working but it was super slow 35 to 45 seconds to return simple one meeting description in JS. That same call less than a second in Swift. Had to hijack mid edit session and tell Claude to do this in Swift which it quickly agreed to but was annoying I had to intervene (guess I’m starting to get spoiled by Opus 4.5). Excited for the chance to push my first Swift project, it came together quite nicely. Will definitely consider it again when building a mac-specific tool. Estimated API Costs $3.36
December 10th: https://github.com/mrf/wt
I wanted to do something in Rust to give the AI a little bit of a challenge, but it laughed at my hubris and one shotted this with skill and grace. This came together so fast, sure its just a git command wrapper but its fast, freaking so fast to execute, so much faster than silly bash aliases I’d have made in the past. And it was so fast to make, I could make 50 of these by the end of the week. Estimated API Costs $1.60 (dang maybe Rust really is the language of the future!)
December 11th: https://github.com/mrf/envui
I kind of hate this one. I’ve never really struggled to look at an env file quickly and don’t leave this kind of thing open for longer than it takes to get that first build working. I blame the AI for convincing me this was a good idea. A friend had told me to try out Fyne so I incorporated it here, but to be honest I find its GUI to be a little ugly and too linuxy for my sophisticated Mac user tastes. Estimated API Costs $1.57
December 12th: https://github.com/mrf/dcc
The grand finale. Think k9s for developer productivity. I had a long-running session all week long discussing different project ideas with Claude and I pressed it pretty hard to come up with something a little more impressive for day 12. I’d say it delivered. Many of the micro UI tools I built in previous day are incorporated here and we are back in my terminal where I actually spend most of my day. Of any of the choices I’ll likely spend more time on this one and the health dashboard are most likely to get more time from me. Estimated API Costs $10.16
Most expensive project: Personal Health Dashboard
Cheapest project: envui
Least useful project: envui
Biggest surprise: beads-synced
Dark horse: wt
Most likely to actually install and use everyday: dcc
One annoyance I had to explicitly ask for the same exact command to get ready for open source every single time “Make a README.md, a CONTRIBUTING.md, and a MIT License, and some basic Github CI to run our current tests and build”. EVERY... SINGLE... TIME I ended up turning this into a Skill and a slash command the very last day, guess I’m just a glutton for punishment.
If you only use public Github as your measuring stick, I’ve pushed far more working code in the last 12 days than I’ve done in the previous 12 years.
Doing some meta analysis I would say Claude writes consistently better Go than Python or Javascript. I think a statically typed language with lots of great linters and a “one true way” philosophy really maps well to the current capabilities of AI. That being said I have noticed a marked improvement in dynamic languages where there is more opportunity for the model’s creativity to take you off the rails since the release of Opus 4.5.
I experimented with some new languages and new frameworks here as well. Its so much more fulfilling to see your fully-baked idea completed in Swift, Rust, or Flutter than it is to read a blog post showing you some examples and start slowly typing your first code in that language. I won’t pretend to be able to judge the quality of the actual code, but I was generally happy with the tool produced at the end.
The results can speak for themselves, the quality may not always the best, but it’s consistently better than 12 random POC tools you’d randomly grab from Github in 2018. My personal quality bar is not better than anyone can produce, my bar is better than what I’d have produced in 2018 with no AI help. All 12 of these tools surpass that bar by a good measure.
My creativity is spent, I’m probably going to spend the weekend on manual labor just to reconnect with reality, but I’m never going to set aside a random tool idea or side project idea again without at least giving Claude a shot at building it.
