2021-10-23
quest 1

The disappointing quest for an Headless CMS in 2017

https://sylvainleroy.com/wp-admin/options-general.php?page=ad-inserter.php#tab-2

In 2017, this blog is powered by Hexo.js. However, I am looking for a replacement since Hexo.JS is lacking crucial features.

Introduction

TLDR: is too limited, I want an online post edition!

I have been recently working to replace the powering my blog. A major point is that I am disappointed with its theme. I would like to replace it, with a new technology .JS, which I have already discussed there.

Since I am replacing the whole front-end, I have been using the great plugin hexo-generator-JSON. However, I still have major issues with my assets (stored with the posts) and it is not really compatible with a CDN solution.

The second feature I am missing is the possibility to edit my post online. I am a user of Medium and I love the mobile application to create and edits my posts as was ell watching statistics. A thing I did not think of at first, is the impossibility to create new posts with without a computer. Indeed, to generate your site, you have to generate it, using a full Node.JS environment, committing, pushing on GitHub your modifications, deploy the docker container, and so on. A lot of tasks I have mostly automated but yet, I don’t have a CI Environment available for it.

I did not want to switch back to Drupal and WordPress, which equals for me as a bloated solution, slow and hard to tune. I wanted a compromise: why not having a NoSQL Database, a light REST backend, an AdminUI and that’s all. At the beginning of this blog, I planned to build this backend, but I decided shortly to concentrate on the content, rather than on the code.

Fortunately, the technologies have evolved and I made a list of Headless CMS / API-First CMD and tested them.

Headless CMS, what is it?

Headless CMS

Headless CMS

I won’t spend too much time on the details, a good description has been done there.

Next to read  Code generation and data generator : the best use cases

Basically, legacy / traditional CMS are highly coupled solutions where the following components are tied :

  • Database: SQL Databases
  • Backend: PHP or worse
  • Front-End: Templated front end or theme highly coupled with the backend API. Unmodifiable at best, throwable at worst.
  • Separated WS / RPC: External service to access the backend data, not used by the front-end.
  • Admin UI: Bundled Admin UI.

Usually, this kind of CMS is stored in one big block called WordPress, Drupal, Joomla, and so on.

The good news is that even these famous solutions are evolving to apply the following modern and well-known principles :

  1. Decoupled front-end: CMS frontends should be decoupled. The UI will access the blog data and content using a REST API. UI for Headless CMS is usually using technologies like Angular, React or .JS
  2. Responsive front-end: Headless CMS enables the possibility to create various UI depending on your devices, smartwatch, website, search engine, etc.
  3. NoSQL Database: Handling documents and content is the specialty of NoSQL databases allowing you to add your own custom fields, categories, and organization.
  4. Framework: Such Headless CMS should provide libraries or frameworks to access the content and handling the as NPM modules and so on.
  5. DevOps: Such a solution should be dockerized.

 My expectations

I am expecting an Headless CMS to contains :

  • a REST backend
  • Documented RESTFul Apis
  • a database driver compatible NoSQL
  • a bundled Admin UI accessing by an API to the REST Backend
  • a docker image or docker-compose
  • possibility to add custom fields
  • possibility to handle markdown format for the edition
  • Cloud FS Storage for my medias
  • Optimized solution: I don’t want a new WordPress installation
  • Node.JS solution: I want a lightweight solution
  • Self-hosted solution: I want to deploy it on Google Cloud.

 Results

The list of experiments and my opinion about it.

Directus: No!

Docker-compose was not running (I used this project). The docker instructions worked for me.

I launched it and soon enough I received a lot of technical alerts wasting my pleasure of a fresh installation.

Directus / Error message

Directus / Error message

My last blocking point, and the reason I have rejected: I did not find any way to create a content category (called table) in the admin UI. Seems to manipulate the SQL Database to create them: no thanks (rant here).

