Every agency eventually faces the same fork: keep assembling client sites from other people’s platforms, or build the platform you actually want. We took the second path, and the page you are reading is served by the result.
What we wanted that we couldn’t buy
True multi-tenancy. One deployment, many sites, with per-site content, themes, menus and plugin grants — enforced in the data layer, not by convention.
Plugins as processes, not scripts. Every plugin runs as its own process behind a gateway, with a manifest that declares the roles it plays, the contracts it exposes, and the data it may read. An operator can kill a single integration edge — not the whole plugin — from the admin UI. Plugins reach content through governed data contracts: declared shape, admin-approved mapping, scheduled refresh.
AI in the core, not bolted on. The platform ships LLM provider clients, an async job runner, an in-platform vector store and an integration pipeline runner. Our site chat assistant is just a plugin composing those primitives.
Fleet operations. Customer instances carry a small mTLS agent; a fleet controller plans and executes upgrades in waves, with schema fingerprints checked before any migration runs. Same-version deploys force-recreate — no hollow “successes”.
Dogfood or it didn’t happen
ezboxmedia.com runs on the platform: the pages, the navigation, the theme, the labs, this blog post. When we demo CMS AI to a customer, the demo is the production system that serves our own traffic.