A while back I planned to start writing more. It started on Tumblr, but quickly fizzled out. I tried out Squarespace recently since I heard so much about them through the various podcasts I listen to. While it was nice and I would highly recommend it for many, it wasn’t for me. They do have very nice templates and a great WYSIWYG system. Their iOS apps were great as well, and I used them to start a few draft posts. I just never got around to finishing them up on my computer and publishing them. I didn’t like the fact that the only way to write and post on a computer is through their web interface. I like my native text editors too much, especially on the Mac, to give them up.

Then I realized VPS hosts are crazy cheap these days, with a basic plan at Digital Ocean coming in at $5/mo. There’s also a ton of information avilable on the web to help if I bump into any issues. Here’s how I’ve got everything setup.

This website and blog is generated using Pelican, a Python static site generator. I write the posts in Markdown and keep the drafts in Dropbox. Finished drafts are added to a git repository, which gets pushed to the servers repository. A post-update hook triggers Pelican to regenerate the site. Finally, nginx serves the content to the world.

The neat thing about this setup is I will always have a copy of all my writing, and switching platforms later isn’t hard. I also have a solid handle on each part of the stack, or can find help through Google easily enough. The serving of the static pages is guaranteed to be fast. I can also quickly push updates and regenerate the site from anywhere I have access to an ssh client, which is pretty much anywhere I can get my iPhone/iPad/MBA online.

This isn’t the right solution for everyone, but if you have some technical chops and want to have a personal website, there’s little reason not to self-host. For everyone else, I can strongly recommend Squarespace. They have an amazing platform and really great templates that look and work well on both desktop and mobile platforms.