reedmaniac.com
– the blog –

Groot CMS, A Work in Progress 26 June 2017

I continue plugging away on the new CMS, which I have codenamed Groot CMS for the time being. The conversion to the Illuminate Query Builder was completed after working steadily every morning for two weeks. While it was a slog and entailed oodles of repetitive work (thank goodness for grep find/replace), I was pleased enough with the result to continue working on the project.

After another month of effort, the entire codebase is entirely in Laravel. The control panel has been redesigned to remove all images, improve the look, use jQuery 2 for interactions, and all the styles are in SASS files that are automatically built into a CSS theme file using Laravel Mix. The SASS approach allowed me to create a variables.sass file for the control panel theme, which means changing the colors of the design is a cinch. 

A new Installer has been built and its development allowed me to experiment with how I wanted to integrate Twig into the CMS backend as well as using migrations and seeds for setting up the application. Also, all of the member related session and auth code is now entirely based off Laravel's session and auth guards, which upgrades the security while allowing more expandability in the future. Numerous facades and libraries have been built to handle things like site configuration, control panel logging, statistics, and view variables.

Finally, expandability of the base system is included under the heading of Plugins. Plugins will have the ability to add control panel sections, tags for the frontend template parser, public facing APIs, and adding additional functionality to the CMS's own code via Laravel events. Those are the important abilities I want them to have out of the gate, but I have a couple ideas for additional features later on, such as CLI tools.

The conversion to Laravel did make the speed of the application take a bit of a hit according to the browser developer tools. I was getting page creation times below 0.1 seconds for most of the control panel prior to the conversion and now the average is closer to 0.25 seconds. This is before I have done any optimization and without any caching though. Also, the control panel homepage in its entirely is only 120KB in size and loads just three files, two of which are files that are cacheable by the browser. This has the effect of making the entire loading and rendering pretty much instantaneous to human eyes. Seriously, things have been so fast during my testing that I can easily miss a page refresh and wonder if the browser did anything.

So much more remains to do. I have a to do list that is about 40 items long right now and it oddly does not get much shorter on a daily basis as things get added just as quickly as a I remove them. But! Progress is happening! And thanks to everything I have done, I have learned even more about how Laravel and Symfony work. It was sort of funny that at the end of last week I discovered a feature in the code that I did not know even existed, which caused me to discover the documentation for that feature and then dive back into the code to learn even more about it. Cyclical learning.

I suspect I have about another 4 weeks of work left until I am ready to start sharing it with a select group of people. There are two large chunks of code yet to write and those changes will percolate though the entire system. It is coming though. Goodness I hope this goes somewhere...