Half the fields filled.
Published anyway.
Still looks intentional.
One base partialThree variantsZero broken layouts
Scroll ↓

via OPTEN AG · Feb — Mar 2026

Manufacturer CMS Platform.

Client
via OPTEN AG
Role
Frontend engineering
Stack
Umbraco 17 · Razor · BlockListBuilder
Timeline
Feb — Mar 2026

CMS modules for a building-materials manufacturer: grid and carousel layouts sharing one base partial, content fallbacks so half-filled modules still render cleanly, promotional variants with deferred video embeds — and responsive page previews so editors see every breakpoint before publishing.

The real user is an editor

A CMS module is not finished when it renders the designed content. It is finished when a marketing editor, in a hurry, fills half the fields and publishes anyway — and the page still looks intentional. For a building-materials manufacturer with a large catalogue and a small content team, that scenario is the normal case, not the edge case.

One base partial, three variants

Grid, carousel and promotional layouts share a single base partial, so spacing, typography and responsive behaviour are defined once. Content fallbacks live in that base: a missing image collapses to a layout that still balances, absent text shortens the module instead of leaving a hole. The promotional variant defers its video embed until interaction, so a marketing module never costs the page its load time.

Drag the diagram sideways to read it

Grid, carousel and promotional variants share one base partial — fallbacks live at the component level

Seeing it before publishing

Editors got responsive page previews — every breakpoint visible before anything goes live. It removes the publish-then-check-on-your-phone loop, and with it most of the layout tickets that loop generates.

Grid modules on the published site — what editors see before it goes live
Grid modules on the published site — what editors see before it goes live

Built with BlockListBuilder

Umbraco 17 with Razor, composed through BlockListBuilder so modules stay editor-assemblable rather than developer-assembled. The measure of success is negative: no support request that starts with “the page broke when I left the field empty”.

Editors can’t break a layout by leaving a field empty — fallbacks live at the component level.