# Content Management System

## Summary


Content Management System (CMS) is a software used to create and comprehensively manage digital content. 

It’s built on top of a set of foundational codes called the framework. The content created with the CMS is stored in a database. The CMS interacts with the database management system (DBMS) to display, add, retrieve, modify and redeposit content back to the database.  

Content Management Application (CMA) and Content Delivery Application (CDA) are the basic components of a CMS. CMA is the Graphical User Interface (GUI) that enables users to handle content at the front end. CDA is the back-end component attached to the database.  

CMS is easy to use. It permits multiple accesses. Predefined themes, templates and software plugins simplify CMS for a quick setup and smooth operation. CMS reduces or eliminates the need to apply codes to create, alter or publish content digitally.

## Discussion

### How does CMS work?

Using a CMS’s GUI with textual and visual editors, a user creates content. These editors encode the content on the back end. The encoded content get stored in the database as structured files.  

In most cases, metadata is embedded inside the content’s codes. When a user makes requests for specific content, the CMS retrieves the corresponding structured file using metadata and generates the digital output. The retrieval and display process may involve applying a template that defines the layout and design of the output.  

When the front end and the database are built using a single codebase, data is accessed from within. If the front end and the database are separate components (decoupled), software channels such as middleware integrate the two. Application Programming Interfaces (APIs) move data between decoupled components. 

User management feature is added to manage the CMS’ user accesses. User management basically includes mechanisms to identify, approve access to, and authorize users.  

Specific plugins are installed to perform useful tasks. For instance, Search Engine Optimization (SEO) and analytics plugins enhance a website’s visibility and provide insights into the user patterns and behavior. 


### Can you broadly discuss the basic types of a CMS architecture?

CMS architecture refers to how the front end and back end of a CMS function as a whole. 

In a **coupled CMS**, the front-end and back-end processes are tied together. Both the ends share some common resources and rely on the same services to function. Coupled CMSs are simple to deploy but hard to customize.  

A **decoupled CMS** has its front end seperated from its back end. A separate back end offers better security. Yet a decoupled CMS is complex to handle.  

**A headless CMS** is similar to a decoupled CMS. However, the presentation layer of the CMS is separated further from the front end. Headless CMSs seamlessly integrate content across devices. For instance, we can continue our Facebook activity on a mobile application, from where we left off on a web application.  

**A hybrid CMS** is a combination of the above types of architecture. A hybrid CMS offers great freedom to integrate customized front-end components. Anyone can create their own layout using drag and drops or WYSIWYG editors without developer support.  


### What are the core features of a CMS?

**User Interface**: An intuitive interface is basic to create, structure, edit, add, remove, publish and distribute digital content.  

**Storage and retrieval**: Content created at the interface needs storage and indexing. A CMS should be able to package and transfer content to its database in standard formats (E.g.: XML or JSON). Indexing makes retrieving and managing content easy.  

**Access control**: Access control is designed, basing on how a member engages with the CMS. An administrator in the CMS will have complete control over the system. Editors, authors, contributors, subscribers and others will have varying degrees of access and control.  

**Security and backups**: A CMS should have mechanisms built and credentials fixed for members to login and logout. When someone inputs wrong ids or passcodes beyond a permitted number of attempts, the account should get locked. This arrangement prevents hackers from easily breaking into the system. Multiple levels of security arrangements can be setup. Creating systems for regular backups and updates can safeguard against any data loss.  

Depending on purpose, a good CMS needs additional features to run efficiently. Version controls, SEO tools and support are a few important features.  


### Could you discuss some use cases of CMS?

 CMS has a popular use in **E-Commerce**. An E-Commerce CMS enables businesses to sell products online. An E-Commerce business typically needs CMS to manage shopping carts, product pages, payments, orders, analytics, and customer support.  

An **Intranet** CMS connects a company’s employees located geographically apart. Companies use Intranet CMSs for employee onboarding, online training, intra-company networking, internal communication, and inter departmental collaboration.  

