Skip to content
Development
Skill

/craft-content-modeling

Craft CMS 5 content modeling — sections, entry types, fields, Matrix, relations, project config, and content architecture strategy. Covers choosing section types, designing entry types and field layouts, selecting field types, configuring Matrix and nested entries, relations and

From plugin
craftcms-claude-skills
8914 skills6 agents

Claude Code

$ npx -y skills add michtio/craftcms-claude-skills --skill craft-content-modeling --agent claude-code

SKILL.md

craft-content-modeling.SKILL.md
name: craft-content-modeling
description: "Craft CMS 5 content modeling — sections, entry types, fields, Matrix, relations, project config, and content architecture strategy. Covers choosing section types, designing entry types and field layouts, selecting field types, configuring Matrix and nested entries, relations and eager loading, and multi-site propagation."
when_to_use: "Triggers on: section types (single, channel, structure), entry types, field types, field layout design, field type selection, Matrix, nested entries, relatedTo, eager loading, .with()/.eagerly(), categories, tags, globals, global sets, preloadSingles, propagation, multi-site content, project config, YAML, project-config/write/diff/apply/touch, YAML vs DB drift, restored prod DB dump, content strategy, taxonomy, asset volumes, filesystems, image transforms, user groups, content permissions, entrify/entrification, CKEditor vs Matrix, CMS editions, multi-language/localization, field translation methods, content migration, field instances, Formie forms vs project config, cross-env/multi-site Formie, elementSources/Entries index sidebar, tableAttributes, defaultSort, authoring schema from code (service layer vs YAML). Always use when planning content architecture, creating sections/fields, configuring Matrix, setting up relations, choosing field types, designing field layouts, planning multi-site propagation, tidying the Entries element index, or running project-config commands. Do NOT trigger for PHP plugin/module development, custom field type code, front-end Twig, or buildchain."

Craft CMS 5 — Content Modeling

How to structure content in Craft CMS 5. Sections, entry types, fields, Matrix, relations, asset management, and strategic patterns for real projects.

This skill covers **content architecture** — what goes in the CP, how it's organized, and how templates access it. For extending Craft with PHP (plugins, modules, custom element types), see the `craftcms` skill.

Companion Skills — Always Load Together

When this skill triggers, also load:

  • **`craft-site`** — Template architecture, component patterns, routing. Required when content decisions affect how templates render data.
  • **`craft-twig-guidelines`** — Twig coding standards. Required when writing any Twig examples or template code alongside content modeling.
  • **`ddev`** — All commands run through DDEV. Required for running project config commands, Craft CLI, and content migrations.

Documentation

  • Entries: https://craftcms.com/docs/5.x/reference/element-types/entries.html
  • Sections: https://craftcms.com/docs/5.x/reference/element-types/entries.html#sections
  • Fields: https://craftcms.com/docs/5.x/system/fields.html
  • Field types: https://craftcms.com/docs/5.x/reference/field-types/
  • Matrix: https://craftcms.com/docs/5.x/reference/field-types/matrix.html
  • Relations: https://craftcms.com/docs/5.x/system/relations.html
  • Eager loading: https://craftcms.com/docs/5.x/development/eager-loading.html
  • Project config: https://craftcms.com/docs/5.x/system/project-config.html

Use `WebFetch` on specific doc pages when a reference file doesn't cover enough detail.

The Craft 5 Mental Model

**Everything is becoming an entry.** Entry types are global (shared across sections and Matrix fields). Fields come from a global pool. This is the "entrification" of Craft — categories, tags, and globals are being unified into entries over a three-version arc:

  • **Craft 4.4** — `entrify` CLI commands added to convert categories, tags, and globals to entries
  • **Craft 5** — Categories, tags, and global sets are deprecated and discouraged for new projects. New category groups, tag groups, and global sets can still be created in the CP (the "New" buttons remain, gated by `allowAdminChanges`), and existing ones continue to work. A unified "Content" section replaces the fragmented entries view. Custom entry index pages (5.9.0) solve the sidebar organization concern.
  • **Craft 6** — Categories, tags, and global sets will be removed entirely

For **new projects**, always use entries: Structure sections for hierarchical taxonomy, Channel sections for flat taxonomy, Singles for site-wide settings. For **existing projects**, migrate at your own pace using the `entrify` commands.

Three decisions define your content architecture:

1. **Which section type** organizes the content (Single, Channel, Structure) 2. **Which entry types** define its shape (global, reusable across contexts) 3. **Which relation strategy** connects content together (Entries fields, Matrix, CKEditor nested entries, or a combination)

CMS Editions

Craft CMS has four editions (Solo, Team, Pro, Enterprise) that affect content modeling. The key distinction: if any section needs multiple custom user groups with per-group edit/view restrictions, you need **Pro or Enterprise** (multiple custom user groups are Pro+ only). Team includes one fixed "Team" group whose permissions are customizable for non-admins, plus a 5-user cap. See `references/users-and-permissions.md` for the full editions table and permissions architecture.

Choose the edition before modeling — it determines whether you can scope content access by user group, which affects section and field architecture.

Section Type Decision

| Need | Section Type | URI Example | |------|-------------|-------------| | One-off page (homepage, about, contact) | **Single** | `__home__`, `about` | | Site-wide settings (footer, header config) | **Single** (no URI, `preloadSingles`) | — | | Flat collection (blog, news, events) | **Channel** | `blog/{slug}` | | Hierarchical pages (docs, services) | **Structure** | `{parent.uri}/{slug}` | | Taxonomy (topics, categories) | **Structure** (replaces categories) | `topics/{slug}` | | Flat tags | **Channel** (replaces tags) | — |

Section Properties

Beyond the type, sections have settings that matter for content architecture:

  • **`maxAuthors`** (default 1) — allows multiple authors per entry (new
Read more
@michtio
Ships withcraftcms-claude-skills

Production-ready Claude Code skills, agents, and project templates for Craft CMS 5 development. Built and maintained by michtio.

8914 skills6 agents
Get the whole plugin

Stars on GitHub

Momentum

stars in total
89
Star history of michtio/craftcms-claude-skills on GitHub, a chart by star-history.com

Other skills on craftcms-claude-skills.

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills12d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc13d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react2d252k
@facebook@facebookInstall Skill

Questions about craft-content-modeling.

Which coding agents can use craft-content-modeling?
craft-content-modeling installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.