Our CMS works by defining basic primitive types, like building blocks in a Lego that a user can manipulate to assemble complex structures. Primitives can be any of the following:
- Binary Blobs
- Lists (wishlist)
- Tables (wishlist)
- Embeds - urls
- Form components (text, blobs, booleans)
The application can also use these primitives to generate the necessary editors for it's own components. For example, an image primitive could return a FormDataBlob for it's editor, so the client knows how to present an appropriate form to the end user without requiring them to have additional code to manage this. While this may have the drawback of an application that is very limited and potentially user unfriendly, it would create a consistent experience across the application.
We could consider adding components known as 'super-powers', these would allow optional functionality to be implemented by the client at it's sole discretion. For example, when adding a FormDataText to input a URL, we could also provide a link-preview super-power that generates a link preview if the client supports it, but doesn't require to throw an error if they don't.
Any page made with CMS can be assembled with these basic components, making it easy to create more complex layouts with just these components.