**Mobile application** developers make use of CMS to manage content for mobile apps or mobile responsive websites. Mobile responsive websites share a common back end with mobile apps. The front ends of the mobile app and website interfaces remain detached. A website’s content made editable on the go through a mobile app is also a form of mobile CMS.  

Educational institutions use **Library** CMSs to run digital libraries on websites or mobile apps. Apart from managing digital books, the Library CMS also supports additional activity. An institution may also maintain articles, news, blogs and information about digital resources on their library portals. 

**News** publishers use CMS to create, edit, publish and update digital news quickly. A News CMS smoothly manages paid subscriptions and handles news content in high volumes.   


### Can you explain the different CMSs prevalent in the market?

Two broad CMS categories prevail in the market. They are Open-Source CMS and Commercial CMS.

An **open-source** CMS does not restrict access to a licensed group. People joining the open-source community can alter its source code. Based on the needs of the larger public, member developers volunteer to customize the CMS software. Users with specific needs can use the CMS platform for free. However, they may have to invest on technical assistance, plugins, add-ons, templates, support and regular updates. Popular Open-source CMS platforms in the market include WordPress, Joomla, Drupal, Ghost and Strapi. 

A **commercial** CMS is developed and owned by a commercial entity. Users can't access the CMS' source code. Third party plugins and extensions cannot feature in the CMS. Switching the website or application from an existing commerical CMS to another CMS platform poses headaches. A commercial CMS is expensive. However, the CMS is safe, stable, standard and efficient. Dedicated teams monitor, fix issues and support the CMS platform.  Popular Commercial CMSs include SiteCore, Flamelink, ExpressionEngine, Kentico and Adobe Experience Manager. 


### How is building a website using CMS different from that of a website builder?

Anyone with zero coding skills can create a website using a website builder. A website builder usually provides a hosting platform, a domain name, and custom themes as a package. Simple drag and drop solutions enable straightforward launch of websites. Website builders don’t permit outside developers to customize. It is restrictive to developers and liberating for the technically unequipped.  

In contrast, a CMS solution doesn’t automatically come with a web server, a domain name or readymade themes. Such essential components should be purchased individually. A CMS website can be built from scratch on top of source code. The website’s physical appearance is designed using UI tools such as Figma or Adobe XD. Developers give life to the designs through HTML, Cascading Style Sheets (CSS) and any programming language, say, JavaScript. Else, the interface may have basic themes that coders work further upon. A CMS is constructed manually or automatically, depending on the hosting services. Then a database is created and connected to the system. Coders may also customize features or use custom features. Once the basics are ready, webpages are generated and published.  


### How does CMS compare with MS SharePoint, Static Site Generator (SSG), and Document Management System (DMS)?

Microsoft **SharePoint** is a collaboration platform that focuses on team collaboration, intranet or extranet, document management and workflow automation. It also has content management capabilities. A CMS is primarily a content management software that also facilitates collaborations. SharePoint integrates with MS tools and caters primarily to enterprises. CMS focuses on specific content management needs of individuals and entities.  

An **SSG** doesn’t need a database or an external data source. The SSG stores simple data as static HTML files in the web server. When a user makes a request, the SSG picks up data files directly from the web server and presents quickly. It is highly secure and requires less computing power. On the other hand, a CMS delivers an interactive and immersive content management.  

A **DMS** manages structured data in word, pdf, excel and other document formats. A CMS manages structured as well as unstructured data. The main use case of a DMS is regulatory compliance and workflow management. A CMS has much wider scope than just document management.  


