As a self-taught software developer, I have found that the best way to learn a new technology stack is to jump right in and build a project using that technology. By immersing myself in a project, I am able to gain a solid understanding of the technology and establish knowledge for future projects.
A great way to seek out these opportunities for knowledge growth is to volunteer personal time to build software using an unfamiliar technology. In 2016, I volunteered to build the website for the inaugural year of Revolution Conference. I chose to use a headless WordPress install with a custom API as a backend and Angular (1) as a frontend.
I was very comfortable in WordPress and PHP, but wanted to stretch my understanding of Angular. The finished conference website looked professional and functioned well for visitors, but it was content-rich and needed frequent updates (e.g. if a speaker needed to add a bio). The task of updating content fell to the overtaxed event organizers, which meant updates only happened when one of them had a free moment. This experience highlighted a well-known issue within many Content Management Systems (CMS) – the content entry choke point.
Content Entry Choke Point
For most CMS built applications and websites, content entry is limited to a few key people. For a website like Revolution Conference, which has a lot of time-sensitive information coming from multiple sources, a few editors managing all of that content quickly becomes a choke point.
I decided to volunteer again in 2017 to build the Revolution Conference website, but this time I understood my primary goal – I needed to develop a site that allowed multiple contributors to easily update and add new content. I wanted to expand my expertise in Node.js, so it was an easy decision to use that for the backend and the statically built frontend. I wanted to avoid WordPress and any other traditional CMS altogether. Based on the previous year’s experience, I knew I didn’t want a few key editors of the site’s content; in fact, I wanted anyone to be able to contribute content.
Source Control as a CMS
After some contemplation, the idea of using a web-based source control solution as a repository of content dawned on me. Given that Revolution Conference is geared toward professional software developers, I knew that most of the speakers and attendees worked with GitHub (or at least git). I began to pull out any hard-coded content I had already added to the website and structured it and all new data into a series of files (JSON, Markdown, PNGs) and directories.
After that, organization of the content naturally fell into place. Content that didn’t have rich text or images got a single JSON file. More complicated content got a directory for each type, as well as a subdirectory for each item that contained images, JSON, or markdown. I created a tool that pulled the content down from the content repository and parsed it into easily consumable data (JSON files for each data type, which linked to images on the Github CDN).
Community Drove the Content
For those who chose to contribute, the process of updating and adding content followed the same path as contributing to any open source project on GitHub. This new method made the 2017 Revolution Conference website a success, as the choke point of only a few content editors was resolved. In 2016, only two or three editors could update content, but in 2017, 35 people, including conference organizers, volunteers, and speakers updated and/or added content. This new design allowed the community to drive the content management on the site. Based on this success, I plan on expanding this concept and making a tool that allows anyone to easily update content, even people without any coding experience.
The code written for converting the content repo to data has been packaged and released here: https://www.npmjs.com/package/cdcm
You can explore the application repo of the Revolution Conference app here: https://github.com/RevolutionVA/website2017
You can explore the content repo of the Revolution Conference app here: https://github.com/RevolutionVA/website2017-app
This project is an excellent example of how a personal development goal for me turned into a practical method for community driven content systems. Array Digital is always happy to share best practices and new methodologies with the software community; I hope this information can help you avoid the dreaded content entry choke point on content-rich dynamic websites.