Cornershop
A block-based CMS for small-business sites: edit on the page, publish when ready.
Cornershop is the content system behind the websites my web studio builds for small businesses. Owners edit their own site in a visual editor: click a section, change the text or the photo, watch it change in the preview, and publish when it is right.
/Built with Cornershop
Real sites running on the CMS today. The demo above is the admin they edit their content in.
The problem
Small businesses outgrow a site builder quickly, but a full CMS hands them far too many knobs. We wanted one codebase that could rebuild an existing client site block for block, keep every site inside its design system, and still let a baker or a contractor change their own opening hours without calling us.
The approach
Pages are lists of blocks, and every block has a small schema. The admin forms, repeaters and the block picker are generated from those schemas, so a new field never needs admin code. Content is stored as JSON per block and language, with separate draft and published rows plus a history for rollback; rendered pages are cached at the edge and invalidated on publish. Roles split structure from values: editors change texts and photos, developers also add, move and hide blocks. Packages (one-pager, multi-page, quote shop) are modules switched per deployment, so owners never see features they did not buy. Several client sites already run on it.
Highlights
- checkVisual editor: click a section in the preview to open its form, or type a heading straight into the page
- checkSchema-driven admin: every form, repeater and option list is generated from the block's schema
- checkDraft, preview and publish as separate steps, with version history and edge caching per page
- checkTheme tokens (colours, fonts, shapes) as one global block, previewed at real device widths
- checkRoles separate content from structure, enforced on the server, not just hidden in the UI
- checkNews and agenda collections with scheduled posts, a media gallery with required alt text and a form inbox