Every time it went the same way. I'd be happy with it, publish a few posts, then slowly drift away. I kept renewing the domain, but at some point I'd delete the VPS behind it. The address stayed alive, pointing at nothing. And I'm fine with that, honestly. An old blog is a snapshot of an older me: the things I cared about, the tools I used, the writer I was. When it doesn't fit anymore, letting it expire feels more honest than keeping a neglected archive around.
What bugged me was never the abandoning. It was that every time I had a new post ready and wanted to publish again, the blog was gone. I'd have to rebuild one from scratch before I could put a single word out.
So this time, with a finished draft and nowhere to put it, I thought about Bearblog. It's a platform built on the idea that a blog needs almost no CSS and almost no layout: a header, a list of posts, a page for each. That's what I wanted. And I figured an AI coding agent should make rebuilding it almost free. So I pointed OpenCode at it and asked it to build me one.
I started from a fresh laravel new, the same way I start any project. What I didn't expect was that I'd end up taking more out than I put in.
The trade-off isn't free, and I know it. Skipping a commercial platform means the server and the app are mine to keep alive, and that maintenance is exactly what made me walk away before. I'm OK with it. What's different now is that coming back doesn't mean starting over.
Here's what happened.
I didn't design a blog. I pointed my agent at one, and that's the whole method. What came back surprised me.
It didn't just copy the layout. It came back as Herman's blog. Herman is the person behind the Bearblog site I used as a reference, and the agent pulled his real content. His name on the about page, his projects, his posts, the newest ten in full. A working prototype of someone else's site, running on my local machine. The agent copies what you point it at, and I'd pointed it at his. The posts turned out to be useful scaffolding. I dropped my own draft into the same shape.
From there it was just steering. Replace his content with mine. Drop his posts. Where the agent hadn't built something, it left a placeholder, like a # where the XML feed was supposed to go, and let me decide. I asked for the feed and it built it. I skipped the contact page entirely and used a plain mailto link. I picked what to keep.
It even interviewed me. To fill in my about and "now" pages, I had it ask me questions: my name, what I do, what I'm working on. Talking it out with something, even an agent, surfaced content I couldn't just write cold.
Bearblog's approach is CSS embedded right in the layout, with no external stylesheet. So my layout just doesn't load the Tailwind app.css that Laravel ships with by default. Posts aren't in a database either. They're flat Blade files, just HTML, no CMS, no components. My production footprint ended up smaller than my starting point. I took more out than I put in. That's also why I think this one sticks. Less moving parts means less to break and less to keep updated. No database to back up, no CMS to patch. The upkeep stays small because the blog itself is small. And that's the whole bet, really. The thing that killed every blog of mine wasn't the abandoning. It was the cost of starting fresh. A blog this small is cheap to rebuild.
Deploying was the easy part, because my VPS was already set up. I run Eddy, a self-hosted server management panel, alongside other Laravel projects. Adding the blog meant creating a new site, pointing it at the repo, and deploying. The setup is the only hard part of self-hosting, and I'd already done it.
Start to live was maybe an hour. I don't remember exactly, and that's the point. It moved fast enough that I didn't have time to procrastinate before the post was up.
If you want to do something like this, there's not much to it. Point your agent at a reference you like, let it copy, and from there you have something to work from. Take out what you don't need, add what you do.
Publishing works the same way. To put up a new post, I point my agent at an existing one as a reference. It writes the new one in the same shape, adds the slug to my blog controller, commits, and pushes. Then I open Eddy and click deploy. That's it. I could set up a GitHub Action to auto-deploy on every push, but I haven't yet. Manual first, automate later. Same way I ship the writing.
The real thing that kills a blog isn't the upkeep. It's whether you keep showing up. So make it a place you actually want to come back to.
What I know works is pointing an agent at something you like and letting it copy. I'm not sure what else they're good at, but copying works.
And maybe the bigger thing. It's fine for stuff to end. I publish now. If this blog rots someday, I'll make another one in an afternoon. I don't need it to last. I just need to be able to make it again.