The state of CMS in 2016
I’m a full-stack developer who also builds websites. I’m getting sick and tired of the mess that is the CMS options for developers today. This post will be somewhat a brain-dump; I expect I’ll flesh this out a bit more as I get more time.
- Nice looking UI
- Big plugin/theme ecosystem
- Advanced Custom Fields - This is a big plus
- Ugly, inconsistent code
WordPress has a rotten core. It has placed too much importance on backwards compatibility, and over time has become unwieldy and ugly. This problem contributes to a lot of the below issues
- Templating is muddied with code, and visa-versa
- Standards are entirely non-existant
- Security vulnerabilities are rife, especially with plugins
- Really enjoying the consistency of the codebase so far
- Twig templating is a big win
- Baked in fields support
- Clean, simple admin area
- I like that themes aren’t really a thing: a site is a site
- Why oh why are structures stored in the database? Are you actually shitting me?!
You go ahead and create a great CMS, with an elegant API and consistent codebase, then throw it all to shit and define structures in the database? WHY?! Fields, sections and pages are all defined in the filesystem! When building templates, you directly refer to field names. It’s a terrible design decision to force your developers to then enter the admin area to manually add the structural definitions in the database.
Then, I hear you ask, what happens when you add a field on your development machine and want to push that to production? You have to visit your admin page in production and repeat the process! Presumably before you checkout the latest template in order to avoid ‘field not found’ errors. At least ACF stores these structures in JSON!
The only alternative is creating some frankenstein-level MySQL export migration fuckery.
- The lack of a repeater field
What I enjoyed a lot about ACF was the freedom to configure the CMS to serve the business needs of the client, abstracting them away from thinking about the ‘website’ and instead about the ‘content’. For example, you may have a Music page, which lists your client’s favourite albums. This content is small, will not be indexed, and is relatively insignificant to the rest of the site. ACF lets you create a form to allow your client to do this, without thinking about how the data will be formatted. That’s your job.
Craft lacks this repeater field, instead hailing the ‘Matrix’ as it’s alternative. Unfortunately, for me, this is exposing the client directly to the layout and content. Don’t get me wrong: it’s a great addition, but it’s not a replacement for the configurable repeater field.
- The price
This isn’t a big deal for me as I do a lot of client work. But when working with clients pro-bono, it’s hard to recommend Craft, especially as it boasts some very key flaws (see above).
- Built with Laravel
Standards come free with this CMS. PSR-4 etc
- Nice UI
- Where. Are. The. Fields.
- Developer centric. In creating a new page, I’m presented with a HTML editor. This is not something I want to present to clients.
- Only useful if you’re building a lot of custom functionality into your website. As far as I’m concerned, if you’re building a web app, just use Laravel.
The Golden Solution
So. I have discovered that there are plenty of systems that tick some of the boxes. Unfortunately, each one of them scrawl profanities over the other boxes.
As far as I can see, the most important quality of a good Content Management System is: abstracting a user (client/friend/friend-of-a-friend who you’re doing a favour) away from the actual page structures, letting them focus on content.
These are the following conditions to satisfy the above:
- Twig (or similar) templating engine to discourage code in template files
- A focus on clean, consistent code standards
- A rich array of configurable field types (essentially ACF)
- Fields, content types and categories defined via code / JSON (or anything that can be checked into VCS)
- Open-source community to encourage PRs and welcome criticism
- Everything else that the above systems do well: plugins, rich text editor, tagging, taxonomies and menus.
If anyone’s interested in kicking off a project like this;
…a CMS that fits the above criteria already exists;
…or I’ve grossly misunderstood a CMS - give me a shout.