content-type-modeler
Paste into Claude Code, Claude.ai, the desktop app, or the browser extension — ⌘/Ctrl+V. ✓ Copied. Switch to Claude and paste — ⌘/Ctrl+V.
Content Type Modeler
Purpose
Define one content type completely: every field with its type, alias, validation rules, localisation decision, indexing flag, and references to other types. Emit a ready-to-use artifact for the target platform. Use once per type — call this skill in a loop for each type when building a broader model.
Distinct from the content-type-modeler skill in the content-modeling-assistant plugin, which
designs a full type hierarchy from requirements. This skill goes deep on one type at a time.
Inputs
$ARGUMENTS provides:
<TypeName>— the content type name (PascalCase; e.g.ArticlePage,HeroBlock,AuthorProfile)--platform— target platform:sitecore|umbraco|optimizely|agnostic(default:agnostic)--category— type category:page|block|element|base(default: infer from name)
If no arguments are given, ask: "What is the content type name and target platform?"
Additional context the user may supply (accept any format):
- Brief description of the type's purpose and where it appears on-site
- List of fields they already know they need
- An existing type to base it on (inheritance/composition)
- A wireframe description or page spec to derive fields from
Workflow
Step 1 — Establish the brief
If the brief is thin (no fields listed, no description), ask for:
- What this type represents (one sentence)
- Where it appears: page, block/component, standalone reusable element, or base/mixin only
- Delivery channels: web only, mobile app, email, all (affects localisation and rich text decisions)
- Multi-market/multilingual: yes or no (determines localisation per field)
- Any fields the user already knows they want
If any of these is clearly inferable from the type name and context, infer it and state the assumption — don't ask if you already know.
Step 2 — Assign category and base types
Map the type to a category using reference.md § Type Categories. Suggest a base or composition
to inherit from when applicable:
| Scenario | Recommendation |
|---|---|
| Page with SEO requirements | Inherit from / compose with an SeoBase mixin |
| Any published page | Include an OpenGraphBase mixin |
| Authored content | Include MetadataBase (author, publish date, expiry) |
| Navigation item | Include NavigationBase (nav title, hide-in-nav flag) |
| Component / block | Keep standalone — no page-level inheritance |
| Global reusable (card, CTA, testimonial) | Mark reusable: true; no base needed |
State the category and any base types before proceeding.
Step 3 — Define fields
For every field produce a row in the canonical field table. Add fields in this order:
- Identity fields (name/title, slug/alias, ID)
- Primary content fields (headline, body, image, summary)
- Reference fields (author, related items, category)
- Metadata fields (tags, publish date, expiry, sort order)
- SEO fields (if not in a base mixin: meta title, meta description, canonical URL, OG image)
- Settings / behaviour fields (hide in nav, feature flag, A/B variant key)
Canonical field table:
| Field Name | Alias (camelCase) | Neutral Type | Required | Localised | Indexed | Cardinality | Validation | Reuse Note |
|---|
Column definitions — see reference.md § Field Column Definitions for the full spec.
Type rules (load reference.md § Neutral Field Types for the full vocabulary):
- Use structured types (integer, boolean, date, enum, reference) whenever the value has known constraints. Rich text is an explicit choice — document allowed inline elements and embeds.
- Every rich text field must state: max length (words or chars), allowed inline formats, allowed embedded types (none by default).
- Multi-value fields must state cardinality:
0..*(unlimited),1..5(bounded),1..*(at least one). - Fields driving Coveo search, faceted filtering, or personalisation: mark
indexed: true.
Step 4 — Map references
For every field whose neutral type is reference, multi-reference, taxonomy, or media,
produce a reference row:
| Source Field | Relationship Type | Target Type | Cardinality | Direction | Notes |
|---|
Relationship types: Reference (soft link), Composition (nested/embedded), Taxonomy
(controlled vocabulary link), Media (asset), Navigation (structural tree link).
Flag any circular reference risk. Note publication order implications if target type must exist before source can be published.
Step 5 — Emit platform artifact
Read reference.md § Platform Adapters and emit the ready-to-use artifact for the target platform.
--platform sitecore — emit a Sitecore template definition block (see templates.md § Sitecore):
- Template name, path suggestion (
/sitecore/templates/<Domain>/<TypeName>) - Base templates list
- Field sections with field name, field type, Shared/Versioned/Unversioned flag, source (own vs inherited)
- Standard Values notes (default values, workflow, insert options)
--platform umbraco — emit a Document Type definition (see templates.md § Umbraco):
- Document Type name, alias (camelCase), icon suggestion
- Compositions list
- Property groups with alias, property name, property alias, Data Type, mandatory flag, description
- Content Delivery API JSON key names (aliases)
- Allowed child types (if page type)
--platform optimizely — emit a C# content type class skeleton (see templates.md § Optimizely):
- Class name, base class (
PageData,BlockData,ImageData, or custom) [ContentType]attribute with GUID placeholder, display name, description, group name- Property declarations with
[Display],[CultureSpecific],[Searchable],[Required]attributes as appropriate - Content Graph indexing comment (
// Graph: YES) on types queried headlessly
--platform agnostic — emit a JSON schema object (see templates.md § Agnostic JSON):
name,alias,category,description,reusable,bases[],fields[]- Each field:
name,alias,type,required,localizable,indexed,cardinality,target,validation,notes - Compatible with the
content-type-modelerplugin's JSON schema format for downstream use
Step 6 — Reuse and governance notes
After the platform artifact, emit a short Reuse & Governance section:
- Reuse potential — is this type a candidate for reuse across pages/components? Y/N + rationale
- Shared field candidates — fields that could be promoted to a base/mixin if 2+ other types need them
- Authoring UX notes — field ordering recommendations, help-text suggestions, conditional display
- Open questions — list any field or design decisions that require client/stakeholder input
(e.g. "Confirm: is
expiryDaterequired or optional?", "ShouldrelatedArticlesallow max 6 or unlimited?")
Step 7 — Validate and output
Run the quality checklist before presenting output:
- Every field has a neutral type, alias, and required/optional flag
- Every reference field has a target type and cardinality
- Rich text fields document allowed inline formats and embeds
- Indexed fields are explicitly marked
- Localisation decision is explicit for each field (not left as "TBD")
- Platform artifact uses correct field type vocabulary for the target platform
- Open questions are listed — no client decisions made unilaterally
Present output as:
- Canonical field table
- Reference map (if any references exist)
- Platform artifact (formatted code block or table per platform)
- Reuse & Governance notes
If the user asks to model another type, re-invoke from Step 1 with the new type name.
References
reference.md— neutral field type vocabulary, field column definitions, type category guide, platform adapter field type mappings (Sitecore, Umbraco, Optimizely), common anti-patternstemplates.md— ready-to-paste output templates for each platform (Sitecore template block, Umbraco Document Type table, Optimizely C# class, agnostic JSON schema object)examples.md— worked examples: ArticlePage (Sitecore), HeroBlock (Umbraco), AuthorProfile (Optimizely), ProductCard (agnostic)
Technical details
- Source
- Standalone skill
- Author
- Dakota Smith
- Skill name
content-type-modeler- Maturity
- experimental
- Security review
- No security review
- Argument hint
<TypeName> [--platform sitecore|umbraco|optimizely|agnostic] [--category page|block|element|base]- Allowed tools
-
ReadWriteEdit
- File
skills/content-type-modeler/SKILL.md
To use this skill in Claude Code, copy SKILL.md into your local .claude/skills/content-type-modeler/ directory.
Standalone skills are not exposed via claude plugin install — that path is reserved for plugin bundles.
Edit this skill on GitHub — opens GitHub's web editor. No git knowledge needed.