The history of vibe coding in 10 apps
My wife and I took to watching older Star Trek shows, like Deep Space Nine, just before ChatGPT became a thing. When we started, I still thought that a computer that can quickly provide a coherent response to any request I make using natural language was an invention I probably would not live to see.
Today, anyone with a smartphone can download an app and have that experience. For free.
That’s a radical turn of events. And one way this has impacted me, personally, is that it opened up the door to something I had long tinkered with but never really managed to much success: programming.
I’ve dabbled in programming for as long as I’ve had access to a computer (so, about 1996), but only managed to put together a few basic websites. While I love tinkering with tech, I always found programming tedious, so my various efforts to learn Python or HTML/CSS beyond the basics never went anywhere. But I’ve always remained interested in making my own websites, apps, and games, so when it became clear AI could help I leapt at the chance.
Not all the projects I put together were useful, but some definitely were. And in retrospect I’ve realized that they provide an overview of the rapid progress LLMs have made in programming. So, consider this a vibe coding museum.
Battletech Hit Location Lookup: July-August 2024
My first vibe coded app came about after playing a lengthy and somewhat confusing Battletech session with a friend. Battletech is a tabletop game about big stompy mechs that was designed in the 80s, which means it includes lots of rolling dice and then referring to tables to determine results. That can become tedious, so I figured, why not automate it?

I built the app going back-and-forth between Claude Sonnet 3.5 and GPT-4. It was a basically successful experiment, but not all that easy. Bugs were plenty and I ran into particular issues getting the GUI to be halfway passable, which is probably in part because I asked to use Python. The program worked, but I did not end up using it, because (as you’ll see) my recreational activities have skewed towards other games.
My personal website: Late 2024/Early 2025
The Battletech Hit Location Lookup app was successful enough to encourage me to use AI to accomplish another thing I’d been wanting to do for awhile: abandon Wordpress.
My site has never been very complex. It’s a way to put a stake in the SEO ground, which is important for me because as you might have noticed, my name is common. I also want a portfolio site to put up some clips, and that's about it (the blog, which you are now reading, was a later addition).

Once again, I went back and forth between Claude Sonnet 3.5 and GPT-4. The basic website outline were handled by Claude 3.5. But some of the custom elements, particularly the link effects for the “Contact me” and etc, were a bit tricky.
On the other hand, I was a bit shocked to see Claude 3.5 also more-or-less one shot my custom loading screen, which you should notice if you reload this page.
WhisperAI transcription tool: March 2025
After a couple months away from it, I returned to vibe code a WhisperAI transcription tool.
In part, I did this because I interview a lot of people for my job and I wanted to transcribe the conversations easily. But I also did it because I was searching for ways to use the NPU on Qualcomm’s Snapdragon X chip.

Getting the app to work at a basic level was a breeze. What was more difficult, though, was getting it to run on the Qualcomm NPU. I did eventually manage it, but it took a lot of back and forth with Claude Sonnet 3.7. A major obstacle was the relative lack of information online about how to achieve this, given how new the hardware was to the market.
Tabletop RPG combat tracker version 1: December 2024
I’m fan of tabletop role-playing games. Not that Dungeons & Dragons shlock, though, I’ll have you know, but instead the fine wine which is Pathfinder 1st Edition (I’m sort of kidding about D&D, but Pathfinder is mostly what I play).
While it’s a long ways from the most complicated TTRPG ever made, Pathfinder 1st edition has a lot going on, and that really comes to a head in combat. For a long time I’ve kept track of combat by simply listing players and NPCs as a list in a Google Doc, but that’s obviously not an ideal solution.
And while a variety of combat tracking and initiative tracking tools exist, none really fit the bill for me. Many are focused on Dungeons & Dragons, of course, because it’s by far the most popular system. Other generic trackers, like DM Tools’ Initiative Tracker, basically do the job but were missing some things that I wanted, like the ability to track status effects.
So, I rolled my own, and it looked like this.
![]()
This was the first project that shocked me. Because even back in December of 2024, with Claude 3.7 and GPT-4 models as my go to, this didn’t prove difficult.
It did take some time to work out the internal logic of some portions of the combat tracker, to be sure. My insistence that it be possible to change the initiative order while also displaying accurate values for each combatant’s initiative score was a bit of a puzzle for a while. But it all came together in a few sessions of vibe coding over the span of a couple weeks, and I began to use the tool to manage fights in my games.
I also put the tool online for anyone to use, though today it has some new features that it weren’t there originally, as I’ll explain in a bit.
Pico 8 game: March-April 2025
At this point I was itching to try something more complex. But what? Well, why not a game?
However, I quickly ran into problems trying to use AI tools in Unity and Godot. In part this was probably due to my own lack of understanding. More recent, I have figured out how to use Claude with Godot properly. But at the time I was struggling. So I turned to a type of game where everything was contained in one file. A Pico-8 game.
Pico-8 is a fantasy console, meaning it creates a development target similar to a very old-school console. This includes some pretty tight limits on file sizes and the tools you can use, among other things. But Pico-8 games are written in Lua and everything is contained in one file. Even sounds and graphics end up as hex strings at the end of it.
The result is Bloxwarz.
This turned out to be a tough project, and I was never entirely happy with it. Claude 3.7 had a lot of difficulty solving problems that involved the order and timing of events, which were important, because this game is effectively a mash up of Tetris of Lumines.
What this project stressed to me is that there’s a lot more to programming than the act of typing the code. The overall design and vision of the project is even more important. While the game was kind of fun, I was never really satisfied with how it played and I never could figure out what I thought would improve it.
Weather Station: Fall 2025
At some point in mid-2025 I decided to design and build a weather station. Gardening is one of my several hobbies, and over the years I’ve noticed that temperatures in my back yard often seem cooler than what’s reported on a weather app. Sometimes by a lot. But how much? I wanted to know.
I already had some Raspberry Pi hardware lying around, so I started to build a station based off a Raspberry Pi Pico 2 W. So I turned towards Claude Sonnet 4 to plan out my approach, which ended up looking like this.

