
Macmillan Education
A sophisticated, interactive, multilingual, international, educational platform built with QTI and Google Polymer.


In Detail
The Open Mind Digital project is an educational web application and platform initially released in 2015. It has since been distributed to hundreds of thousands of school students, teachers, and adult learners to support their book‑based learning.
Featuring sophisticated, media‑led interactivity, the development of this product fell into two abstract, client‑side layers:
- a custom JavaScript application framework (built with Google's Polymer) which ingests data in the form of QTIs supplied from an external LMS;
- the front end, which displays this data as accessible, interactive web component templates. Interactivity includes drag/drop functionality, videos and audio, questions and answers, and timed quizzes.
At the start of this assignment, my primary responsibility involved developing interactive (but also static) templates from wireframes and PSD design. These templates were constructed as a standalone Node.js application with automated build tools (including Sass for CSS). This generated an interactive prototype which various project stakeholders could then review. We followed the Block, Element, Modifier (BEM) methodology for CSS development, which, combined with Sass, resulted in a very lean, clean and component‑led codebase.
The fundamental point of the product is hypermedia and interactivity. Developing this as part of an optimised web application involved writing vanilla JavaScript for a number of custom features, including drag and drop and media players with cue points and subtitles – all the while ensuring cross‑browser compatibility back to IE8.
On the application side of the project, we researched AngularJS as a potential framework before settling on Polymer. Despite being a less mature framework, Polymer was more stable than Angular at the time and offered a more cutting‑edge and future‑proof opportunity to work within Web Components. It was also possible to combine Polymer with our pre‑existing template codebase. This meant that we could easily and quickly generate components from our prototype and continue to use the automated build tools we already had in place.





