Recently, I was working on a project that needed to use a not-headless content management system. In other words, the project required a place for content creators to upload documents and provide information about those documents. That’s what content management systems (CMS) like Contentful are made for.
Headless vs. Traditional
A big distinction in the content management system space is the concept of “headless”. A CMS can be headless or come with a view for content creators. Headless, in this context, is a question of whether the CMS itself provide a user interface for the content creators to use to upload their own content. This is juxtaposed to a system that would require content to be uploaded programmatically in some way. It is an option, with a headless CMS, to build your own custom user interface for content creators. That UI sends data to the CMS behind the scenes but allows the content creators to upload content to a visual interface that you can customize to your specific case.
Contentful comes with a visual interface for uploading content. It also has an admin view that lets you create the content model. The content model is created to define what you might upload (pictures, raw text, or documents for example). It also defines what other data might be needed around the main content, including things like a title, tag, or permission level. Really, this could be anything that you want to have someone include when they create the content. You can also provide a place to link one piece of content to other content.
Content Model Example
The idea of a content model may seem unapproachable, but I like to think of it as just the type definition for what I want to get out of the CMS when we make requests for content. For example, say I’m building a library app for books. Users could search my library in categories like title, genre, and author. Then, we’d show a list of results and include a picture of the cover of the book. I’d probably define my first content model type as a book. Books need to include a title, genre, author, and then a document that is the image.
Perhaps, later, I realize I also want to include recommending similar books to a given book in my library. I could extend my content model by adding a field that is a list of links to other entries of the book content type. Now, when content creators add their content, they could choose other books in the library to link to this book.
After I created our initial content model for my project, I saw how the content model evolved and how easy it was to edit in Contentful. I chose Contentful because of the ease of creating and maintaining a CMS, and the simplicity of content retrial via the API.