In addition to the physical design, I had Claude Sonnet 4 assist me with finding a way to view the temperature on any device I own. My first thought was to vibe code some sort of web interface, but Claude Sonnet 4 recommended using Grafana and guided me through the installation. I’m not a huge fan of how Grafana looks, but I also haven’t spent any effort trying to customize it, and it does the job.
This project didn’t surprise me, because it felt less complex than the TTRPG combat tracker. The code running on the Raspberry Pi Pico 2 W is Python, and Raspberry Pi Pico weather stations are a thing, even if they’re not as common as Arduino stations.
Still, Claude did assist me in fixing a sensor read issue that was due to an incorrect i2c address. The one the documentation said I should be using didn’t work. Claude also helped me troubleshoot the wake-sleep cycle, which is finicky on the Pico 2 W—according to Reddit, at least.
TTRPG combat tracker version 2: Mid-late 2025
My first few iterations of the combat tracker did the job I wanted them to do, but as is often the case, I slowly began to wonder...what if I could…?
So, I went back and made some upgrades. I integrated Fantastic Dice, an open source 3D dice rolling utility. I added a small text field at the bottom so I could jot down quick notes. And I introduced an attack calculation feature that can automatically roll attacks for you if you enter the attacker’s bonuses and the target’s armor class.
![]()
I made started to make these upgrades just before the release of Claude 4, and the Fantastic Dice integration was challenging. At first, I couldn’t get it to work with actual 3D models and textures, so I instead picked the option to call those through a CDN.
But after the release of Claude 4.5, the Fantastic Dice integration was no problem. Along the way I also added support for rolling dice of different colors, which I didn’t support earlier (the dice were always green). I also used Google Antigravity after it was released, with Gemini 3 Pro, which built the attack rolling feature.
The thing I want to call out about the Fantastic Dice integration is just how little I did to make it happen. I downloaded the files and stuck them in the same folder as the project. Then I downloaded the documentation and gave it to Claude. With Claude 4.5 that was basically it, though I did have to go back and forth with a bit to make the color selection feature work.
AI Spellbook: January 2026
My success with the TTRPG combat tracker had me wondering what else might be possible but, for a short while, I didn’t have any big ideas. But then something inspiring happened in one of my Pathfinder games. During an expedition deep in the abyss, my Wizard found a set of spell books that contained every spell in the known universe.
My first reaction was “Awesome!” My second reaction was “My god, how am I going to remember all of these spells?” We’re talking over 3,000 spells in total.
Ah...but AI is very good at sorting and summarizing large volumes of data, right? Could I use AI to search through all the spells available? It turns out that, yes, I could.

