- Full-stack
- Docker
- CMS
- API
OPEN CMS
OPEN CMS is a multi-tenant content management system I built for OPEN Technologies, letting each municipal partner publish their own map content without waiting on the development team.

The Problem
The benchmarking software at OPEN was used by different benchmarking programs across municipalities. The new disclosure map of the main application thus required unique content targeting each municipality. The existing app could handle multiple tenants (at least 6 different municipalities), but the configuration had to be hard-coded. This presented several issues:
- Municipal clients had to interface with the development team to update their content, coupling the development timeline with their needs
- Developers had to take on extra work ensuring the copy was correct, resulting in errors and time lost in clarification
- Custom content types were sometimes unsupported by the existing configuration, which meant costly development work
Because of this, a new content management system (CMS) was necessary to:
- Offload custom content to clients, decoupling the development team
- Empower clients to present their own copy, granting them more powerful expression
- Align the application with standard best-practices, improving the professionalism of the team
My responsibility was to establish this new CMS and lay the foundation for future development and maintenance, delivered within the project's timeline (roughly 2 months).
Approach
As an OPEN developer, I worked in Agile flows, tackling issues related to the CMS. This helped me manage the system in concrete milestones.
Milestone 1: Picking the CMS
The process started with in-depth research of CMS software. Potential candidates were found and screened according to criteria that I had to establish, then shared with the rest of the team. From this, Craft CMS was picked as a professional and economical option.
Milestone 2: Building the new infrastructure
The new map presented the opportunity to build infrastructure for the new CMS from the ground up.
Incorporating the CMS
Craft CMS was an entirely different application, so I had to learn systems development to incorporate it as a separate instance from our application. After conducting extensive research and prototyping, I settled on a build system based on Make and Docker, a familiar system to the rest of the team. This reduced developer friction and onboarding from a weeks-long task to a few days, by working with our existing approaches instead of completely new architectures.
To capture clients' requests for richer expression, I configured data fields such as Rich-Text-Fields and custom tags. This enabled municipalities to add layers of content which couldn't exist before.
Finally, for the CMS handoff, I ensured I maintained clear documentation and configuration so that future developers could easily adjust as needed.
Wiring the CMS to the application
The new infrastructure was a good exercise in working with pre-existing patterns and innovating with new solutions. Working with my senior's specs, I built improved plumbing that led to scalable and extendible code still in use today. I also led the development of a new GraphQL API, chosen to leverage a more modern and extensible schema, and shared my knowledge with the team. This improved schema adjustments from larger multi-day tickets to a single short ticket lasting hours.
Result
The key outcomes I achieved through the CMS:
- Client self-service — clients can now publish content changes without contacting the development team, reducing update delays from weekly to as-needed
- Best-practice architecture — a new system was built following existing best practices, improving development time and enhancing work for future developers
- Strong documentation — cutting onboarding time from weeks to days
Each municipal partner now controls its own copy, logos and program details through the CMS — shown here for Building Benchmark BC and Better Buildings Ottawa.


Clients also author their own case studies, which surface directly on the map:


The project also helped me understand the importance of strong communication and collaboration with my OPEN team members. I am proud of making robust software by thoroughly understanding the project's specifications, identifying existing effective patterns and advancing opportunities to innovate OPEN's systems.