The Vibe Coding Ratchet

A ratchet is a mechanism that only moves in one direction - it clicks forward but can't click backward.

When you're in flow with an AI coding assistant, each "ooh what if we also..." only adds scope, never removes it. You can't un-have the idea once you've had it and seen how easy it would be to implement.

Read more →

CryptoKitties Family Graph Visualizer

Writing CryptoKitties: What Happened Next made me want to see the connections between my kittens as a graph.

I thought it would be cool to generate an image of the connections between my kittens, but ended up vibe coding and releasing an open-source interactive family tree visualizer for CryptoKitties which can be used to explore breeding relationships, discover mewtation gems, and visualize a kitty lineage.

Here's my kitty family:

Click any cat to see details. Double-click to expand its family tree. Pink edges are matron (mother), blue edges are sire (father).

What the graph shows

Zoom out on any large dataset and patterns emerge.

Dragon sold for Ξ600 in September 2018. Load its ancestry alongside my cats and there's exactly one shared ancestor: kitty #1461. Born November 23, 2017, five days before launch. Part of the seed population. Nobody special at the time. Nine generations down one branch, Dragon. Through another, Mulberry, my mauve munchkin.

Read more →

The AI Pair Programmer

Building ArchAIc with Claude Code partly to understand how it works and what my teams are doing, how they're using it. What does it do well, and what does it do... not so well.

Can't evaluate AI pair programming without experiencing it hands-on. Can't set policies around AI coding assistants without knowing how they work. Team leaders ask "should we let juniors use AI tools?" and I can't answer from theory. ArchAIc is my data source.


Started about a week ago. Created git repo, pointed Claude Code at the firmware, started asking questions.

A dozen PRs merged since then. Tests written from scratch. The initial refactor. Infrastructure. Display architecture. Typewriter web simulator. Hobby mess starting to look like professional software.

A week.

Timeline feels wrong. Projects like this take weeks. Git log shows it's real.

Read more →

The Great Refactor

Code worked. That was the problem.

The Arduino IDE sketch had grown organically. Functions calling functions. Global variables everywhere. Typewriter protocol tangled with AI logic tangled with LED control. Everything connected to everything.

It printed AI responses. It had a name. It worked.

But the workflow was killing me.

Arduino IDE couldn't manage the ESP32-S3-N16R8 board settings cleanly. Is PlatformIO the answer? And coding with AI meant copy-pasting. Describe a problem to Claude or ChatGPT. Get code back. Paste it into the IDE. Test. Find the issue. Go back. Describe what happened. Get new code. Paste again, or worse, manually diff.

ChatGPT had built the captive portal in minutes. Getting those changes into the actual project took longer than writing them.

Tried Cursor first. AI-native IDE. Installed it. PlatformIO extension stuck on "Initializing". Turns out the official extension isn't on Cursor's marketplace. Downloaded the VSIX manually. Installed it. Needed another extension. Downloaded that one too. Wrong binary architecture.

Gave up on Cursor. Used PlatformIO from the terminal instead.

The migration itself took all evening. In a Claude.ai chat window. ZIP files back and forth. "Here's my source code". "Compilation failed, attaching the errors". Five rounds. Fixed the errors. Zipped it up again. Sent it back. That was the last time I worked that way.

The next morning, I installed Claude Code.

Read more →

First Conversation

Went back to FozzTexx's firmware. Read it line by line.

Three things my code was missing. His state check looked at two pins together, not just one. He buffered incoming characters in a ring buffer instead of reading and discarding. And he had collision recovery for when read and write stepped on each other.

I'd been checking one pin. Throwing away what I read. And crashing on collisions.

Fixed all three. Key presses worked.

A few days later, I finished coding the AI conversation mode. Typed a question on the typewriter. Hit return.

Read more →

Spin Doctor

Hard Drive Speakers

Update: See them play the legendary Second Reality demo by Future Crew.

The kids and I disassembled roughly 40 hard drives.

That's where this started. A pile of old drives, a box of Torx screwdrivers, and kids who were absolutely willing to take things apart.

The goal: build speakers from the drives. Actual stereo speakers, using the read/write head coil as a voice coil. Wire it to an amplifier. The actuator arm vibrates. It makes sound.

It works better than it should.


The idea wasn't original. People have been wiring drive coils to amps for years. A quick search turns up dozens of experiments, ranging from quick tests to proper tutorials to someone asking the obvious question out loud. One person even went further and attached a speaker cone to the actuator arm to improve output.


Each speaker is a pair of drives on a panel. One handles bass, one handles treble. A passive crossover splits the signal. The drives are open, covers removed, platters exposed. In the mockup iterations, the panels were wood.

Later, 3D printed enclosures with a cleaner fit and attempted acoustics.

The enclosures were too large to print in one piece, so I split them into sections, connected them with screws hidden below the covers, and filled the gaps with black hot melt glue.

Read more →