Knowfox is now a web content management system, too. More specifically, it is a CMS with an static site generator, driven by content written in Markdown and a layout crafted in beautiful Blade templates.
In the beginning, every page on the web was a static HTML page. But, at the change of the millenium, database-backed websites became fashionable. At the time, the website of my employer, Chefkoch GmbH, was a demonstrator that such websites even made sense. Suddenly, complex web content management mangagement systems like Drupal became a necessity, so that editors could access their contents again. Not everybody could or wanted to host such a complex system themselves. Agencies florished to help publishers cope. At the same time, the participatory Web 2.0 emerged with pioneers like Dave Winer's editthispage.com.
As things got more complex, people rediscovered the joy of static pages. Not every website needs a content mangagement system. This trend took off when Github released their Github pages and the static site generator Jekyll in 2008. Since then, the category of static site generators exploded and a whole ecosystem emerged. Even the popular CMS Wordpress now has a static site generator, relieving site owners from the permanent updates and security patches that Wordpress requires.
For my own sites, I have tried several of these generators. My blog on Physical Computing, Tinkerthon, is generated from static Markdown files by Jekyll. The biggest pain with this is the handling of images. As everything is static, images in the proper format must be prepared separately and be uploaded, using naming conventions to distinguish image formats for thumbnails, text images of image galeries. This quickly becomes a chore.
Knowfox, on the other hand, is the place where I create all my content. It has easy image processing capabilities and scales uploaded images automatically. The only thing missing was a mechanism that exports markup and images into a proper template for a complete website.
As Knowfox is implemented in Laravel, I first experimented with static site generators from the Laravel eco system, especially Jigsaw by Matt Stauffer's Tighten Co. However, it quickly became apparent that it is very difficult to give such a generic tool the perfect blend of simplicity and features. Jigsaw is great for single pages, however its support for page collections is still in its infancy.
So, I wrote my own. This way, I can make use of Knowfox unique content structure and features like automatic image processing to make publishing easy. This is what it can do:
Publish an update from the web interface.
The publishing process runs asynchronously as a background job. It takes a hierarchy of concepts below a root concept, runs it through a set of site-specific templates and turns it into a website with detail and index pages. Systems like Jekyll or Hugo use Markdown with front matter to provide content and configuration for web pages. Knowfox concepts are versioned Markdown, too. The configuration for the whole site as well as individual pages is provided by a block of YAML on each concept. The root concept provides overall structure like meta data, sidebar blocks and a site-wide navigation.
Paginated page indices with thumbnail images are generated from concept lists. The thumbnails are automatically extrated and scaled from images in the individual concepts. Sort order may be manual or by date.
Detail pages on the same hierarcy level get a breadcrumb navigation to link them back to their hiearchy parent. The individual pages on the same level may be linked through previous and next buttons.