Beautiful tools inspire beautiful work - doubling down on Ghost

Why I spent a week building custom Ghost themes for my blogs with AI and why you should too

I spent one week upgrading my personal website and that of my business blog to use Ghost.

One of the under-talked aspects of using a beautiful products is just how much inspiration they unlock. My old websites became clunky and a bother to work with. I feel that was one of the reasons why I didn't write as much as I wanted to.

Now that I have beautifully designed homes for my writing, it is making me want to write more.

In this article, I'll try to convince you to code a Ghost theme to build the website of your dreams too.

My setup

I'm self-hosting Ghost on a $12/month DigitalOcean droplet. This basically gives you all the disk space you'll need for your blog's lifetime (50GB) and bandwidth that scales no matter how popular your website gets (2TB/month). If you ever run out, DigitalOcean makes it easy to upgrade.

Kudos to Ghost for making the installation process of their open-source product so seemless. And with the help of ai, I was able to be even more fearless and take it to a whole other level as I'll describe below.

Why I moved to Ghost

Even though I've been using Ghost for this blog since 5 years, I chose Super.so for my company's blog 3 years ago because it was easy to set up - whereas Ghost required you to create a custom theme.

But upon reflecting on the year 2024, I realized that one of the reasons why I procrastinated on writing was because I dreaded using the tool. Lots of reasons:

  • I dreaded publishing with Super because Notion is so sloooww. Not to mention that every time I make an update the Notion page, I need to log into Super and hit that reload button to make the changes live. (Wasn't the whole point of using Notion as your CMS so you didn't need to deal with another software?)
  • I was not able to do little things like showing article metadata
  • I hated doing the math on how Super will render a particular Notion component
  • Landing page never looked exactly the way I wanted to. Especially on mobile.
  • I still don't get articles showing up on search engines.

My conclusion: Using Notion as your CMS is a convenience no one needs.

So in 2025, as we're doubling down on content as our core marketing strategy for Curated Connections, Ghost became the clear choice for a number of essential reasons:

  1. I know it's robust

I've been using Ghost for ~5 years now on nityesh.com. I was actually using V1 (latest release is V5). And I've never even had to open the hood after I set it up.

My articles often get 1000s of organic visitors every month, Digital Ocean keeps charging me $7/month and things keep running smoothly.

2. Powerful right out of the box

Ghost has:

  • A beautiful, powerful editor that supports all different types of blocks like HTML, public previews for paywalled articles, collapsible toggle and everything else I'll need.
  • SEO taken care of with support for adding custom metadata.
  • Powerful membership features (like paywalled content, login/subscribe)
  • And a Zapier integration - right out of the box.

3. Self-hosting is really inexpensive

I'm paying $14/month to DigitalOcean for hosting the company's new Ghost blog. That essentially gives me a website that will handle unlimited content, unlimited traffic and run very fast.

4. Custom themes to build a website of your dreams

Finally, the most important aspect is how it allows you to pop the hood open and upload custom themes. They've built a beautiful little framework to write custom themes in HTML, CSS and Javascript. This means there's literally no limit to what you can build.

This was an important factor for me because I've always found the themes on their marketplace to be rather limiting.

Historically, I've resisted going the code route because programming was never my day job. But lately, since I've been coding with the help of Cursor with Sonnet 3.5, I knew that the code part will not be a problem.

And I was correct! It took me just a couple of days to write my own theme with zero hiccups.

What if I'm not a developer?

If you've never touched code before or don't know what a terminal is, yes - it will be more difficult for you to create your custom theme.

But if you have ever built a hobby project or taken a CS class, I bet there's no easier way for you to go from idea to a website. IMO customising Ghost is considerably more pleasant than using a website builder like Webflow or Framer.

At no point did I get that helpless feeling of being stuck or lost, even though I barely know any Javascript or CSS (I only learnt Tailwind to build my SaaS). All thanks to Cursor and Claude.

