kvaro.me
← All work

CREPEX

A reusable block-based CMS engine, with a marketing site as its first consumer

Status
Built
Built 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.

← All work