Decoupled CMS is the New Black
Seth Gottlieb writes about how he’s come full circle back to static publishing of websites.
The sites are content-managed (-ish) in the background, but written to files then uploaded to Amazon S3 to be served.
And this brings me to my little obsession with static publishing. I am hosting a few sites on Amazon S3. The cost is ridiculously low and the speed is crazy-fast. Publishing them is fun too. For example, I publish my little personal site (www.sethgottlieb.com) using a site generator called Hyde, which is a Python port of a Ruby-based system called Jekyll. The way these generators work is that you enter your content in HTML, Markdown, or some other syntax and then run a script that renders static HTML pages with your presentation templates. Presentation templates can also do useful things like create listing pages. The Hyde sample site has a blog and there is a script to migrate from WordPress.
There’s lots of goodness here. For some background on static publishing, consider my blog post of a few months ago: Decoupled Content Management 101.
The trick Seth is doing here is sort of content managing them on the background, but then “freezing” them to disk, and publishing the result. So, he has a “repository server” in the form of a local CMS, and a delivery server in the form of Amazon S3.
And, often, CMS isn’t even needed. If you’re comfortable working in code, you can just version manage in some kind of SCM, and use a TMS (template management system – an acronym I totally just made up) to make consistent output. I wrote about Nesta a few months ago, which is worth checking out (incidentally, I rewrote about 80% of Nesta in ASP.Net MVC in about two hours one afternoon – it’s that simple).
This feels very comfortable to me because this blog is still published with an ancient version of Movable Type, which caches to disk. I’ve wired it up with a lot of PHP (MT is pretty much just writing PHP include files, at this point), but the principle of storing the data somewhere and using a TMS to get decent output in another repository (the file system, in this case) is the same. I liked Seth’s idea of pushing to S3, and perhaps there’s a viable model where I publish on an EC2 instance that drops content into an S3 volume for delivery.
(An aside: something I always find funny when talking about this is how we often say things like, “we’re going to write a physical file out.” Really? A physical file? How physical is that file, really?)