### What steps should one generally follow to make their our own CMS?

    + Define the purpose, scope, content types, roles, permissions, features, scalability and other needs of the CMS
    + Run a database client program, let’s say, MYSQL. Set up the database.
    + Create database tables. Form schemas and table names. Add the required fields such as unique Ids, date, titles, content, primary keys and so on.
    + Configure settings using a scripting language such as Vue.js or PHP. The settings shall remain common for all the script files in the CMS. E.g.: Time zone, admin’s username and password, paths and class.
    + Inside the CMS folder, create class folders. Add class files. The class files shall encapsulate the classes’ definition, properties, and methods. The class methods entail archival, retrieval, listing, insertion, updating and deletion of class objects.
    + Write front-end index script. These codes work to manage the UI tasks and actions.
    + Write the back-end script. The script fixes back-end actions.
    + Create HTML template files for the front end. These files handle the header, footer, homepage, archive and so on
    + Create HTML back-end template files. These files handle back-end activity.
    + Make CSS files to control the appearance and feel of the site.

### What are some design considerations for CMS?

    + Define the technical knowledge of the target user. It impacts the CMS design at every stage. For example, will the content editor apply HTML tags or create content directly on a WYSIWYG editor?
    + Determine the extent of control a designer has over the templates. For example, can a designer reshape the entire CMS to suit her design or should she work with the existing templates?
    + Design, assuming that the HTML elements will stack in any order. Preparing for the worse ensures quality outcomes.
    + Keep the versions consistent across all components so that reuse is possible.
    + Create reusable components that are compatible throughout the CMS.
    + Think through various scenarios and design for flexibility. For example, will the text or image slip beyond the layout?
    + Create CSS rules for all the HTML elements in the CMS. It provides flexibility to readjust elements that may later require pre-configured styling.
    + Create and enforce semantics and style guide using CSS to standardize the content throughout the CMS.
    + After developing the design using HTML and CSS codes, test the design by trying different types of content in different sizes to check if it consistently produces the desired output.


## Milestones

1989

Tim Berners-Lee introduces the markup language, **HTML**. He goes on to write browser and server software by 1990. HTML is a derivative of Standard Generalized Markup Language (SGML). HTML is fundamental to building a CMS. 

Aug  
1991

Tim Berners-Lee launches the world’s first **website** using Hyper Text Transfer Protocol (HTTP) and Uniform Resource Locator (URL). The website contains information about the World Wide Web project. These static webpages later pave the way for dynamic websites and CMSs to emerge.  

1994

Roxen Internet Software, a Swedish company, releases **Roxen**, one of the first CMS applications. Roxen CMS is useful to produce, distribute, deploy and maintain internal and external websites. 

1995

Vignette corporation launches Vignette, a Web Content Manager (WCM) software. Vignette subsequently launches **StoreBuilder** and coins the term, **Content Management System**. 

1995

FileNet creates the world’s first **monolithic** Content Management System. The system is built using Hypertext Preprocessor (PHP), Active Server Pages (ASP) and Java Server Pages (JSP). FileNet introduces an integrated document management suite, combining document imaging, document management and workflow. Many competitors follow suit and flood the market with monolithic CMSs.  

2003

Easy-to-build, open source, website-building CMS platforms such as **WordPress** offer readymade templates. Readymade templates remove the need to build every aspect of a website from scratch and therefore, reduce cost. For the first time, anyone without coding skills could launch websites. 

2003

DNN corp launches a renamed application called **DotNetNuke**. DotNetNuke is an early open source CMS based on ASP.NET framework. DotNetNuke stands the test of time. 

2005

Alfresco launches an open source alternative to enterprise content management. It is embeddable in enterprise applications so that enterprises need not build their CMSs from ground up. 

2010

The year ushers in a new era of **Headless CMS** domination. The booming smart phone and tablet market drastically increases the consumption of web content. Developers shift their focus towards headless or decoupled CMSs to deliver the same content on screens of differing sizes. 

2013

**Contentful**, a Cloud-based platform offers headless CMS solutions. The platform provides well documented APIs and Command Line Interface (CLI) migration tools. Contentful is one of the best tools to build websites. 

May  
2016

French company, Strapi launches open source, headless, self-hosted CMS solution. **Strapi** is designed to work with JAMStack (JavaScript, API and Markup) sites and supports both SQL and NoSQL databases. It can be hosted from any server.