Which (if any) CMS?

Answering my own question here.
I went ahead and did my own quick fix on this.
All of it looks pretty stable and proof for long term use, apart from the front-end content input.

Now I have a working GraphQL / RDBMS based CMS solution feeding into Jekyll. The last part, reading from the GraphQL API into Jekyll should work for any GraphQL-based CMS system or data source.

Front end: I rolled my own using Libreoffice Base. I taught myself the tool and iterated the design over a weekend: now I can input site, catalog, brand, products and their relationships, including photos directly to a Postgres DB
Notes: While this is a longer term throwaway, the input screens are far more user friendly with image pickers, multiple master / child / many-to-many relationships implemented as scrollable datagrids. I can see and maintain all brands and catalogs and scroll through all images for a particular product on 1 screen, for example.
Next up is to convert this to a Vue.js solution.

Content store: Using Postgres, I designed the product catalog and implemented over the course of a weekend. Storing all data related to an eStore in the database.
Way easier and faster to design and generate the database even using the very basic pgAdmin4 tool than for example, Strapi’s Content Type Management plugin.
Plus I have full control of the database, for things like indexing, uniqueness factors, relationship definition and so on, where some of the CMS packages generated rather flawed data structures.
Plus the database is the source of origin for everything including images.

API: Using Postgraphile here, which seems to be a very fast and fairly complete Graphql schema / API generator, reading the database schema directly and exposing and implementing things like relationships, datatypes, uniqueness, IDs, access control and so on.
Looks like it could be a long term tool, as I can hide Postgres behind a firewall / router, and to the consumer of the API it will look like any other GraphQL end point.
Took me a few days to learn GraphQL and so on , but it’s up and running (fast).
Takeaway: Design specific schema for GraphQL, and then link other schemas as necessary in Postgres. Also, use the right GraphQL explorer / tool, that exposes the schema documentation, structure and also does code completion for template queries.

Jekyll: GraphQL outputs a formed JSON resultset. I used a python program Irequests and JSON modules) to output this JSON to the data directory as a file,
At the same time create and resize each product image to primary, thumbnail and shopping cart versions using the Python Pillow module to resize and insert the photos on the fly. Also python output individual template pages for each product including front matter.
Then configured a page template using Jekyll / Liquid to read the JSON and create the catalogs and generate to the site.
Over time: Configure GraphQL and the python extract / build tool for subscriptions so that I can automatically regen the website once the changes are committed to the database.
Maybe also look at converting the Python modules to node.js to reduce the technology footprint.
And automate page creation / generation even further for the catalogs.

Futures

  • Replace Base front end with Vue / Nuxt or Quasar

  • GraphQL subscriptions for automatic site regeneration (Jekyll -> Github -> Netlify)

  • Add in CMS for page elements: should be as simple as a Site / Page / Element structure in the DB, with options on the front end for plain text / Markdown / HTML element content support.

Probably took me less time to build my own solution than to implement one of the CMS solutions I looked at.

1 Like