skip to content
Linell Bonnette

The Other Kind of Digital Garden

These days I build my side projects for an audience of exactly one, and it turns out that's way more fun.

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 SQL, which sounds unhinged and is genuinely one of the most useful things I’ve ever built for myself. And some things die. Kudzu, an earlier TanStack-flavored attempt at the whole garden in a single app — an LLM chat, a note-taking app, and auth by way of Clerk, all at once — never stuck. I named a project after an invasive weed and it still failed to grow.2

Stupid Names Only

The other freeing part of all of this is that nothing in the garden needs a marketable name, and naming things is way more fun when nothing is at stake. Barad-dûr is a little service whose README describes it as “A Dark Tower, full of Daemons,” which is the best description of a daemon server I will ever write. Napoleon is “an AI-powered personal assistant for taking over the world.” Vie’s entire description is “c’est la vie.” At no point did I check a trademark database or wonder whether “Voodoo” would survive a branding workshop.

I think the dumb names actually matter, too. A project with an investor-ready name kind of wants to become a product someday, and you can feel that every time you open the repo. A project named after Sauron’s tower is allowed to just be mine, for as long as I’m enjoying it, and not a minute longer.

I still build software for other people. That’s the day job, and I take it pretty seriously. The garden is where I get to remember that I’d be writing code even if nobody was watching.

Nobody is. It’s pretty great.

Footnotes

  1. There is also a dead folder in my archive directory literally named apple-note-tool. I don’t want to talk about it.

  2. There’s probably a lesson in there. I’ve decided not to look for it.