A few weeks ago I decided that I wanted to give my blog a much needed overhaul (an event that seems to be becoming a somewhat annual occurrence). At the time I saw two possibilities for its successor: Tumblr or another bespoke platform.
At first I decided upon Tumblr because I liked the idea of its simplicity but it was around that time that I was also introduced to Sinatra. I realised quickly that, by using Sinatra, I could roll my own system and still keep the simplicity of something like Tumblr.
My first decision was that I didn't want an admin section; I wanted to write posts using TextMate and track them with Git. All of the articles are simply text files written in Markdown format. To see the original version of any article simply append '.text' to it (for example, you can see this article's Markdown source by visiting /a-simpler-blog.text).
The article sources are then scanned and parsed using Maneki to extract the meta data. Most articles are stored in a format similar to this:
# This is the title - published: 2010-10-10 10:10 - tags: these, are, tags This is the content of the article.
The reasoning behind formatting posts this way was that they could be easily parsed but also still make perfect sense in all three contexts: In the theme of my site, by themselves as HTML, and in their original Markdown format.
Next I added the usual core stuff like archives, sitemaps, and RSS before moving onto the design. I already had a mostly finished Tumblr template that I had been working on in the 'pre Sinatra' days that I harvested for use as the new blog's theme. Using a design that was meant for Tumblr kept things simple - there was very little that needed to be changed to accommodate Sinatra.
As with my previous blog, I have opted to not implement comments. I still feel that if a post is worth replying to then you may as well do it properly and reply via Twitter/your own blog. Another piece of functionality carried over from my previous blog is default searching - if you type a url wrong then it will resort to searching for that content (eg. /sinatra isn't a post title).
I've also posted the entire source of this blog to a project on GitHub. If you like the idea or want to use something similar for yourself then let me know.