In fact, the AI mostly one-shotted through whatever design tasks I was giving it. The most challenging part was upgrading this website from Ghost v1 because I had never upgraded it in the 5 years of its existence. But even then, the hardest part was to not be lazy and copy paste the relevant terminal messages into the AI chat.

My advice - try installing Ghost on your local machine by following this guide and see if you can get a localhost version of Ghost up and running. If you can do it, then you're fit to build your custom theme. (Tip: ask your AI about yarn . You'll need it.)

The hobby programmer's guide to building a custom Ghost theme

I customised Ghost's default theme - Source - for this blog. I call it Chronicles (Github) and it has these extra features:

  • It shows content of the About page (identified by the /about slug) on the home page.
  • The post list on the homepage allows filtering posts by their tags. This required me to write my own Javascript.
  • I removed the search bar and featured post functionality because i didn't need them.
  • The logo is shown on the navbar along with the site name (weird that it's not the default).
  • And customised the footer text.

This website you're on uses the Chronicles theme. For Beginner Maps, I customised my Chronicles theme even further to create custom tag pages, show testimonials on the home page (grabbed from the /testimonials page) and show podcast player links on posts tagged with "podcast". I call that theme Maps.

If you're following my process to create a custom theme, I'll recommend following these steps:

  1. Start with the default Ghost theme - Source. Use it and get a feel for it. Understand its power and the limitations.

You will inevitably find yourself wanting to do some things that are just not possible with the theme. Write them down. That's what you will build.

Q. Shouldn't I go looking for other themes in the marketplace?

While that's certainly the prescribed way to go about these things, I wouldn't recommend it simply because we are here to build a website of your dreams. And it's highly likely that no theme on the marketplace will give you exactly everything that you want in your website. 

With the latest AI tools, it might even be faster to code your custom theme than trying on different themes. Not to mention more fun!

My list for Beginner Maps

2. Create a custom .cursorrules file that the AI will use as instructions.

Here's my .cursorrules file

you are a senior developer who is an expert at creating Ghost custom themes according to requirements of your clients. using your skills you can build the perfect custom looking blog for anyone using Ghost.

i'm trying to build a custom theme for my Ghost blog hosted on digital ocean. i need your help in making the website completely customised according to my vision.

wherever possible, i want to use the dashboard settings available. but otherwise i want to use the customisation options available while writing the ghost custom theme.

i want to keep the website clean and yet aesthetic. i don't want to use colours only as accent- otherwise i love the white. i also want the user to have a great reading experience - which ghost does by default.

about website:

- name - chronicles of nityesh
- ghost version - v4
- template starting point - Source template by Ghost. here's it's README file @README.md

about me:

- i'm a ruby on rails developer completely new to the javascript ecosystem
- i've installed ghost cli on my local machine for developing the custom theme
- i'm comfortable with writing embedded html pages. i think handlebar is similar to the erb format of rails.

2. Prepare good mockups that roughly approximate the design you want to see. I use Excalidraw for this.

3. First prompt - "Do you understand the project based on this README and what your role is here?" Attach the README.md file of the theme here.

4. Then, describe what you want to do. Give it the existing .hbs files from the theme and your mockup. Claude 3.5 Sonnet does extremely well on the first try. So well that if something doesn't work, double check and make sure that you're following Claude's instructions. And when you do run into errors, just ask Claude and it resolves them.

5. Don't be lazy. Use a tool like Whispr Flow to speak if you're feeling particularly lazy. But the general rule is that the more thorough you are in your prompts, the better the output is.

Don't worry it won't break

The best part when developing your theme is that you can't break your website. A theme is just the skin on the actual system. The worst you can do is cause 404 errors due to using Handlebars template in the wrong way. You can always revert back to the custom theme with no loss to your data in any way.

This gave me a lot of relief when I was copying and pasting the javascript code willy nilly just because Claude told me to.


Good work is its own reward. No matter how many people read it or how many signups it brings, there's a joy in writing your mind, your opinions, your lessons and your hot takes.

And having a great tool is key to doing good work.