Next to read  How Docker is disrupting Legacy IT Companies

 GetMesh: Meh

Uh Uh, a solution to power a small blog: no thanks.

GetMesh

 Drupal and WordPress : Hydra CMS

Too big, too well-known. The REST API is for sure the next hole of these solutions.

But the reason for my reject, the UI cannot be separated from the backend!! And why would I like a UI embedded in my backend when I want to create a SPA WebSite?

I will use them when they will have deleted their UI from the installer.

I suggest calling them HydraCMS.

GraphCMS : Hipster$$CMS

GraphCMS

GraphCMS

Looks Great but I want my own self-hosted solution and don’t want to pay for that.

Site here

Ghost: GirlyCMS

Honestly, I had a crush on Ghost. Sexy, a great installer, great documentation, everything to tempt me like an attractive woman.

The problem is that Ghost has almost everything to charm me but he has an embedded UI!!!

I don’t want a UI, I want to build mine 🙁

Apart from that point, GhostCMS is really great.

Ghost CMS

Ghost CMS

It even has a Slack integration and loves Markdown!!

Ghost CMS Site

Cockpit: Blind CMS

Cockpit CMS

Cockpit CMS

Listed in the Awesome CMS List, Cockpit CMS is a rather small solution.

The good points are :

** Docker is working fine. ** The concepts and architecture are OK. ** Nice AdminUI, I really appreciated the way to create my collections

But what really disappointed me was :

** No documentation (REST and so on). For a developer it’s unusable ** PHP: There is no documentation and the REST API is coded in PHP. Meh, ** Lonesome developer yes he is brave, we should encourage him, but he is freaking alone.

In summary, I think that this project goes in the right direction but took some tough and spiky paths. PHP is clearly not the appropriate for such a solution. Compared to an Express server, the amount of work to be delivered is too high. It really needs more contributors (actives) to create a good solution and fill the big documentation blackhole. I cannot help since I don’t want to code again in PHP but the solution could be great.

Next to read  Top 5 Skills Java Developers Should Learn In 2021 (on DZONE)

Site is here

 KeyStoneJS

Well at the first glance, I rejected, could not find any Docker image. Or the few ones were not working. But my first attempt was dumb. KeystoneJS is not a Headless CMS by itself it’s rather an implementation of a CMS, fully customizable to create your own blog!

Powered by Express and Node.JS, two technologies I am particularly fond of!

The site is there

The positive sides of KeyNodeJS :

  • A slick creator using Yeoman!
  • Modern technologies, I think the best to create a CMS
  • The bundle is containing what I am expecting (AdminUI, REST Backend, NoSQL Database(MongoDB))
  • Fully customizable collections and so on

The negative points are :

  • Maybe too much code to begin with
  • What is the maturity of the base implementation?
  • How much effort requested to build its own website?
  • I think I did not find yet a NPM module to build a REST Client

Conclusion

I have rejected most of these solutions.

  • I tried two times an installation and to migrate my data in DirectUS but I gave up. I don’t believe in the concepts.
  • The lack of API Documentation in Cockpit (HTML or a la Swagger) is blocking my attempt to use it and migrate my data. The fact that the solution is developed in PHP is blocking my wish to support them. And I don’t like PHP REST Backend to be honest.
  • I really love Ghost but I don’t want their UI, I want mine. Otherwise, I would have used it.
  • I tried to use Drupal and WordPress, but the requested system resources + the fact I cannot disable the UI are a big NO for me.

The consequence is that I am using KeystoneJS and I hope I won’t have too much work to power a new version of my blog.

Stay tuned!

References :

**

Sylvain Leroy

Senior Software Quality Manager and Solution Architect in Switzerland, I have previously created my own company, Tocea, in Software Quality Assurance. Now I am offering my knowledge and services in a small IT Consulting company : Byoskill and a website www.byoskill.com Currently living in Lausanne (CH)

View all posts by Sylvain Leroy →