From superpowers-sage
Classifies content for Sage/Bedrock blocks/components: CPTs via Poet, ACF fields/repeaters/relations/Options Pages, Blade/Livewire; matrix/checklist for static/dynamic/relational modeling before building.
npx claudepluginhub codigodoleo/superpowers-sage --plugin superpowers-sageThis skill uses the workspace's default tool permissions.
Classify content within blocks and components to determine the right data modeling approach: static ACF fields, dynamic CPTs, Options Pages, or relationship fields.
Designs content type hierarchies, reusable parts, and field compositions for headless CMS using Type > Part > Field pattern. Covers composition vs inheritance and multi-channel reusability.
Designs author-friendly content models for AEM Edge Delivery blocks. Use when creating new blocks or changing existing ones that alter authoring structure.
Guides creating Content Elements, Record Types, Page Types, and File Types using TYPO3 Content Blocks extension—the single source of truth for YAML-based content modeling in TYPO3 14.x.
Share bugs, ideas, or general feedback.
Classify content within blocks and components to determine the right data modeling approach: static ACF fields, dynamic CPTs, Options Pages, or relationship fields.
/building when content classification is needed| Classification | When to Use | Implementation |
|---|---|---|
| Static | Fixed text that rarely changes, part of page identity | ACF field in block fields() |
| Dynamic Collection | Growing list of items (portfolio, team, testimonials) | CPT via Poet + taxonomy |
| Dynamic Global | Shared across pages (site info, social links, CTA) | ACF Options Page |
| Dynamic Relation | References other content (featured posts, related projects) | ACF Relationship field |
| Fixed Repeater | 3-5 items, rarely change, no detail pages | ACF Repeater field in block |
For each piece of content in a block, ask:
Does this content appear in more than one place?
Will the client add/remove items over time?
Does the list have categories or filters?
Is it a fixed set of 3-6 items that rarely changes?
Does this content have its own detail page?
Should this content be searchable or filterable on the frontend?
For each analyzed component, output:
### Content Model: {Component Name}
| Content Element | Classification | Implementation |
|---|---|---|
| {element} | {static/dynamic-collection/etc.} | {ACF field type / CPT name} |
**Poet Config** (if CPTs needed):
```php
// config/poet.php
'post' => [
'project' => [
'route' => 'projects',
'supports' => ['title', 'editor', 'thumbnail'],
],
],
'taxonomy' => [
'project_type' => [
'links' => ['project'],
'meta_box' => 'radio',
],
],
ACF Fields (key fields):
$this->addText('headline', ['label' => 'Headline']);
$this->addRepeater('items', ['label' => 'Items'])
->addText('title')
->addTextarea('description')
->endRepeater();
Query Example (if dynamic):
$projects = get_posts([
'post_type' => 'project',
'posts_per_page' => 6,
'orderby' => 'menu_order',
'order' => 'ASC',
]);
## Key Principles
- **Ask the checklist** — don't guess, systematically evaluate each content element
- **Default to static** — only use CPTs when the checklist clearly indicates dynamic content
- **YAGNI** — a repeater is simpler than a CPT; use the simpler option when both work
- **Poet for CPTs** — never `register_post_type()` directly
- **Future-proof wisely** — if content will "probably" grow, use a CPT; if "maybe someday", use a repeater
## Query First — MCP Integration
Before proposing CPTs or ACF field groups, query what already exists:
execute-ability posts/list-types execute-ability acf/field-groups
See [`sageing/references/mcp-query-patterns.md`](../sageing/references/mcp-query-patterns.md).