Launching FrancisCMS onto the IndieWeb

Published on .

About a month ago, I quietly launched a new version of this site; you may or may not have noticed some changes here and there. A slightly different header, a familiar-but-different color scheme, photos. Or perhaps you’ve noticed nothing at all and you’re reading these words in your feed reader of choice. But behind the scenes, I made a huge change in the code that powers this site.


Flashback to September 2013: I’m in Brighton, UK, attending dConstruct and my first IndieWebCamp. There I found a group of people—tinkerers, really—interested in taking back ownership of their content from third party services more interested in pleasing investors than in pleasing their users. But something separates IndieWebCamp from the rest of the crowd shouting about Web hegemony: this community recognizes the value that silo'ed networks provide (e.g. Facebook’s where your parents hang out online.) while emphasizing the importance of maintaining ownership of the content—words, photos, videos—you produce.

For me, that’s the key differentiator and why I like this community-slash-movement: it doesn’t advocate wholesale rejection of massive, corporate social networks. IndieWeb is largely about creating for oneself first while developing mechanisms that enable communication between your personal space on the Web and those massive, corporate social networks.

There’s plenty more IndieWebCamp-related things to write about, but in the mean time, you can learn more at

Bringing it back home

For years, I used the static site generator Jekyll to create new blog posts, written in Markdown, and pushed out updates by deploying code with GitHub and Capistrano to my barebones DigitalOcean-hosted server. The whole process was relatively straightforward and I was serving static HTML (…and CSS and JavaScript and images). Nice and easy.

But there are boundaries to what one can reasonably achieve with a static site. I wanted to post photos to my site. I wanted to support receiving and sending webmentions. I wanted to more easily cross-post to Twitter, Facebook, and Flickr much more easily.

I started by building a separate webmention-receiving app in Ruby using the Sinatra framework. It ran for quite a while, collecting incoming webmentions, verifying them (manually, unfortunately), and returning all verified webmentions on my blog posts when requested. It worked, but I didn’t like that it was an app separate from my main website and that there wasn’t a “real” user interface for verifying webmentions.


In October 2014, I set out to create an IndieWeb-friendly CMS of my own. Built in Ruby using Sinatra, FranklinCMS FrancisCMS, named for the Chairman of the Board, would over time morph from a Sinatra app to a Rails app before settling out as a Rails Engine. You can read all about the particulars of implementation over on GitHub.

I spent over a year learning, writing, and rewriting FrancisCMS. I should’ve launched months ago, but… you know: hand-wringing. The important part now is that I did launch my site and that I continue working on it regularly at events like Homebrew Website Club (which is where I’m at as I write these words).

For me… and maybe you

In true IndieWeb spirit, FrancisCMS is built for me first. But… you may also find it useful. It’s not the easiest thing in the world to get up and running, but I’ve done my best to document FrancisCMS’ features along with detailed usage instructions. Naturally, there’s still plenty more I’d like to do with it.

This is my space for tinkering, after all.