On vibecoding a reading-management webapp
I am experienced in using generative AI to work on existing codebases, and I’ve done some experiments in end-to-end vibecoding. Now, for the first time, I’ve vobecoded an app end-to-end that I’m actually using as more than a toy.
It manages my current and upcoming reading. Many tools do this sort of thing already, but I want one that:
- Lets me manipulate a book queue easily;
- Can export that queue to Markdown so that I can update the queue;
- Supports book-level (not passage-level) notes;
- Can help me track which books I read on which days;
- Is arbitrarily extensible.
None of this is new (unless you count exporting a reading queue to a specific Markdown format “new”), and I don’t expect anyone else to want to use it. For me, though, it’s legitimately useful.
Some notes on the process:
- I’ve been working back and forth between a bootstrapping "skill," which I built in light of my preferred tools and practices, and little apps I’ve made with that skill. When the apps reveal failures in the bootstrapper, I modify the bootstrapper.
- It took some fiddling, but my toy bootstrapped projects have: test and production environments; managed deployments via GitHub Actions; and reasonable testing setups with Pytest and Jest out of the box. This is not because I like having lots of deployment infrastructure for its own sake, but because it’s so cheap to do so. The tools are familiar to me and the boostrapper knows how to integrate them from the start.
- I’m using React, API Gateway, DynamoDB, and Lambda, deployed with GitHub Actions, for these projects. Whether or not you’d choose this stack for any given project, it’s reasonable for almost any small-scale system I'd want to make.1
- I have experience with a reasonable, general-purpose auth system that is compatible with this stack, and have put lots of instructions for implementing it in another skill. The primary bootstrapper knows to use this skill if necessary.
- Right now, it takes about one hour of work to make a new app end-to-end with this system. It would not be very hard to cut that time in half.
Quite aside from the prospect of making many more apps, better and better and more and more efficiently, it's quite wonderful to use something that's mine. It is small and unpolished, but it suits me. To my mild surprise, I find myself feeling that, however quickly and indirectly I made this, I made it with care.
It will usually work for much larger scale also, but that's usually not relevant for this sort of project.↩