A CMS for an Internet Of Things

As developers we now need to create customer experiences across many devices as well as make managing content as simple as possible. Recently, I have been exploring using a single CMS instance for the internet of things.

As a developer, the idea of “Internet of things”, where all kinds of devices are interconnected and users expect content to be delivered via these new channels, is becoming a realistic request to get from clients. No longer are our jobs limited to traditional in browser web development. This is really exciting and it’s great to get hacking to create some really cool experiences for customers! But this brings all new implications as an agency delivering products to clients. I always try to be the voice of reason here and ask the “how” questions. After the cool prototype is done, I start to think about the maintainability of this for developers and the day to day management from a client perspective. If we have all these cool new feeds of data to communicate with users, we also need to manage this content. Ideally, we don’t want a different content management system for each.

 Back in the day we just needed content to be available to our website users in browser… life of a web developer was simpler. Then when mobile usage started to rise, businesses saw the need to cater for these customers (remember the days of bouncing off to a m.domain or mobile.domain). And for the developers, the headache of managing 2 sites and 2 sets of content! Those days are behind us thanks to the wonderful world of responsive websites. One code base, one CMS = happy developer and happy content populators.

 What’s next as we enter web 3.0? Nowadays, instead of just a desktop and mobile, we consume content from watches, fridges, smart advertisement screens, beacons, etc. This gives a new challenge to us developers: where does all this data come from and how do we manage it?

 As a developer I am increasingly creating APIs and data feeds to send content to other services such as mobile apps and third party systems, treating the CMS as a headless central data store. The next step is extending the CMS’s usage to also manage content for any streams of data being pushed to customers, for example: push notifications, iBeacon integration, smart screens, smart watches, fridges, etc.

As our homes become increasingly “smart” and the world starts showing personalised content (remember Minority Report advertising?), as brands and businesses we have so much more content to govern. To me, storing this in one place makes sense.

 Advantages of doing this:

  • Consistency of content distributed to all channels.
  • Ease of content population for client, 1 CMS, 1 media store, etc.
  • More maintainable for developers - 1 API to keep maintained, 1 release needed for a change to be rolled out to all channels.

 Using Umbraco as a headless CMS, I have created a prototype Android app which gives push notifications based on proximity to beacons. In Umbraco I have a beacon doctype that has a unique beacon Id and content to be pushed to the mobile app. Adding a WebAPI controller to my Umbraco site and using the content service I can get the Umbraco content via an API call ( e.g /umbraco/api/beacon/getbeaconcontent?id=1234).

			foreach (var umbracoBeacon in umbracoBeacons)
            {
                if (umbracoBeacon.GetPropertyValue<string>("uniqueId") == uniqueId)
                {
                    var description = umbracoBeacon.GetPropertyValue<string>("description");
                   
                    return description;
                }
            }

Imagine a retail client with an existing Umbraco site now wants to have content pushed to users using their in-store beacons app. By extending their existing CMS to provide this content API, we would allow the same marketing team who control the site content to control the campaigns on the in-store app too. As well as having the advantage of us being able to deliver this quickly, as we don’t need to start from scratch building a new back office system.

 Also, as a developer who mainly works in Umbraco, it means that in projects that have loads of new devices, concepts and frameworks to understand, I have the comfort of at least one part of the system being “safe”. I know I can build it quickly and have faith in it. I can also make use of the cool features and packages that the Umbraco community brings. For example, in my beacons app, I can use the Personalisation Groups package to use the context such as day of week or time of day to control the content given. I was able to extend my beacon API to give many different notifications for a single beacon, dependant on the context.

            foreach (var umbracoBeacon in umbracoBeacons.OrderByDescending(x => x.ScoreForVisitor()))
            {
                if (umbracoBeacon.GetPropertyValue<string>("uniqueId") == uniqueId)
                {
                    var description = umbracoBeacon.GetPropertyValue<string>("description");
                   
                    return description;
                }
            }

TLDR; As the internet is no longer just sitting in front of a browser, we as web developers need to adapt to deliver user experiences and content on an ever increasing list of devices. With a central CMS we can make life that bit easier for both us and our clients.

 If you have any feedback or are interested in IOT development too, say hello on twitter!

Carole Rennie Logan

Carole is on Twitter as