Welcome! With my personal website finally up and running, I thought I'd do a short technical writeup about the system that powers the site. Behind this site is a Content Management System geared towards developers and power users, the features of which have evolved from my own needs during the development of this site.
Without further ado, I present to you...
My site is based on a custom written, open source CMS called B3 - so named because its working title was "BlaBlaBlog"; as I didn't feel very inventive, I just shortened it.
B3 does not have an interface for editing and administering content – instead the user must do this manually by writing to and handling files.
The workflow is more or less as follows:
- Write a page or post in Markdown, with metadata (title, tags, etc.) in Jekyll-style YAML front matter
- Add and commit it to a local Git repository
- Push the git repo live
Using Git as a part of the solution means that it is trivial to revert to a previous version of a post (e.g. rolling back to how a post was before a recent edit).
Behind the scenes
What happens when I push my changes live is that the server runs a post-receive hook that checks out the master branch and populates a database with pages, posts, etc.
Only content, associated files such as images and attachments, as well as any custom themes, are versioned in the repository, with system (B3) updates handled via Composer both live and locally.
B3 is built on PHP and MySQL. Some key libraries and frameworks used include:
- The Lumen micro-framework by Laravel
- The Kurenai document parsing library
- Bootstrap as a basis for the default theme
B3 uses dotenv for environment specific configuration, as well as a system configuration file for things like site title, theme selection, social account names, etc.
The default theme includes a task runner (Grunt) with some practical features for local development, including live reloading, LESS-compilation, auto updating the local database with new content upon file changes, etc.
Can I try it?
While B3 is currently available on GitHub and via Composer, it is not really suitable for public use as of yet. It already includes support for automated installation on an ssh-enabled webserver via a bash script, but proper documentation and some code cleanup remains to be done.