March 31, 2026
Finally, the Rails Blog Runs on Rails
Last year, I announced plans to rewrite this blog in Ruby on Rails. It was hosted on Ghost for all these years (which is built with Node.js), and the idea was to rebuild it from scratch in Rails and write about the process as I went along. I even published a few posts as I started development.
However, as you may have noticed, I haven't published consistently for the past six to eight months. What's more, for the last two months, I haven't even written a single post.
Part of the reason is AI, and the proliferation of AI-generated writing everywhere which completely killed my motivation to write. Why spend hours and even days writing a detailed technical blog post when Claude or ChatGPT can explain the same topic in more depth, with analogies and examples, and you can keep asking it to explain the parts you didn't understand? A static blog post can't do that.
I really think the era of generic technical how-to blog posts is over, and I didn't want to contribute to the ongoing slop on the web with AI generated blog posts with zero efforts. So I stopped writing the kind of explanatory technical posts I used to write after learning something new.
On the flip side, while AI-assisted writing killed my motivation to write, AI-assisted agentic coding did the exact opposite. It made me fall in love with programming and building again.
As I started rebuilding the blog, the pace of building quickly outpaced the pace of writing. Every time I sat down to write one over the past two months, it felt like I could use that time to learn something new or build something with agents. The pace of AI-enabled learning and agentic coding is so much faster now that writing about it can't keep up. I'd rather spend that hour making progress than documenting progress I already made.
My AI-journey started with Copilot, but I quickly switched to Cursor and used that for a few months, before trying Claude Code last year. After paying for Claude PRO for the past six months, I finally upgraded to Claude Max last week. Easiest $140 subscription purchase I've ever made.
At this time, I can't even imagine going back to working without Claude Code. Even $140 a month feels like a steal to have an excellent and patient senior programmer working along with me, answering all my questions, patiently explaining codebases and obscure APIs, and doing much, much more without ever getting tired. Agentic coding with a token efficient language and framework like Ruby on Rails is pure joy!
Anyways, back to the blog. Since I won't be publishing much going forward, it only made sense to self-host everything to avoid the recurring costs. After working on the blog in short bits and pieces in my free time, finally it's at the stage where I felt confident enough to switch the domain over.
As of yesterday, the blog is running as a full-stack Rails + Hotwire application, backed by PostgreSQL, self-hosted on a Hetzner server, deployed with Kamal, with Postgres running as a Kamal accessory.
Email delivery is handled by SMTP2GO, which I've become a huge fan of. It lets you send both transactional and marketing emails via SMTP. I initially went with Kit (previously ConvertKit) and even implemented the complete API integration, but then decided it was worth handling all the email marketing myself and learn about email delivery in the process.
As I learned while building, even a simple blogging CMS has a lot of interesting stuff going on beneath the surface. I built the initial CRUD part, where I could write and publish posts, in a few hours with Claude. But building the admin dashboard, subscriber management, email delivery, the subscribe/unsubscribe flow, and newsletter publishing took a while to implement, even with Claude.
Most time-consuming of all was importing the 225 posts from the old blog. Ghost's export doesn't make this easy, so I had to copy and paste each post along with its images manually. The old blog also had a ton of interesting comments and I didn't want to lose all that history, so I built a subscriber impersonation feature and manually added all of them. It's been a fun trip building the whole thing from scratch and reducing my costs by 10x along the way.
Anyways, so that's what I've been up to for the past few months. As software developers, we're truly living in wonderful times. Never been a better time to be a developer.
As for the blog, I'm still not sure what I'll write about going forward. The generic technical how-to posts feel pointless now, as I mentioned earlier. But I do want to start writing again. Maybe less about how to use the Rails Router and more about the personal side of software development, like running a consultancy, working with agents all day, and deal with all the non-code software stuff that nobody teaches you.
So we'll see :)
Subscribe to get future posts via email (or grab the RSS feed)
Comments (11)
I love your technical posts and I'll be sad if you don't write them anymore. I trust your post much more than I trust an LLM. Besides, your post trains them!
+1
+2
Thanks, Alan. Appreciate the kind words.
The is already some people the look up for your content. Do not stop writhing, please.
Thanks Wagner, I won't :)
I love your writing and illustrations. Your work is truly unique, and I would be saddened to see it disappear. I would appreciate an occasional article that incorporates AI, but I would be more interested in content that is centered around core Rails-related topics.
Appreciate it, Vikrant. Thanks for the feedback.
I've learnt so much about Rails reading your articles even after so many years using it building apps. I like your style of writing and your way of making complicated things perfectly clear. As Alan said, we trust you more than AI. Please keep on improving our in-depth knowledge or Rails.
Glad to hear it, Christian. Thank you for your comment.
Excited to see what this grows into!