Skip to content

CMS Overview

Repo: omni-cms-composable-cms Sanity version: 5.x (React 19, Vite-based Studio) API version: 2026-03-12

📐 ADRs: ADR-0009 — Use Sanity directly for editorial content | ADR-0002 — Using Sanity CMS for site configuration | ADR-0010 — CMS NOT to consume Bynder directly

The omni-cms-composable-cms is the headless content management system for HEMA100 micro-frontends. Built on Sanity.io, it manages:

  • Content pages — Home, Promotions, Flexible Content, Inspiration (landing, categories, articles)
  • Reusable components — Carousels, Hero Blocks, Banners, Rich Text, Product Arrays, Videos
  • Configuration — Shell (header/footer), Search Suggestions, Headgroup Config, PDP Recommendation Carousels
  • Microcopy — Per-service UI translation singletons consumed by MFEs at runtime
  • DAM integration — Bynder assets synced via Kafka → SQS → Lambda pipeline
  • Live preview — Presentation tool with draft mode for real-time editing
Diagram
ComponentHosted byNotes
Sanity StudioSanity (static SPA on *.sanity.studio)Deployed via sanity deploy, served from CDN
Content Lake (API + data)Sanity (Google Cloud)All content data lives here — HEMA doesn’t manage the infra
CDNSanity (*.apicdn.sanity.io)Cached read-only queries for production
DAM sync pipelineHEMA AWSLambda + SQS + Kafka consumer — the only CMS infra HEMA owns

HEMA controls: projects, datasets, API tokens, CORS origins, and schema. The underlying storage and API infrastructure is fully managed by Sanity.

CountryIDLanguagesLocales
NetherlandsNLDutchnl-nl
BelgiumBEDutch, Frenchnl-be, fr-be
FranceFRFrenchfr-fr
GermanyDEGermande-de

Fallbacks: nl-benl-nl, fr-befr-fr

Content is NOT duplicated per locale. Each document has a country field and uses translated fields (e.g., title.nl, title.fr). The @sanity/document-internationalization plugin links country variants together via metadata documents.

Pages use a flexible component array — editors compose pages by adding references to reusable component documents (carousels, hero blocks, images, etc.). This is the core content modeling pattern used across all page types.

UI strings are stored as singleton documents per MFE service:

  • microcopy — Legacy shared translations
  • microcopy.omni-web-content — Content MFE
  • microcopy.omni-web-account — Account MFE
  • microcopy.omni-web-catalog — Catalog MFE

All images come from Bynder — direct uploads are disabled. A Kafka pipeline syncs metadata changes (tags, descriptions, archive status) from Bynder back to Sanity.

StageDatasetStudio URLTrigger
Productionproductionhema-cms.sanity.studioPush to main
Pre-productionpreprodpreprod-hema-cms.sanity.studioPush to main
Stagingstagingstaging-hema-cms.sanity.studioGit tag
Sandbox<branch>_sandbox<branch>-sandbox-hema-cms.sanity.studioPush to feature/*
PageWhat you’ll learn
Content ModelingSchema types, page types, reusable components, translated fields
MFE IntegrationHow frontends consume CMS data (client setup, GROQ, repository pattern)
Content Flow & Live PreviewEnd-to-end delivery from editor to screen, draft mode, Presentation Tool
DAM SyncBynder asset synchronization pipeline
DeploymentCI/CD pipeline, sandbox environments, local deploy