Content Management: Static web site generated offline
From plain static to LAMP and back to static
A lot of years ago CERN engineers invent Word Wide Web technology as a linked set of plain text documents with links to each other and special formatting for visualization. Ancient Content Management was just an editing of static files on the disk. Times changed. We passed several huge revolutions in Web Development and Content Management. LAMP stack and its similar analogies based on other platforms were like standard for decades. We hold data and other content in relation database with SQL interface to access it. The pages have been treated as HTML content generated dynamically on server side by some engine implemented in a programming language with appropriate library or framework. All parts of this scheme have been re-designed or re-invented from time to time. Some of them even several times. There was a lot of hype about Web 2.0. For making development process more robust and performance of solution better, we started to use solution appropriate for specific task or project, e.g., MongoDB instead of MySQL, MVC instead of mess of code. One of such method is to present web site as a set of pure static web pages without any dynamic logic on server side, absolutely.
Generate static content offline
Main idea of such approach is to have a project with sources like data, html templates or includable parts and containers to wrap all those elements together and configure navigation between pages. On another hand, we need a tool or even several utilities to build the project into destination representation of static web site. First time, our team experienced such technology in the Fitness project for very famous Top 50 public Web Portal 10 years ago. Nowadays, offline web site generation has a lot of applications for various cases and used widely.
As the web site is pure static, it’s very efficient at line of performance. It is ok to use any platform or web server for hosting, e.g., light nginx web server without any backend engine. All pages are just native pages with correct links, that’s very good for SEO. What cases should this scheme be suitable for? Any application where content doesn’t change too often and have not personal user customization or state on the server side. Actually, it’s ok to treat some user specific state or data on the 3-rd party server. There would be a case of cross-domain usage of some SaaS, but even without such complexity it works the best way for pure information sites like blogs or even portals with multi-level categories tree structure. Technically, key point is the generator. We have to provide HTML templates and content for the tool as an input. As you catch, it’s possible to avoid such things like code duplication. E.g., design header and footer for all pages of the site in single place, then just use it in appropriate places. The content and its structure have not to be hardcoded as well. There would be even some storage or database with UI admin interface for Content Management. At line of simplicity, simple JSON file or bunch of them is also very good solution.
Jekyll [https://jekyllrb.com] is a very popular tool to handle a blog system with GitHub Pages [https://pages.github.com] integration as a free hosting platform. Markdown language is used for plain-text formatting with further compilation into correct HTML code. Besides, there are alternative tools: Middleman, Hugo, Octopress, Metalsmith, Pelican, Hexo.