· 5 min read

Rebuilding My Blog From the Ground Up

Leaving Ghost for Astro and Cloudflare Pages: owning my blog stack

My blog ran on Ghost for years and felt fast enough. Then I rebuilt it with Astro and Cloudflare Pages.

Page load dropped from about one second to under 300 ms, the stack cost went to zero, and I finally owned every part of the experience.

This is why I left Ghost and rebuilt the blog from the ground up.

Why I Left Ghost

Ghost is a great product. If you want a managed blogging platform with a clean editor and built-in newsletter support, it does the job well.

My reasons for leaving were not about quality. They were about control and fit.

Since my goal this year is to start publishing weekly, I wanted my blog to feel completely mine: faster, simpler, and shaped exactly to my preferences. Ghost did not allow the level of customization I wanted without workarounds.

The bigger issue was scope. Ghost Pro is not cheap, and self-hosting Ghost means running a server, a database, and ongoing upgrades. For a personal blog with one post a week, that stack felt like overkill.

I expected the newsletter to be the hardest part to replace. It turned out not to be.

Choosing the Stack

I did not spend weeks evaluating frameworks, like I would in the past. The decision was pretty simple.

Lately I heard a lot about Astro and I wanted to try it out. It ships hardly any Javascript by default, supports Markdown and MDX natively, and gives you full control over the output. No hydration overhead, no client-side routing unless you explicitly opt in. Just HTML and CSS.

Cloudflare Pages for hosting. Free tier, global CDN, automatic deployments using GitHub Actions. The site builds in seconds and deploys to edge locations worldwide. No servers to manage, no bills to worry about.

Markdown files instead of a database. Like we all know, lately everything has been about Markdown files, so why not put every post in a Markdown file in a Git repository. I can make changes to it in any editor, preview locally, and publish by pushing to main. Version history comes for free.

For my newsletter, with the full 12 subscribers, I first thought to not include it anymore. But then I found Kit, 10 000 subscribers for free. Perfect for my use case.

The entire stack costs me nothing beyond the domain name, and my time of course.

Performance Results

The page load numbers are the clearest win.

Before
Page load time dashboard before the rebuild
After
Page load time dashboard after the rebuild

In real usage the Ghost site felt reasonably fast, around one second to visible content. However, Lighthouse mobile simulation revealed much heavier rendering costs, especially LCP. The Astro rebuild reduces both perceived and measured performance costs.

The architecture shift from dynamic rendering to static edge delivery shows up clearly in performance metrics.

Lighthouse snapshot (single run, mobile emulation, default throttling).

Here is a Lighthouse snapshot (single run, mobile emulation) comparing the old Ghost site with the new Astro build:

MetricGhost (before)Astro (after)
Performance score6377
Accessibility score80100
Best Practices score81100
SEO score100100
FCP2,597 ms1,049 ms
LCP23,758 ms4,792 ms
Speed Index7,857 ms1,296 ms
Total page weight7.71 MB0.42 MB
Requests3628

The largest improvements come from removing heavy images and client-side scripts. Total page weight dropped by over 18x, which directly improved Speed Index and LCP.

Design + UX Updates

The better question would be, what did not change. Well, the content.

The homepage moved from a stock template to a focused, branded entry point with clear hierarchy and fewer distractions.

Before
Homepage before the rebuild
After
Homepage after the rebuild

Beyond speed, the design is entirely mine. The goal was a calmer, more intentional experience with room to grow. I can now iterate quickly and add new features without fighting the platform.

Before
All articles list before the rebuild
After
All articles list after the rebuild

The new list view trades heavy thumbnails and whitespace for tighter hierarchy and faster scanning. Smaller images, consistent metadata, and clearer contrast mean you can find a post at a glance without hunting for it.

Before
Blog reading view before the rebuild
After
Blog reading view after the rebuild

The reading view moves from a template-heavy page to a focused editorial layout. Better line length, calmer typography, and fewer competing elements keep attention on the text and reduce cognitive load.

Before
Blog page CTA and recommendations before the rebuild
After
Blog page CTA and recommendations after the rebuild

The CTA experience is now integrated into the reading flow instead of floating over it. Recommendations feel like a natural next step, not an interruption, which keeps the page focused while still nudging the next click.

Before
Newsletter section before the rebuild
After
Newsletter section after the rebuild

The newsletter now feels like part of the site, not a third-party embed. The form is lighter, the spacing is calmer, and the CTA matches the rest of the system, so it reads as an invitation rather than a modal ad.

Site features overview in the new blog

The benefit of building this site myself is being able to introduce more features to improve the experience:

  • Search across every post (full text, fast).
  • An About page that actually explains what I write about.
  • Dark/light mode that preserves the brand tone.
  • One-click code copy for snippets.
  • Dedicated tag pages so topics are easy to follow.
  • Posts grouped by year for quick scanning.

The Takeaway

If you are a developer blogging on a managed platform, ask yourself what you are getting in return for that convenience. If the answer is “less control and a monthly bill,” it might be time to build your own.

It does not need to be complicated. A static site generator, a CDN, and Markdown files will take you further than most platforms. And the process of building it will teach you more than any blog post about blogging ever could.

Including this one.