NOTE: This blog has been moved to

Tuesday, December 24, 2013

Moving This Blog to from Blogger to Ghost

My new blog is hosted at It runs on Ghost, a NodeJS blogging platform.


In 2005 when I started this blog the easiest thing to do was to snag a blogspot account and start posting. When I first started blogging it was really to just make notes for myself. Over time the blog became more popular and really outgrew what I would want to do with it on Blogger.

But inertia is a terrible thing ;-) I remember having a conversation with Matt Mullenweg (founder of WordPress) 7 years ago and he told me how easy it was to migrate my blog to Wordpress. I promised I would since it was a much better platform. But I never did it. Just always felt like a little less important than all the other things in life.

5 yrs ago, Theresa Neil & I released our book Designing Web Interfaces (and yes it is sorely in need of an update) and we launched a companion blog on Wordpress. I liked Wordpress, but I didn't love Wordpress. I think it had to do mostly with having to hack away in PHP. Mind you I don't hate PHP. I just don't love it. Due to this I found even less reason to move. I mean if I am going to move to a new blog platform I better really like the environment and believe in its mission.

Enter Ghost

I was really excited when the Ghost blog platform was started on KickStarter. It combined several things I really liked.

1. Markdown for Editing

I really hate writing a blog post and having to mess with a rich text editor or having to think about markup. I just want to write something. Blogger was terrible in the markup it generated. I felt dirty every time I wrote something. Not a nice thing to have run through your mind while trying to inspire the masses.

But markdown -- now that is a different story.

One of the challenges some of you that read this will face when you get a little older is it is too easy to get comfortable in a set of tools. Github certainly tipped the scale for me to awaken me to the simplicity and beauty of markdown. In fact the current book I am writing I am using the Mac app Ulysses which has a really nice markdown environment.

In Ghost, markdown is the lingua franca. It has a really nice side-by-side markdown/preview editor. You can focus on writing and not on the formatting.

2. NodeJS as the platform

In case you didn't know, I love NodeJS. It has helped us start a revolution at PayPal for our engineers and soon our customers as experiences will start rolling out faster.

The good news is Ghost is built on NodeJS. Not PHP. Not some bizarre 2001 platform like Blogger. Given that it is node I can spin up my blog locally or host it on nodejitsu (or any other cloud supporting node) or I can host it on ghost itself for a nominal monthly fee.

Knowing how your blog works -- from how it stores your blog content, how it renders it, how it gets deployed, etc. is really powerful in itself. It's also cool that I can keep my blog as a git repo.

3. JavaScript Templating for Themes

It's simple to grab themes or write your own themes. It uses handlebars templating so is really easy to start working with. If you use the Ghost hosted solution (sign up for an invite) you can just hack on your theme, run locally (or on another platform like nodejitsu) for testing and then when you are happy just upload the theme to platform and you have your new look & feel.

Moving from Blogger to Ghost

Since Ghost is still early on, there are no direct import tools to bring Blogger posts to Ghost. What I did was use the Blogger to Wordpress export to create a dump of my blog posts. I then set up a temporary wordpress blog on one of my Dreamhost sites and imported the posts there.

Then I installed the "Wordpress to Ghost" plugin in my temp Wordpress blog. Then I was able to export a JSON file suitable for Ghost.

Because I could install Ghost locally it was easy to import the JSON file and verify that all 205 posts had made it over correctly. Of course I found issues. There were links to images stored on blogger, links to resources that were scattered all over one of my servers and some links were hardcoded to the blogspot blog. 

This gave me a chance to clean up all these links, have a better strategy for where to put files for my blog and so on. It actually felt good to clean up 9 years of crufty stuff.

I experimented with hosting the new blog on nodejitsu. The big issue right now is jitsu deploys are destructive so each deploy blows away your content (the blog database is stored in the content directory and thus pushed with the deploy). Martijn Swaagman has helpfully written a persistent-ghost wrapper for nodejitsu that allows you to install ghost with jitsu CLI and then when you deploy it copies the database out to its mongo grid, does the deploy and then restores the blog post. Yes, a hack, but it seems to work fine. I did run into an issue with running my blog locally in this configuration. The node module node_sqlite3 doesn't install correctly with node-gyp so you have to do a manual install of it.

In the end I decided to just go with the Ghost hosted platform. I figured I would get better support (you do), better analytics, better integration with their marketplace and they would worry with keeping it running and secure.

However, having the ability to run it locally or any node based cloud solution gives me peace of mind for the future. Even if they failed as a company, I have the blog software and can deploy it and manage in any way I see fit.

I started with a free theme called WillSong. Nice simple theme. I did hack it a good bit to get it to be a little better at responsiveness for mobile and added a third column for bio area, etc. But this is what is cool about the themes. They are really easy to change since it is just Handlebars, HTML5/JS/jQuery, etc. (or they could be any solution you want). Since a theme is self-contained, you just zip it up and can upload it to the hosted blog and you have the new look & feel.

Follow Me at Ghost

Please update your link to for any new blog posts coming my way. Of course the best way to keep up with me is to follow me on twitter @billwscott