My first problem was getting the spells together in one place. Fortunately, that didn’t turn out to be a problem at all, because someone had already posted the Pathfinder 1e spell list in JSON format on Github. Shew! I was afraid I was going to need to come up with some kind of web scraper or reformat a fan made guide (a lot of them end up on Google Docs) into JSON.
With that in hand, I turned towards Google Antigravity and Gemini 3 Pro. Rather than building this as a stand alone tool, I decided to integrate it into my combat tracker. Gemini 3 Pro was able to throw this together in a couple hours.
Putting this together was so quick that I decided to add a spell preparation tracking feature to the tool, because although I subscribe to Herolab, a very useful tabletop character builder and tracker, my Pathfinder campaign includes a couple dozen customized spells not available in Herolab. So, I now use my custom tool to track my spells while Herolab is open in another tab.
This one I haven’t made public, however. The spell tracker requires a large language model with a big context window. I use Google Gemini 3 Flash. To do this, I enter my API key in the spell tracker’s settings. The API key is not baked into the code, and it’s only saved locally in browser cache, so in theory I could put this online allow people to bring their own API key to it. But I don’t think people would be, or should be, comfortable with throwing their API keys into some random website.
TTRPG combat tracker in Xcode: February 2026
The AI spellbook hammered home the frankly mind-boggling capability available from current LLMs. Keep in mind—I don’t even pay for Google Gemini in Antigravity. I do pay for the API key I use in the tracker, but the coding Gemini 3 Pro accomplished was included with a free Antigravity account. It has rate limits, and I did hit them, but I simply swapped over to Gemini 3 Flash to get me over the finish line.
And then something else happened that encouraged me to try an even more ambitious project. Apple brought agentic coding support to Xcode.
I would have preferred to build my TTRPG combat tracker in Xcode from the start. I like a native, local MacOS app. However, I found using AI in Xcode was difficult and limiting. That changed with Xcode 26.3, which adds agentic coding support via Claude or ChatGPT (as you may have guessed by now, I used Claude).
![]()
I started by dumping all of my TTRPG combat tracker files into Xcode. Then I told the agent to turn the core combat tracker into a Swift app for MacOS. And it just kinda...did. There was no real fuss about it. I had a version of the combat tracker working in an hour.
The more difficult task was the 3D dice roller. Simply converting Fantastic Dice over to Swift wasn’t going to work. It includes 3D models and textures, after all. But what if the app could generate the dice procedurally?
I have no idea how difficult this problem is considered, but certainly the math behind this is way beyond anything I could fathom. It was also beyond what Claude 4.6 could easily fathom, as my early efforts didn’t go well. Most of the dice were just garbled balls of geometry.
To crack the problem, I asked Opus 4.6 to research best practices when attempting to procedurally generate dice or dice-like geometry. Then I provided that, plus the broken code the Xcode agent generated, into Claude Code with Claude Opus 4.6 Extended Thinking. And you know what? It worked.
![]()
That’s a procedurally generated d20. It rolls physically, it collides with other dice, and I can choose from a selection of colors.
Now, it wasn’t a complete and total success. The d6, d8, d10, d12, and d20 all work, but the d3 and d4 remain illusive—sorta. At the moment, I’ve fudged these by using a d6 and d8 with two sets of the same numbers (i.e. the d6 has two 1s, two 2s, two 3s). I would prefer an actual d4 and d3, but the geometry for these dice is less settled. There’s actually quite a few variations. And that probably means less examples in the training data, making these dice more difficult to achieve.
With the dice roller working, I turned my attention towards notes. I had a basic notes feature in my online TTRPG combat tracker. But what if I could do something more elaborate? What if I could track my entire campaign in the app instead of using a Google Doc, as I have before?
![]()
What if, indeed?
Again, I was floored by how quickly this came together. The basic structure was close to a one-shot. There was a bug with a pop-up appearing with no content that took a couple go arounds to fix, but that was about it.
Because it was so easy to throw together, I added features. I can add sessions, characters, locations, items, and factions. There’s a linking feature that lets me connect notes. There’s a graph view for visualizing the connections between notes. There’s an import feature, which I had to add because my existing notes for this campaign span over 100 pages, and I definitely wasn’t going to copy-and-paste it all by hand.
There’s even an AI summary feature for the notes, which is powered by Apple’s on-device LLM. I am currently working on a campaign summary feature, though this is difficult due to the limited context window that’s available (just 4,096 tokens…!!!) I’ve also added the ability to insert maps and add pins that will link to notes, though it’s not fully working yet.
How long did this take? I’m not tracking my time precisely, but not long. I’d say maybe six hours in total, spread across four or five sessions. And at least four of those six hours were devoted to the dice roller, which was by far the biggest hurdle.
Bonus round: This blog
No, I didn’t write this with AI, but I did use AI to integrate 11ty into my website, and I also used AI to “publish” the finished blog. I drop my images into a specific folder, drop my copy into the context window, and tell the AI to get it done. Presto. Tada. Who needs Wordpress, right?
What’s next? Who knows.
So, let’s recap.
In the summer of 2024 I was barely able to cobble together a working Python program using Claude 3.5 and GPT-4. By summer of 2025, I was able to throw together a Javascript web app and integrated an open source 3D dice roller. Now, as of March of 2026, I can quickly slap together a MacOS app with multiple features, including procedural dice geometry, a campaign tracker, and AI note summarization.
There’s a lot of things this will change. Here’s a, shall we say, non-exhaustive list.
Disposable software is definitely a thing. It already is, right now. I didn’t even mention a few other projects that I only had to use a few times, such as a tool I built to explore retirement finances.
I also expect to see a new revolution in software that’s going to look a bit like what the Internet did to publishing and news. With the cost and difficulty of creating a thing now far lower, a lot more people will be able to get into the field, including people with no prior professional background, and it will make sense to build software for niches that would be too small to attract much development before.
And if anything like the current rate of progress continues, vibe coding a basic operating system will not be out of the question. And if that happens, it’s going to kick off its own small revolution in hardware, as it’ll become way easier to build and support the software for niche hardware projects.
I also think this will make coding (or rather, making software) a much, much more popular hobby than it already is.
It’s a wild time in tech right now. I’ve been writing about tech long enough to know exponential improvements never last forever. Eventually, something will become a bottleneck. Maybe that’s training data, or maybe it’s compute, or maybe it’s regulation.
Still, I’ll say again something I’ve said before. Even if LLMs do not improve one bit from the state in which they exist right now, we’d see a decade of new software that find novel ways to use them, or which use LLMs to create software that never made sense to spend time on before.