ToneBlock
On my accidental sabbatical I wanted to build a little side project, to learn a new framework and to further explore LLMs. One early idea was a board game, but learning to do multiplayer on the web felt like a whole project in its own right. So I argued myself down to a simple sliding block puzzle.
I also had the urge to do something with sound or music. So much of my artistic life is wrapped up in sound, it’s strange how little I’ve let it into my programming life. And web audio has come a long way since I last looked at it. For this, I decided to try a musical sonification of the puzzle, somehow representing the state of the blocks with scale tones.
In a couple of weeks I head back to real life, and here’s where I’m at: I have a sliding block puzzle, and it makes sounds.

This is just a screenshot. Imagine if there were music though.
A few notes on the process:
- The UI framework I’m using is Solid. It looks like React on the surface, but the underlying conceptual model is very different. That meant I often thought I knew how to do things, and I was often wrong. (See my next post.) At this point I appreciate its simplicity in theory, but am frustrated by what I don’t get about it.
- For sound generation, I chose Elementary. It looks very powerful, and it takes a very different approach than most audio libraries. Instead of procedural, event-driven code, it encourages you to “describe your audio process as a function of your application state.” For web developers, this is akin to the shift from jQuery to React. It’s fascinating. I don’t have my head around this yet either.
- There was a study last year that suggested that developers think “AI” makes them more productive, even while it makes them quantifiably less productive. I don’t have data, but this feels true for me. Faced with a coding task, I feel the tedium of typing it all out will be unbearable. But when I make an LLM do it, it gets enough things wrong, and is sufficiently hard to correct, that it may end up taking longer. I also think using LLMs for this project has contributed to my failure to master the frameworks. If I’d written all the code myself, I would have been very frustrated, but working through the frustration would have taught me a lot.
- It was hard for me to set priorities. At one point I decided to let the LLM do the Solid UI and do a mediocre job of it, because it would let me get on to the audio work. Adding music would be fun, it would be creative, and it’s an area where I have something unique to offer. But it’s really hard for me to let mediocre code be committed.
- The idea that I would spend my time in Europe working on self-directed projects was a delusion. Why would I do that, when Europe was all around me? What was I thinking? The most I ever got done in a day was on a train, and only because I lucked into a dull landscape.
As a result, what I have is a codebase I’m reasonably happy with, a UI that is fine, and… the sound part, the fun part, is still just my original proof of concept. I have ideas for making it interesting, useful, and beautiful – like sounds that help you hear the transition when you slide a block, and that are gentle and soothing. But instead it’s, well, it makes sounds. If you unmute it. (It’s muted by default because it’s annoying.)
Anyway, if you want to slide some blocks around, ToneBlock is live!