-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Marain.ContentManagement is a platform on which CMS-based solutions can be built. It offers a set of core features common to content management systems without prescribing how they should be used. Consumers can therefore make their own decisions about aspects such as workflows, how content types and content are structured and so on.
The core CMS components are split into two layers. These can be used within an application to provide basic content management functionality, or alternatively they can be used as the basis of a fully fledged CMS solution.
The lowest layer of the components includes three fundamental APIs
This API allows for storage and retrieval of content. Content items are accessed via their slug and/or unique Id. This allows for multiple versions of a piece of content to exist for each slug.
It is expected that this API will largely be used for writes, with the majority of content access taking place via the state API, although this is not mandated.
It is also possible to retrieve a short form of a content item, referred to as a content summary, and a list of previous versions of content with a specific slug.
This API allows for the management of state for each piece of content, and allows for content items to participate in multiple workflows simultaneously. Content can be retrieved by its current state for a particular workflow, and it is also possible to retrieve a history for a piece of content in a specific workflow.
The API provides low level rendering functionality for different content templating systems - e.g. Markdown, Liquid, etc.
The next layer adds workflow capabilities to the core APIs via integration with Marain.Workflow. When taken together, this provides us with a basic headless CMS, although it does not impose any constraints in how content items are used and related, or on the specific workflow being used; this is provided and managed by the Marain.Workflow API.
The final layer (which does not form part of this repository) is where a more opinionated CMS platform can be constructed by imposing a set of constraints on how content is structured and managed. For example, if used to CMS products such as Contentful or N2, a product defines a specific class of content called something like "Content Type" or "Data Type" which impose a structure on other content items, and relate those items with another specific class of content called "Templates". Under the covers these are all just content; it is at this level that we impose specific rules and workflows around each of these things.