Skip to content
Jonathan George edited this page Dec 24, 2019 · 4 revisions

About

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.

Overview

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.

Architecture

Level 0 - Core APIs

The lowest layer of the components includes three fundamental APIs

Immutable Content API

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.

Content State API

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.

Rendering API

The API provides low level rendering functionality for different content templating systems - e.g. Markdown, Liquid, etc.

Level 1 - Workflow

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.

Level 2 - CMS products

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.