After a decade of running the FireOak website on WordPress, we were ready for a change. The plugins, the patches, the creeping bloat—it all added up. We wanted something faster, more streamlined, and easier to maintain. So, in a single weekend, we migrated our entire site from WordPress to Ghost.
Here’s how we did it, what worked well, what didn’t, and why we still think the trade was worth it.
Why Move at All?
Our WordPress setup had become a bloated, slow mess. Every improvement seemed to require another plugin or paid subscription: Elementor for page building, Gravity Forms for forms, WordFence for security, and the list kept growing. Between the plugin overhead, constant updates, and performance issues, the site was more of a burden than a tool.
We wanted a platform that was faster, simpler, and didn't nickel-and-dime us for every core feature. Ghost gave us that.
How We Pulled Off a Full Migration in a Weekend
We divided the work between two people:
- I focused on the homepage, visual design, and theme customization, making sure everything looked and functioned correctly across devices.
- Abby handled the content. She set up a series of automations involving Make.com's AI agents to extract 135 blog posts from WordPress and ingest them into Ghost via the Admin API. That's the only way we were able to do the migration in one weekend.
While blog posts were imported programmatically, Abby (intentionally) recreated all of our static pages by hand, using Ghost’s editor to rebuild them with fresh layouts and updated content.
Ghost Isn’t Really Designed for Company Websites
Here’s something we wish we had known going in: Ghost is really good at blogs and newsletters. It's not so great at static websites.
Specifically:
- The homepage experience out of the box is centered around posts and feeds. It can be a bit of a headache to add static content or style it. We knew from various blog posts and YouTube how-to videos that this was going to be an issue, but we were still surprised at how limiting the out-of-the-box experience is for a static home page.
- The content blocks you do get aren't as customizable as we would like.
To make Ghost work for our needs, we had to get creative. Our homepage is a hybrid: part dynamic content controlled through the admin panel, part custom-built layout using a heavily edited template from the Flair theme. It was more work than we expected, but we’re happy (enough) with the result.
Theme Setup & Routing
We used the premium Flair theme as our base – not because it was flashy, but because it was clean and had some homepage customization, plus native support for drop-down menus and larger footers. We uploaded a custom routes.yaml
file to get proper routing for pages like the home page, and we created a separate routing for a blog page.
The Homepage
To make the homepage work the way we wanted, we had to dig into the theme’s template files and customize them—especially to blend static content blocks with dynamic post feeds. That kind of control was necessary to make the site feel more like a company website than a personal blog.
We made extensive style updates to the homepage. While the Flair theme gave us a solid foundation, we heavily customized fonts, layout spacing, button styles, and homepage sections to match our brand. The homepage, in particular, involved blending Flair’s native homepage configuration with custom HTML and CSS injected through Ghost's code injector. We also adjusted color schemes, added subtle animations, and fine-tuned the mobile experience. Almost every visible element—from the hero section to the footer—was restyled in some way to create a site that feels uniquely ours.
As much as possible we tried to make customization in the code injector to protect the changes as the theme is updated. However, we did have to directly edit a few theme files. We have recorded what changes were made so when the theme is updated, we know what edits we need to make.
Automating Content Migration with Make.com
Manual migration of 135 blog posts wasn’t an option. We used Make.com with their new AI Agent modules to develop automation scenarios to:
- Scrape content from WordPress, including slugs and tags
- Strip out all of the WordPress-related CSS and HTML
- Re-encode the posts in clean HTML
- Push the cleaned-up version of each post directly into our new Ghost instance
It saved us a massive amount of time and let us focus on higher-value tasks like rewriting pages, adding new content, and refining the site’s design.
The Real Win: More Time for Content
One of the biggest benefits of switching to Ghost is something simple: we can finally focus on publishing again.
In WordPress, creating a blog post often meant navigating a slow, overloaded admin panel, dealing with clunky blocks, and dodging plugin errors. It was such a hassle that we barely posted at all.
Now, with Ghost’s fast editor and intuitive workflows, we’re excited to get back to writing. No distractions, no updates to manage—just content.
What We Like About Ghost (Still)
Even with its quirks, Ghost is a breath of fresh air:
- The admin panel is simple and uncluttered
- It’s incredibly fast—page loads are near-instant
- No plugin maintenance to babysit
- Markdown and email newsletter features are baked in
It does one thing—content—and it does it well.
What We Don’t Love
Ghost isn’t perfect. A few things we’d caution others about:
- Not ideal for marketing or company sites without some theme-level customization – especially for the homepage. Or, at least, be prepared for some quirks.
- Page list in admin portal is hard to manage. The list of pages is sorted by date created, and there's no way to sort them alphabetically. It's very difficult to navigate if you have a lot of pages.
- No recycle bin — if you delete something (a page, post, or tag), it’s gone forever. There’s no undo or trash folder. So be careful!
- No media library – In order to add a stand-alone image to the site (for example, the small leaf bullet icons on the home page), you have to add an image block to a page, upload the image there, right-click the image to get its URL, then delete the image block. And there's no way to browse through your uploaded content. (We are self-hosted, so we can sFTP to the Content folder, but that's not as easy as a library in the admin portal.)
That said, we’d still rather deal with these constraints than go back to patching plugins and dodging security vulnerabilities every week.
Final Thoughts
This project was fast, but not easy. We sprinted through content migration, page rebuilding, template editing, and visual polish in just a few days. The end result? A cleaner, faster, easier-to-maintain site that better reflects how we work today.
Ghost isn’t for everyone. But if your site is content-driven, and you’re comfortable customizing a theme or two, it’s absolutely worth considering.
We’re glad we made the switch—and even more excited to finally get back to blogging.