CREPEX
A reusable block-based CMS engine, with a marketing site as its first consumer
- Status
- BuiltBuilt and ready; the client's current site is still the old PHP one
- Period
- 2026–now
- My role
- Architect and developer
- Client
- CREPEX® — anti-corrosion coatings
- Stack
- TypeScript · Next.js · pnpm workspaces · Playwright
The problem
A client needed a marketing site they could edit themselves. Building one bespoke CMS per client is how agencies end up maintaining eleven of them.
How it was built
The engine is the product; the site is the pilot
cms-core is a separate package. The CREPEX site imports it, registers its own blocks and theme, and gets a CMS. Adding a block never means editing the engine.
A second consumer proves it, an argument does not
The monorepo carries a demo app whose only job is to be a second, differently-shaped consumer. If site-specific logic leaks into the engine, the demo breaks — which is the point.
Tests that measure, not just assert
One test measures the rendered header to guard its legibility. Visual regressions are the ones that survive a green test suite.
Where it landed
- Two independent consumers running on one engine
- The next client site starts as configuration, not as a new codebase
Written to be handed over
The boundary between engine and consumer is enforced by structure rather than by discipline, so the rule survives whoever picks the codebase up next.