The Other Kind of Digital Garden • Linell Bonnette skip to content
Close
Dark Theme Table of Contents<br>Gardening Instead<br>Stupid Names Only<br>Footnotes
I mentioned in my last recap that I’ve started thinking of my side project time as tending a digital garden. I want to write a little more about that, because changing how I think about this stuff has honestly made programming outside of work fun again in a way it hasn’t been in a while.
For basically my whole career, every side project has started the same way. I get an idea, and before I’ve written a single line of code that actually does the thing, I’m planning for scale. If I start selling this, it needs to handle tens of thousands of users showing up overnight, right? So now I need real auth, and managed Postgres, and background workers, and a queue, and a name that’s marketable with the .com still available. I’ve spent at least a dozen weekends building infrastructure for applications that never got a second user.
That’s not how any of this works, though. Most software never sees that kind of scale, including plenty of software that people do pay for. A side project definitely doesn’t. Robin Sloan wrote that an app can be a home-cooked meal — something you make for the people you love, with zero ambition of opening a restaurant. In my case that’s mostly cooking for one, which sounds sadder than it is. The actual audience for a side project is me . I know the guy. He’s very forgiving about downtime.
The wasted weekends weren’t even the worst part. The worst part was that the fun piece of the idea, the piece that made me want to build the thing in the first place, was sitting behind a pile of setup that a fictional audience needed and I didn’t. By the time I dug my way to it, I usually didn’t care anymore. The project got a nice README and a quiet death.
Gardening Instead
A garden turns out to be a much better way for me to think about it. I know “digital garden” already means something — a public, always-evolving collection of notes you tend in the open. Mine is the other kind, the kind with a fence around it. You don’t launch a garden. You wander out in the evening and mess with whatever needs messing with. Some stuff grows and some stuff dies, and neither one is really an event.
The middle of my garden right now is Voodoo , and Voodoo is just auth. That’s the entire app: a login page and the sessions behind it. It’s the gate in the fence. Of everything my imaginary users ever demanded, “real auth” turns out to be the one thing I genuinely do need every time, because these apps are private and the internet isn’t. So I built it once, for me. It’s written in Go with Echo, plus sqlc and goose on top of SQLite, server-rendered HTML with no JavaScript at all. The design goal is being simple, clear, and readable above all else. It’s not open source, and honestly that’s part of the appeal. The code can kind of suck as long as it does what I want it to do.
I built Jocko , a fitness coaching app that syncs my Apple Health data and hands it to an LLM so it can coach me. Yes, that means Sam Altman knows my resting heart rate. He’s been very supportive. I didn’t build auth for it at all. Jocko just shares a session with Voodoo via a cookie scoped to .thelinell.com. I built single sign-on for one user. That is a silly bit of engineering for an audience of me, but it’s the kind of engineering I actually enjoy, and it made the second app simpler instead of making the first one “scalable.” It’s already compounding, too: when Scoop , an ice-cream-themed RSS reader, joined the garden, hooking it up to Voodoo auth was a one-shot prompt.
That’s been the surprising part of all this. Building for myself didn’t mean giving up the interesting problems, it just pointed them at problems I actually have. SQLite is plenty of database for me. A single binary on a single box is plenty of deployment. When something falls over, the on-call engineer and the entire affected userbase are already in the same room.
There are other beds in the garden, and I have a confession to make about most of them: they’re the same plant. Cairn is the terminal side of my note-taking system, a little Go daemon that quietly commits my notes vault for me. Vie is a knowledge-graph notebook. Desert-pickle was an Inngest-powered “second brain.” Pensive is, well, you can probably guess. I’ve been blogging about how I take notes for the better part of a decade, and at this point I have built some version of an LLM-powered note-taking application at least four times.1 Every single one of them is, functionally, a worse Notion with a custom harness bolted on… but it’s mine? Gardeners plant tomatoes every spring and nobody gives them a hard time about it. I’m starting to accept that rebuilding the same idea over and over isn’t failing to finish… it’s just what the hobby is.
Not everything is a notebook. My YNAB CLI syncs our whole budget into a local SQLite database so I can query my finances with plain...