• Ghost offers more freedom and features for minimal technical requirements
  • Medium has the network effect, though it has been decidedly worse in 2023 and onwards
  • The process wasn't as hard as I thought it might be

Carlo.Cloud got a new look in the last few days. I decided it was time to finally move it from Medium and bring it to a new platform. I had spent some time looking at options and considering my transition plan before finally executing. I wanted to keep the downtime as minimal as I could. Naturally, this meant that DNS was the weakest link.

Why Migrate?

I've been on Medium for just over two years at the time of writing this. I spent my first few posts writing in the native editor, but that novelty wore off quickly. The in-browser editing functionality wasn't great, and support for extra bells and whistles was pretty much limited to basic formatting, dividers, and images.

At the same time, I was enjoying the occasional boost of traffic to my posts due to the network effect provided by Medium. So, I decided to stick it out, write elsewhere, and copy/paste my articles into Medium.

This works fine, and I'm sure it still would. Since I started writing and posting, I felt that Medium leaned too far into the paid model by having "Member-only stories" while simultaneously tweaking monetization to weird extremes. Though I never chose to monetize or stick any of my blogs behind a paywall (and I still don't intend to), this didn't sit well for me since it led to an influx of clickbait articles and later GenAI articles that would be recommended right next to my own.

Finally, sometime in 2023, Medium announced their end of support for custom domains. Since then, I've found my domain configuration to be flaky. Sometimes, I would find my URL would redirect to or my profile on Medium, or even just an error page. It didn't happen a whole lot, and I can't prove that it was related to the custom domain, but since that feature was legacy, it's not like I expect active support to continue for it.

Why Ghost

I looked at a number of options. WordPress, Jekyll, and 11ty, to name a few. I'm not afraid of static site generators; in fact, I use Jekyll for a different site right now.

Writing blog after blog in Markdown felt like it might have become tedious, and I didn't really want to be able to use anything as a potential reason not to write. Additionally, migrating from Medium to anything Markdown formatted was more difficult than it appeared to be.

Ghost felt like a happy middle ground. It was essentially an open-source Medium. The editor was similar, the purpose was similar, and as a bonus, it was more feature-filled and theme-able.

Now, I could use managed Ghost or self-host. A third option that I've recently been toying with is using AWS Lightsail. It's sort of the middle ground, and I'm not 100% sure that I'll stay on it, but for now, settled with Lightsail. At some point, I'll do a write-up of the service, but for what it is, Lightsail is a rad little product offered by AWS.

There are certain things I don't like about Ghost. For example, there is built in newsletter capability, however you need to use Mailgun. I'm hosting on AWS; why wouldn't I want to use SES if I'm starting from scratch?

The Process


A big reason why I took as long as I did to make the migration from Medium primarily was due to how much I didn't feel like converting a bunch of HTML from Medium to Markdown. Fortunately, two things changed my perspective:

First, I realized you can download all of your content. I hadn't known this until I came across it in the "Security and Apps" section of the settings page. Why is it there? I have no idea, but it's a wonder that I found it at all, to be honest.

Second, Ghost made it pretty easy to open up the HTML files that you can download from Medium, copy, and then paste into a new post on Ghost. The formatting translation is pretty great. I had to change my image references since I imagine Medium wouldn't allow hotlinking for a long time, but that was really easy.

DNS, or Minimizing Downtime

My DNS records were pointing to Medium. I had an IP for my new Ghost blog, too, with all of my content already. It's not like I get huge amounts of traffic, but I have a lot of links out there, and I didn't want someone to go to a link that was formerly Medium and get a 404 on the Ghost blog. I'm sure there's a reason for it, but Medium does some weird slug manipulation for the URL, typically a partial of the title and then a hash of some sort.

I only had 18 blogs to redirect, so I opted for Cloudflare's Bulk Redirect, but I could have used Ghost's native redirect functionality. It was pretty easy to setup the redirect. I tested it with a single, low-traffic post I have, and after I saw success, I cut over the A record from Medium to Ghost. Using Cloudflare here was an advantage since the DNS propagation for Cloudflare's network is pretty fast.

What Next

There you have it. Carlo.Cloud moved to a new place in the cloud, and I'm feeling more optimistic about where my content is and how it's viewed by the audience that I want to do it.

I think I'll still end up cross-posting to a few places like Dev.To, Community.AWS, etc. But Carlo.Cloud will still be the primary home for my thoughts and explorations.