content-type-modeling
Use when designing content type hierarchies, defining reusable content parts, or structuring field compositions for a headless CMS. Covers the Content Type -> Content Part -> Content Field hierarchy pattern, content type inheritance, composition vs inheritance trade-offs, and schema design for maximum reusability across channels.
What this skill does
# Content Type Modeling
## Interactive Modeling Configuration
Use AskUserQuestion to configure the content type modeling session:
```yaml
# Question 1: Modeling Scope (MCP: CMS content architecture patterns)
question: "What content type modeling do you need?"
header: "Scope"
options:
- label: "Single Type (Recommended)"
description: "Design one content type with parts and fields"
- label: "Type Family"
description: "Related content types sharing common parts"
- label: "Full Taxonomy"
description: "Complete content model with relationships"
- label: "Migration"
description: "Migrate from traditional to structured content"
# Question 2: Reusability Strategy (MCP: Orchard Core content patterns)
question: "How should content parts be structured?"
header: "Reuse"
options:
- label: "Composition (Recommended)"
description: "Build types from reusable parts - maximum flexibility"
- label: "Inheritance"
description: "Base types with specialized extensions"
- label: "Hybrid"
description: "Mix of composition and inheritance"
- label: "Flat"
description: "Standalone fields on each type - no shared parts"
```
Use these responses to determine modeling scope and composition strategy.
Guidance for designing content type hierarchies, reusable parts, and field compositions for headless CMS architectures.
## When to Use This Skill
- Designing content type schemas for a new CMS
- Defining reusable content parts across multiple types
- Structuring custom field compositions
- Planning content type inheritance strategies
- Migrating from traditional to structured content
- Creating multi-channel content architectures
## The Three-Level Hierarchy
Headless CMS platforms typically use a three-level content hierarchy inspired by patterns from Orchard Core and similar platforms:
```text
Content Type (e.g., "Blog Post", "Product", "Event")
├── Content Parts (reusable groups of fields)
│ ├── TitlePart (title, display title)
│ ├── AutoroutePart (slug, URL pattern)
│ ├── PublishLaterPart (scheduled publishing)
│ └── [Custom Parts]
└── Content Fields (individual data elements)
├── TextField (single-line, multi-line)
├── HtmlField (rich text)
├── MediaField (images, documents)
├── ContentPickerField (references)
└── [Custom Fields]
```
### Content Types
Content Types are the blueprint for content items. They define what parts and fields are available.
```yaml
content_type:
name: BlogPost
display_name: Blog Post
description: A blog article with author and categories
stereotype: Content # Content, Widget, MenuItem
creatable: true
listable: true
draftable: true
versionable: true
securable: true
```
**Key Decisions:**
| Decision | Options | Recommendation |
| -------- | ------- | -------------- |
| Naming | Singular vs Plural | Singular (BlogPost, not BlogPosts) |
| Stereotypes | Content, Widget, MenuItem | Content for standalone, Widget for embeddable |
| Draftable | true/false | true for editorial content |
| Versionable | true/false | true for audit requirements |
### Content Parts
Content Parts are reusable groups of fields that can be attached to multiple content types. They promote DRY principles.
```yaml
content_part:
name: SeoMetaPart
description: SEO metadata for search engines
fields:
- name: MetaTitle
type: TextField
settings:
max_length: 60
hint: "Title shown in search results"
- name: MetaDescription
type: TextField
settings:
max_length: 160
editor: TextArea
- name: MetaKeywords
type: TextField
settings:
editor: TextArea
hint: "Comma-separated keywords"
- name: NoIndex
type: BooleanField
settings:
default: false
```
**Common Reusable Parts:**
| Part | Purpose | Attach To |
| ---- | ------- | --------- |
| TitlePart | Title and display title | All content types |
| AutoroutePart | URL slug generation | Pages, articles |
| PublishLaterPart | Scheduled publishing | Editorial content |
| LocalizationPart | Multi-language support | Translatable content |
| SeoMetaPart | Search engine metadata | Public pages |
| CommonPart | Owner, created/modified dates | All content types |
| ContainablePart | Parent container reference | Hierarchical content |
### Content Fields
Content Fields are individual data elements attached to parts or directly to content types.
**Standard Field Types:**
| Field Type | Purpose | Example Use |
| ---------- | ------- | ----------- |
| TextField | Single/multi-line text | Title, description |
| HtmlField | Rich text with formatting | Body content |
| NumericField | Numbers (int, decimal) | Price, quantity |
| BooleanField | True/false toggle | Featured, published |
| DateTimeField | Date and/or time | Event date, deadline |
| MediaField | Images, documents, video | Hero image, attachments |
| ContentPickerField | Reference to other content | Author, related posts |
| TaxonomyField | Category/tag selection | Categories, tags |
| LinkField | URL with optional text | External links |
| UserPickerField | Reference to users | Author, assignee |
## Composition vs Inheritance
### Composition Pattern (Recommended)
Build content types by combining parts. This is the preferred approach for flexibility.
```yaml
# Blog Post = TitlePart + AutoroutePart + BodyPart + SeoMetaPart + Custom Fields
content_type:
name: BlogPost
parts:
- TitlePart
- AutoroutePart
- PublishLaterPart
- SeoMetaPart
fields:
- name: FeaturedImage
type: MediaField
- name: Author
type: ContentPickerField
settings:
content_types: [Author]
- name: Categories
type: TaxonomyField
settings:
taxonomy: BlogCategories
```
**Benefits:**
- Parts are reusable across types
- Changes to parts affect all attached types
- Clear separation of concerns
- Easier to add/remove capabilities
### Inheritance Pattern
Use sparingly for true "is-a" relationships.
```yaml
# Base type
content_type:
name: Article
abstract: true # Cannot create instances directly
parts:
- TitlePart
- AutoroutePart
- BodyPart
# Derived types
content_type:
name: NewsArticle
extends: Article
fields:
- name: BreakingNews
type: BooleanField
content_type:
name: OpinionPiece
extends: Article
fields:
- name: OpinionAuthor
type: ContentPickerField
```
**When to Use Inheritance:**
- Clear "is-a" relationship
- Shared behavior across subtypes
- Polymorphic queries needed
- Limited hierarchy depth (2-3 levels max)
## Field Design Best Practices
### Naming Conventions
```text
DO:
- PascalCase for type/part/field names: BlogPost, FeaturedImage
- Descriptive names that indicate purpose: PublishDate (not Date1)
- Consistent suffixes: *Date, *Image, *List
DON'T:
- Abbreviations: PubDt, FeatImg
- Generic names: Data, Value, Field1
- Inconsistent casing: blogPost, featured_image
```
### Field Validation
```yaml
field:
name: Email
type: TextField
validation:
required: true
pattern: "^[^@]+@[^@]+\\.[^@]+$"
max_length: 255
unique: true # Within content type
settings:
placeholder: "[email protected]"
hint: "Enter a valid email address"
```
### Required vs Optional Fields
```text
Required fields:
- Essential for content to be meaningful
- Used in URLs or identification
- Needed for API consumers
Optional fields:
- Enhancements or metadata
- May not apply to all instances
- Progressive disclosure in editor
```
## Content Type Categories
### System Content Types
Built-in types that power CMS functionality:
| Type | Purpose |
| ---- | ------- |
| Menu | Navigation structure |
| MenuItem | Individual menu link |
| Taxonomy | Category/tag vocabulary |
| TaxonomyTerm | Individual term |
| MediaAsset | Images, documents |
| User | User profiles |
### Common Content Types
Frequently needed across CMS projects:
```yaml
# Page - generic content pagRelated in Design
contribute
IncludedLocal-only OSS contribution command center. Auto-refreshes the user's in-flight PR and issue state on invoke so conversations start with full context — no need to brief Claude on what's in flight. Helps the user find issues to contribute to on GitHub, builds per-repo dossiers of what each upstream expects (CLA, DCO, branch convention, AI policy, draft-first, review bots, issue templates), runs deterministic gates before any external action so AI-assisted contributions don't reach maintainers as slop. State is markdown-only: candidate files at ~/.contribute-system/candidates/, repo dossiers at ~/.contribute-system/research/, append-only event log at ~/.contribute-system/log.jsonl. No database, no cloud calls. Use when the user asks about their PRs / issues / contributions, wants to find new work to take on, claim an issue, build/refresh a repo's dossier, or draft a Design Issue or PR. Trigger with "/contribute", "what's my PR status", "find a contribution", "claim issue X", "draft a Design Issue for Y", "refresh dossier for Z".
architectural-analysis
IncludedUser-triggered deep architectural analysis of a codebase or scoped subtree across eight modes — information architecture, data flow, integration points, UI surfaces, interaction patterns, data model, control flow, and failure modes. This skill should be used when the user asks to "diagram this codebase," "map the architecture," "show the data flow," "give me an ERD," "trace control flow," "find the integration points," "verify the layout pattern," "audit the UX architecture," or any similar request whose primary deliverable is mermaid diagrams plus cited reports under docs/architecture/. Dispatches haiku/sonnet sub-agents in parallel for per-mode exploration, then verifies every citation mechanically before any node lands in a diagram. Not for one-off prose explanations of code (use code-explanation) or for high-level system design from scratch (use system-design).
mcp
IncludedModel Context Protocol (MCP) server development and tool management. Languages: Python, TypeScript. Capabilities: build MCP servers, integrate external APIs, discover/execute MCP tools, manage multi-server configs, design agent-centric tools. Actions: create, build, integrate, discover, execute, configure MCP servers/tools. Keywords: MCP, Model Context Protocol, MCP server, MCP tool, stdio transport, SSE transport, tool discovery, resource provider, prompt template, external API integration, Gemini CLI MCP, Claude MCP, agent tools, tool execution, server config. Use when: building MCP servers, integrating external APIs as MCP tools, discovering available MCP tools, executing MCP capabilities, configuring multi-server setups, designing tools for AI agents.
react-native-skia
IncludedDesign, build, debug, and optimise high-polish animated graphics in React Native or Expo using @shopify/react-native-skia, Reanimated, and Gesture Handler. Use when the user wants canvas-driven UI, shaders, paths, rich text, image filters, sprite fields, Skottie, video frames, snapshots, web CanvasKit setup, or performance tuning for custom motion-heavy elements such as loaders, hero art, cards, charts, progress indicators, particle systems, or gesture-driven surfaces. Also use when the user asks for fluid, glow, glass, blob, parallax, 60fps/120fps, or GPU-friendly animated effects in React Native, even if they do not explicitly say "Skia". Do not use for ordinary form/layout work with standard views.
plaid
IncludedProduct Led AI Development — guides founders from idea to launched product. Six capabilities: Idea (discover a product idea), Validate (pressure-test the idea against fatal flaws, problem reality, competition, and 2-week MVP feasibility), Plan (vision intake + document generation), Design (translate image references into a design.md spec), Launch (go-to-market strategy), and Build (roadmap execution). Use when someone says "PLAID", "plaid idea", "help me find an idea", "product idea", "idea from my business", "idea from my expertise", "plaid validate", "validate my idea", "pressure-test", "is this idea good", "find fatal flaws", "validate the problem", "plan a product", "define my vision", "generate a PRD", "product strategy", "plaid design", "design from image", "translate image to design", "create design.md", "extract design tokens", "plaid launch", "go-to-market", "launch plan", "GTM strategy", "launch playbook", "plaid build", "build the app", "start building", or "execute the roadmap".
nextjs-framer-motion-animations
IncludedAdds production-safe Motion for React or Framer Motion animations to Next.js apps, including reveal, hover and tap micro-interactions, whileInView, stagger, AnimatePresence, layout and layoutId transitions, reorder, scroll-linked UI, and lightweight route-content transitions. Use when the user asks to add, refactor, or debug Motion or Framer Motion in App Router or Pages Router codebases, especially around server/client boundaries, reduced motion, LazyMotion, bundle size, hydration, or route transitions. Avoid for GSAP-style timelines, WebGL or 3D scenes, heavy scroll storytelling, or CSS-only effects unless Motion is explicitly requested.