Image without description
  • Jacco Meijer
  • |
  • Mar 21, 2022

Content modeling with variants

The efficiency of a variant field in a content model.

Content modeling

Adding a 'variant' atrribute can reduce the number of models needed when modeling for a marketing site.

When modeling for an app this is not true. Mainly because an app works with fixed layouts and layouts for a marketing site must be flexible.

Content modeling for an app

For apps with a lot of fixed content it is practical to have a Screen model with an uiModels field. The uiModels field holds an array of models that are close to the models used for the UI components.

Both the Screen model and the uiModels contain fixed ids. These ids bind the content to specific usage in the app.

For each screen of the app a Screen entry is added. For each UI element on that screen a uiModel entry is added to the uiModels field.

Content modeling for a marketing site

A 'variant' field is notably efficient when used in an environment with a text editor that allows for content models to be embedded in the text. The Contentful rich text editor is a good example.

Setting up models for a site it is obvious to start with a Page model. This model contains the text editor. The page model also holds fields for things like url and SEO.

Next, two models that can be embedded are defined. One model for topics and one model for lists of topics.

Topic model

The Topic model contains the standard fields of any 'call to action'. A heading, an abstract and an action.

Adding a 'variant' field to this model gives an editor control over how the topic is displayed.

List model

The List model contains a list of topics.

Adding a 'variant' field to this model gives an editor control over what list is used. The number of columns, the headers, etc. The 'topicVariant' field controls which variant is used for the topics in the list.

Composing pages

At this point three models are defined. All three can be embedded in the text.

Adding a 'variant' field to the Page model gives an editor control over how to display a link to a Page.

With just three models and the variant field a great variety of pages can be created. The more variants each model has, the more powerful this design becomes.

Next

Adding a 'colors' atrribute to the interface allows for theming components. The post below explains how.

Image without description
  • Jacco Meijer
  • |
  • Mar 21, 2022

React component themes and CSS variables

Creating React components with flexible themes by using CSS variables.


Other posts

Image without description
  • Jacco Meijer
  • |
  • Jul 8, 2025

Enterprise Architecture threat modeling

Threat modeling with the Archimate language as part of both ISO 27001 and NIST CSF

Image without description
  • Jacco Meijer
  • |
  • Jun 27, 2025

CSF Tiers for cyber security risk governance and management

NIST CSF 2.0 contains useful tiers for Capability Maturity Modeling in Enterprise Architecture

Image without description
  • Jacco Meijer
  • |
  • Jun 20, 2025

Archimate risk assessment elements

A few simple specializations for working with risk assessments in Archimate

Image without description
  • Jacco Meijer
  • |
  • Jun 13, 2025

Security principles in Enterprise Architecture

Adding security principles to Enterprise Architecture for NIST CSF and ISO 27001

Image without description
  • Jacco Meijer
  • |
  • Jun 6, 2025

Combining ISO 27001 and NIST CSF

How to use ISO 27001 and NIST Cyber Security Framework together

Image without description
  • Jacco Meijer
  • |
  • May 1, 2025

CISSP certification and Enterprise Architecture

How do the CISSP certification domains relate to Enterprise Architecture and the ArchiMate layers?

Image without description
  • Jacco Meijer
  • |
  • Apr 23, 2025

Architect roles in the ArchiMate context

An ArchiMate model that maps architect roles to the ArchiMate framework layers.

Image without description
  • Jacco Meijer
  • |
  • Mar 18, 2025

Visualizing IT Architecture in three languages, UML, C4 and ArchiMate

What are the differences and what are these languages most used for?

Image without description
  • Jacco Meijer
  • |
  • Feb 18, 2025

OAuth 2.0 and OpenID Connect Sequence Diagrams

Technical specs can be hard to read. While still highly technical, the UML Sequence Diagrams provided in this blog are a lot easier to understand.

Image without description
  • Jacco Meijer
  • |
  • Jan 9, 2025

OWASP and CISSP

OWASP recommendations from the independent information security certification CISSP.

Image without description
  • Jacco Meijer
  • |
  • Mar 21, 2024

UI Library with MDX documentation

Using the simple Render JSX plugin for Esbuild this post shows how to setup a simple UI library.

Image without description
  • Jacco Meijer
  • |
  • Mar 20, 2024

Render JSX plugin for Esbuild

Transform Esbuild generated JSX bundles to HTML pages.

Image without description
  • Jacco Meijer
  • |
  • Mar 19, 2024

Esbuild as a static site generator for MDX

Static site generators gain popularity. This blog is about using Esbuild as a static site generator for MDX.

Image without description
  • Jacco Meijer
  • |
  • Mar 18, 2024

11ty and Github pages

Simplifying the Contentful-Gatsby-Netlfy trio.

Image without description
  • Jacco Meijer
  • |
  • Jun 30, 2022

NPM7 and @npmcli/arborist

@npmcli/arborist is a powerful library that handles the new NPM 7 workspaces. This blog is about a simple make tool that uses the library.

Image without description
  • Jacco Meijer
  • |
  • May 12, 2022

Comparing React app, Nextjs and Gatsby

A new React project starts with a React toolchain. Main tools in the chains are SSR, React server components and GraphQL.

Image without description
  • Jacco Meijer
  • |
  • May 10, 2022

Versioning strategy for NPM modules

It is important to be able to bump the version of a NPM package without side effects.

Image without description
  • Jacco Meijer
  • |
  • Apr 12, 2022

React component themes and CSS variables

Creating React components with flexible themes by using CSS variables.

Image without description
  • Jacco Meijer
  • |
  • Mar 12, 2022

Documentation

Documenting a software project is challenging. Here's a few simple guidelines that help a team writing clear documentation.

Image without description
  • Jacco Meijer
  • |
  • Mar 11, 2022

Javascript history

In 1986 David Ungar and Randall B. Smith developed Self at Xerox PARC. Inspired by Java, Scheme and Self Brendan Eich created Javascript in 1995.

Image without description
  • Jacco Meijer
  • |
  • Mar 10, 2022

On Javascript transpilers, bundlers and modules

There's Javascript transpilers, modules, bundles and bundlers. This is a brief overview of all of these.

Image without description
  • Jacco Meijer
  • |
  • Feb 11, 2022

Agile Scrum

The Agile Scrum framework is flexible enough to be used in many different ways. Here's one way of working.

Image without description
  • Jacco Meijer
  • |
  • Jan 20, 2022

What happened to Wheelroom?

Founded in 2018. Started to fly in 2020 and abandoned in 2021. What happened?

Image without description
  • Jacco Meijer
  • |
  • Jan 19, 2022

Contentful, Netlify and Gatsby four years later

What did we learn from using Contentful for four years?

Image without description
  • Jacco Meijer
  • |
  • Jan 18, 2022

Typescript interface for React UI components

How to define an interface for React UI components that prevents breaking changes.

Image without description
  • Jacco Meijer
  • |
  • Jan 17, 2022

Naming React components

What's in a name? A clear naming strategy helps developers communicate. Most devs rather spend time writing component code than wasting time on a good component name.