The brief was twelve content types, three approval states, and “just a little workflow engine.” Twelve months later we were still maintaining ACL edge cases nobody had tested.
We stopped building bespoke CMS backends for editorial-heavy clients unless the domain truly has no off-the-shelf shape. The pattern was always the same: the first 80% shipped fast; the last 20% was permissions, audit logs, and multilingual publishing that ate the roadmap.
What we use instead
Sanity, Contentful, or Storyblok when the client needs structured blocks and real previews. Markdown in git when the team is technical and the site is mostly static. Notion → export only when we are prototyping—never as production truth.
We still write custom previews and Next.js loaders. The product is the site, not the database of fields.
Where this breaks down
When legal demands on-prem and no SaaS. Then we scope one thin admin, not a recreation of WordPress.
Our read
Editorial velocity dies in undifferentiated CRUD. Our team’s edge is performance, finance, and growth systems—not another roles table. We integrate; we rarely reinvent.