32 KiB
IGNY8 Phase 3: Companion Theme (03C)
FSE Block Theme Optimized for IGNY8 + SAG Architecture
Document Version: 1.0
Date: 2026-03-23
Phase: IGNY8 Phase 3 — WordPress Ecosystem
Status: Build Ready
Source of Truth: Codebase at /data/app/igny8/
Audience: Claude Code, WordPress Developers, Theme Developers, Architects
1. CURRENT STATE
No Companion Theme Exists
- Users run generic themes (Astra, GeneratePress, Kadence, etc.) alongside the IGNY8 plugin
- Plugin provides data (SEO meta, schema, internal links) but cannot control template rendering
- SAG taxonomy structures (service_category, service_area, clusters) have no optimized archive templates
- Term landing pages render as basic post lists — no rich content, FAQ, or cross-linking
- Cluster hub pages have no dedicated template with navigation and content grid
Plugin API Available (03A + 03B)
When the IGNY8 plugin is active, the theme can access:
igny8()->seo->get_title(),igny8()->seo->get_breadcrumbs()— SEO dataigny8()->schema->get_json_ld($post_id)— schema markupigny8()->linking->get_link_suggestions($post_id)— internal link suggestionsigny8()->linking->get_cluster_navigation()— cluster navigation data- Term meta:
_igny8_term_content,_igny8_term_faq,_igny8_term_related_terms - Blueprint data:
get_option('igny8_sag_blueprint')— full SAG structure
Graceful Degradation
The theme checks function_exists('igny8') before calling any plugin API:
- Without plugin: Theme breadcrumbs, basic related content by category, no SAG features
- With plugin standalone: SEO breadcrumbs, schema, link suggestions, share buttons
- With plugin connected: Full SAG term pages, cluster navigation, blueprint visualization, rich term content
2. WHAT TO BUILD
Overview
A Full Site Editing (FSE) block theme built for WordPress 5.9+ that provides:
- 7 custom post types (CPTs) optimized for service businesses, portfolios, and SaaS
- 9 custom taxonomies including SAG-mapped service categories and clusters
- Rich term landing page templates with 7-section layout
- Cluster hub template with dimensional navigation
- 15 landing page section types with 8 presets
- 50+ block patterns across 8 categories
- 13 custom Gutenberg blocks
- 5 site-type starter templates with demo content
- 6 interlinking display components
- WooCommerce integration when active
Design System (theme.json)
- Colors: Primary palette (primary, light, dark, accent), neutrals (background, surface, text, text-secondary, border), semantic (success, warning, error, info)
- Typography: Heading + body font pairings from curated list. Sizes: xs, sm, base, lg, xl, 2xl, 3xl, 4xl
- Spacing: xs (0.25rem), sm (0.5rem), base (1rem), lg (1.5rem), xl (2rem), 2xl (3rem), 3xl (4rem)
- Border Radius: none, sm, base, lg, full
- CSS: BEM naming
.tn-block__element--modifier, <35KB gzipped total - JS: ES6+, vanilla (no jQuery on frontend), <15KB gzipped
- Performance: FCP <1.0s, LCP <1.5s, TBT <50ms, CLS <0.05, PageSpeed 95+ mobile
7 Custom Post Types
CPT 1: service
- Archive enabled, supports: title, editor, thumbnail, excerpt, revisions, page-attributes
- Taxonomies:
service_category,service_area,service_attribute,cluster - Rewrite:
/services/%service_category%/%postname%/ - Templates:
single-service.html,archive-service.html - 10 meta fields:
| Meta Key | Type | Purpose |
|---|---|---|
_theme_service_price_range |
string | Price display ("$150 - $500") |
_theme_service_duration |
string | Time estimate ("2-4 hours") |
_theme_service_process_steps |
JSON | [{step_number, title, desc, icon}] |
_theme_service_outcomes |
JSON | [{title, description}] |
_theme_service_faqs |
JSON | [{question, answer}] |
_theme_service_cta_text |
string | CTA button text |
_theme_service_cta_url |
string | CTA button URL |
_theme_service_areas_served |
JSON | Geographic areas array |
_theme_service_gallery |
JSON | Attachment IDs array |
_theme_service_related_services |
JSON | Related service post IDs |
CPT 2: landing_page
- NO archive, does NOT support editor (section meta box instead)
- Rewrite:
/l/%postname%/ - Template:
single-landing_page.html - Section-based rendering from
_theme_landing_sectionsrepeater meta (15 section types, see below)
CPT 3: portfolio
- Archive enabled, supports: title, editor, thumbnail, excerpt, revisions
- Taxonomies:
portfolio_category,portfolio_tag,service_category(shared) - Rewrite:
/portfolio/%portfolio_category%/%postname%/ - Templates:
single-portfolio.html,archive-portfolio.html - 8 meta fields:
| Meta Key | Type | Purpose |
|---|---|---|
_theme_portfolio_client |
string | Client name |
_theme_portfolio_date |
string | YYYY-MM-DD |
_theme_portfolio_url |
string | Live project URL |
_theme_portfolio_results |
JSON | [{metric, value, description}] |
_theme_portfolio_technologies |
string | Comma-separated tech list |
_theme_portfolio_testimonial_id |
int | Linked testimonial post ID |
_theme_portfolio_gallery |
JSON | Attachment IDs array |
_theme_portfolio_before_after |
JSON | {before_img, after_img} |
CPT 4: team_member
- Archive enabled (team page), supports: title, editor, thumbnail
- Rewrite:
/team/%postname%/ - Templates:
single-team-member.html,archive-team-member.html - 6 meta fields:
_theme_team_position,_theme_team_email,_theme_team_phone,_theme_team_social(JSON:{linkedin, twitter, facebook, website}),_theme_team_order(int),_theme_team_department
CPT 5: testimonial
- Public: false (displayed via blocks/shortcodes only, no individual pages)
- Supports: title, editor, thumbnail
- 8 meta fields:
_theme_testimonial_author_name,_theme_testimonial_author_title,_theme_testimonial_company,_theme_testimonial_rating(1-5 int),_theme_testimonial_image(attachment ID),_theme_testimonial_featured(bool),_theme_testimonial_service_id(linked service),_theme_testimonial_product_id
CPT 6: faq
- Archive enabled, supports: title, editor (title=question, editor=answer)
- Taxonomies:
faq_category,cluster - Rewrite:
/faq/%faq_category%/%postname%/ - Templates:
single-faq.html,archive-faq.html - 2 meta fields:
_theme_faq_order(int),_theme_faq_schema_enabled(bool)
CPT 7: documentation
- Archive enabled, hierarchical (parent/child docs)
- Supports: title, editor, thumbnail, page-attributes
- Taxonomies:
doc_category - Rewrite:
/docs/%doc_category%/%postname%/ - Templates:
single-documentation.html,archive-documentation.html - 4 meta fields:
_theme_doc_sidebar_enabled(bool),_theme_doc_toc_enabled(bool),_theme_doc_last_reviewed(date),_theme_doc_related_docs(JSON: post IDs)
Note: WooCommerce taxonomies (
product_cat,product_tag,pa_*) are NOT registered by theme. Theme provides rich templates for them. Theme registersclusterforproductpost type.
9 Custom Taxonomies
| # | Slug | For CPTs | Hierarchical | SAG Mapping | Rewrite |
|---|---|---|---|---|---|
| 1 | service_category |
service, portfolio | Yes | Primary attribute | /services/{slug}/ |
| 2 | service_area |
service | Yes | Tertiary (geographic) | /area/{slug}/ |
| 3 | service_attribute |
service | No | Secondary attributes | /attribute/{slug}/ |
| 4 | portfolio_category |
portfolio | Yes | — | /portfolio/{slug}/ |
| 5 | portfolio_tag |
portfolio | No | — | /tag/{slug}/ |
| 6 | faq_category |
faq | Yes | Cluster assignment | /faq/{slug}/ |
| 7 | doc_category |
documentation | Yes | — | /docs/{slug}/ |
| 8 | cluster |
post, page, service, faq, product | No | Core cluster assignment | /topic/{slug}/ |
| 9 | topic_tag |
post, service, faq, documentation | No | Granular tagging | /topic/{slug}/ |
Term Landing Page Templates (7-Section Structure)
Every taxonomy term archive renders as a rich landing page:
| # | Section | Content |
|---|---|---|
| 1 | Term Hero | H1 (term name), description (from _igny8_term_content if active), breadcrumbs, post count |
| 2 | Key Subtopics | Grid of child term cards (if hierarchical + children exist) |
| 3 | Content Grid | Posts/services/products in term, filterable, paginated, layout options (grid 2/3/4 col, list) |
| 4 | Related Terms | Sibling terms or _igny8_term_related_terms from connected mode |
| 5 | Cluster Cross-Links | Related clusters sharing dimensional axes (if IGNY8 connected) |
| 6 | FAQ Section | Accordion from _igny8_term_faq or matching faq_category posts |
| 7 | CTA | Configurable per term or global default |
Cluster Hub Template (taxonomy-cluster.html)
| # | Section | Content |
|---|---|---|
| 1 | Cluster Hero | H1, description, dimensional breadcrumb, content count |
| 2 | Hub Content | Pillar article from _igny8_term_content |
| 3 | Supporting Content Grid | Posts/services/products grouped by type |
| 4 | Attribute Navigation | Browse intersecting attributes via SAG data |
| 5 | Related Clusters | Cross-linking via SAG dimensional relationships |
| 6 | FAQ | Cluster-specific FAQ from _igny8_term_faq |
| 7 | CTA | Configurable CTA block |
6 Interlinking Display Components
| # | Template Part | Source | Fallback |
|---|---|---|---|
| 1 | parts/related-content.html |
_igny8_related_links post meta |
Category match, 3-4 cards |
| 2 | parts/cluster-navigation.html |
igny8()->linking->get_cluster_navigation() |
Same cluster term posts |
| 3 | parts/attribute-browse.html |
Term archive sidebar pills/tags | All terms for taxonomy |
| 4 | parts/breadcrumbs.html |
igny8()->seo->get_breadcrumbs() |
Theme breadcrumb fallback |
| 5 | parts/term-quick-links.html |
All terms assigned to post grouped by taxonomy | Standard tag list |
| 6 | parts/child-term-grid.html |
Child terms with image/name/description/post count | get_term_children() |
Landing Page System (15 Section Types)
| # | Type | Fields |
|---|---|---|
| 1 | hero |
headline, subheadline, CTA, background image/video/gradient |
| 2 | features-grid |
columns 2/3/4, items: icon/title/description |
| 3 | how-it-works |
numbered steps: title/description/icon |
| 4 | social-proof |
testimonials: grid/slider/single layout |
| 5 | pricing |
billing toggle monthly/annual, plans: features/price/CTA |
| 6 | faq |
Q&A items, schema_enabled option for FAQPage JSON-LD |
| 7 | cta-band |
headline, subheadline, CTA, background colors |
| 8 | content-block |
title, WYSIWYG editor, image left/right, background |
| 9 | stats-counter |
stats: number/suffix/label, animated counters |
| 10 | team |
From team_member CPT or manual entries |
| 11 | portfolio-grid |
From portfolio CPT |
| 12 | contact-form |
Form shortcode, optional map, address block |
| 13 | video-embed |
URL, poster image, autoplay, full-width options |
| 14 | comparison-table |
columns, rows, highlight column option |
| 15 | logo-bar |
Logo images, grid or horizontal scroll |
Section template files in inc/landing-pages/sections/: one PHP file per section type.
8 Landing Page Presets
| # | Preset | Section Order |
|---|---|---|
| 1 | SaaS Product | hero → logo-bar → features → how-it-works → social-proof → pricing → faq → cta |
| 2 | Service Business | hero → features → content → stats → social-proof → team → contact-form → cta |
| 3 | Product Launch | hero → content → features → video → social-proof → pricing → faq → cta |
| 4 | Lead Generation | hero → features → social-proof → cta |
| 5 | Portfolio / Agency | hero → portfolio → how-it-works → social-proof → stats → contact-form |
| 6 | Event / Webinar | hero → content → features → social-proof → faq → cta |
| 7 | Cluster Hub | hero → content → features → faq → cta |
| 8 | Term Landing | hero → content → features → social-proof → faq → cta |
50+ Block Patterns (by Category)
| Category | Patterns |
|---|---|
| Heroes (4) | hero-centered, hero-split, hero-video-bg, hero-slider |
| Content (4) | features-3col, features-alternating, how-it-works, benefits-icons |
| Social Proof (4) | testimonials-grid, testimonials-slider, logo-bar, stats-row |
| Conversion (4) | cta-simple, cta-with-form, pricing-section, newsletter-signup |
| Services (3) | service-cards, service-list, service-with-sidebar |
| Portfolio (3) | portfolio-grid, portfolio-masonry, case-study-layout |
| Footers (3) | footer-4col, footer-centered, footer-minimal |
| Custom (13+) | pricing-table, feature-grid, testimonial-slider, stats-counter, team-grid, faq-accordion, cta-banner, logo-carousel, comparison-table, icon-box, service-grid, portfolio-showcase, doc-sidebar |
13 Custom Gutenberg Blocks
Registered in inc/blocks/, each with block.json, edit.js, save.js, style.css:
pricing-table— configurable pricing plans with togglefeature-grid— icon + title + description gridtestimonial-slider— carousel fromtestimonialCPTstats-counter— animated number countersteam-grid— fromteam_memberCPTfaq-accordion— collapsible FAQ with optional FAQPage schemacta-banner— full-width call-to-action bandlogo-carousel— partner/client logo showcasecomparison-table— feature comparison matrixicon-box— icon + heading + text blockservice-grid— fromserviceCPT (dynamic)portfolio-showcase— fromportfolioCPT (dynamic)doc-sidebar— documentation navigation tree
5 Site-Type Starter Templates
Each includes full template files, sample CPT entries, sample taxonomy terms, demo images:
| # | Starter | Key Templates |
|---|---|---|
| 1 | Blog | front-page, single.html, archive.html |
| 2 | SaaS | front-page, page-features.html, page-pricing.html, page-docs.html |
| 3 | Corporate | front-page, page-about.html, page-services.html, page-contact.html |
| 4 | eCommerce | front-page, archive-product.html, single-product.html |
| 5 | Portfolio | front-page, archive-portfolio.html, single-portfolio.html |
WooCommerce Integration (when active)
- Register
clustertaxonomy forproductpost type - Rich category pages following term landing structure
- Product attribute support in templates
- Integration with IGNY8 schema (Product schema type from 02G)
- Template overrides:
archive-product.php,single-product.php,taxonomy-product_cat.php,content-product.php
3. DATA MODELS & APIS
No Custom Database Tables
The theme uses only WordPress native storage:
- Post meta — CPT meta fields (all
_theme_prefixed) - Term meta — Plugin term meta (all
_igny8_term_prefixed, read-only from theme) - Options — Theme settings via Customizer/theme.json
Post Meta Summary (by CPT)
| CPT | Total Meta Fields | Prefix |
|---|---|---|
service |
10 | _theme_service_ |
landing_page |
1 (_theme_landing_sections repeater) |
_theme_landing_ |
portfolio |
8 | _theme_portfolio_ |
team_member |
6 | _theme_team_ |
testimonial |
8 | _theme_testimonial_ |
faq |
2 | _theme_faq_ |
documentation |
4 | _theme_doc_ |
Plugin API Consumed (read-only)
| API Call | Purpose | Fallback Without Plugin |
|---|---|---|
igny8()->seo->get_title() |
SEO title | wp_title() |
igny8()->seo->get_breadcrumbs() |
Breadcrumb HTML | Theme breadcrumb in inc/breadcrumbs.php |
igny8()->schema->get_json_ld($post_id) |
JSON-LD output | None (omitted) |
igny8()->linking->get_link_suggestions($post_id) |
Related content | Category-based WP_Query |
igny8()->linking->get_cluster_navigation() |
Cluster nav | Same-taxonomy term list |
get_term_meta($id, '_igny8_term_content') |
Term landing content | Term description |
get_term_meta($id, '_igny8_term_faq') |
Term FAQ data | faq_category posts query |
get_term_meta($id, '_igny8_term_related_terms') |
Related terms | Sibling terms |
get_option('igny8_sag_blueprint') |
SAG structure | Hidden (no SAG features) |
4. IMPLEMENTATION STEPS
Theme Architecture
igny8-theme/
├── style.css # Theme header (required)
├── theme.json # Design system tokens, settings, styles
├── functions.php # Bootstrap, includes loader
├── screenshot.png # Theme screenshot (1200x900)
├── assets/
│ ├── css/ # Compiled CSS (BEM, <35KB gzipped)
│ ├── js/ # Vanilla ES6+ JS (<15KB gzipped)
│ ├── fonts/ # Self-hosted font files
│ └── images/ # Theme images, icons
├── inc/
│ ├── setup.php # Theme supports, menus, sidebars, image sizes
│ ├── cleanup.php # Remove WP bloat (emojis, embeds, etc.)
│ ├── enqueue.php # Conditional CSS/JS loading
│ ├── template-tags.php # Custom template tags
│ ├── breadcrumbs.php # Theme breadcrumb fallback (when plugin not active)
│ ├── walkers.php # Custom nav walkers
│ ├── customizer.php # Logo, colors, fonts, layout, social URLs, footer text
│ ├── theme-bridge.php # Communication layer with IGNY8 plugin
│ ├── cpt/
│ │ ├── register.php # All CPT registration
│ │ ├── service.php # service CPT config
│ │ ├── landing-page.php # landing_page CPT config
│ │ ├── portfolio.php # portfolio CPT config
│ │ ├── team-member.php # team_member CPT config
│ │ ├── testimonial.php # testimonial CPT config
│ │ ├── faq.php # faq CPT config
│ │ └── documentation.php # documentation CPT config
│ ├── taxonomies/
│ │ ├── register.php # All taxonomy registration
│ │ ├── service-category.php # service_category config
│ │ ├── service-area.php # service_area config
│ │ ├── service-attribute.php # service_attribute config
│ │ ├── portfolio-category.php # portfolio_category config
│ │ ├── portfolio-tag.php # portfolio_tag config
│ │ ├── faq-category.php # faq_category config
│ │ ├── doc-category.php # doc_category config
│ │ ├── cluster.php # cluster taxonomy config
│ │ └── topic-tag.php # topic_tag config
│ ├── meta-fields/
│ │ ├── class-meta-box-base.php # Base meta box class
│ │ ├── service-meta.php # service CPT meta handler
│ │ ├── landing-page-meta.php # landing_page section repeater
│ │ ├── portfolio-meta.php # portfolio CPT meta handler
│ │ ├── team-member-meta.php # team_member meta handler
│ │ ├── testimonial-meta.php # testimonial meta handler
│ │ ├── faq-meta.php # faq meta handler
│ │ └── documentation-meta.php # documentation meta handler
│ ├── landing-pages/
│ │ ├── register-cpt.php # Landing page CPT specifics
│ │ ├── meta-boxes.php # Section repeater meta box
│ │ ├── presets.php # 8 landing page presets
│ │ ├── render.php # Section rendering engine
│ │ └── sections/ # 15 section PHP templates
│ │ ├── hero.php
│ │ ├── features-grid.php
│ │ ├── how-it-works.php
│ │ ├── social-proof.php
│ │ ├── pricing.php
│ │ ├── faq.php
│ │ ├── cta-band.php
│ │ ├── content-block.php
│ │ ├── stats-counter.php
│ │ ├── team.php
│ │ ├── portfolio-grid.php
│ │ ├── contact-form.php
│ │ ├── video-embed.php
│ │ ├── comparison-table.php
│ │ └── logo-bar.php
│ ├── interlinking/
│ │ ├── related-content.php # After-post related content
│ │ ├── cluster-navigation.php # Cluster nav component
│ │ ├── attribute-browse.php # Attribute browsing sidebar
│ │ ├── breadcrumbs-component.php # SAG-aware breadcrumbs
│ │ ├── term-quick-links.php # Post sidebar term links
│ │ └── child-term-grid.php # Child term card grid
│ ├── blocks/ # 13 custom block registrations
│ │ ├── pricing-table/
│ │ ├── feature-grid/
│ │ ├── testimonial-slider/
│ │ ├── stats-counter/
│ │ ├── team-grid/
│ │ ├── faq-accordion/
│ │ ├── cta-banner/
│ │ ├── logo-carousel/
│ │ ├── comparison-table/
│ │ ├── icon-box/
│ │ ├── service-grid/
│ │ ├── portfolio-showcase/
│ │ └── doc-sidebar/
│ └── patterns/
│ ├── register.php # Pattern category + registration
│ ├── heroes/
│ ├── content/
│ ├── social-proof/
│ ├── conversion/
│ ├── services/
│ ├── portfolio/
│ └── footers/
├── templates/ # FSE templates (20+)
│ ├── index.html
│ ├── home.html
│ ├── single.html
│ ├── page.html
│ ├── archive.html
│ ├── single-service.html
│ ├── single-portfolio.html
│ ├── single-landing_page.html
│ ├── single-documentation.html
│ ├── single-faq.html
│ ├── single-team-member.html
│ ├── archive-service.html
│ ├── archive-portfolio.html
│ ├── archive-faq.html
│ ├── archive-documentation.html
│ ├── archive-team-member.html
│ ├── taxonomy-service_category.html
│ ├── taxonomy-service_area.html
│ ├── taxonomy-service_attribute.html
│ ├── taxonomy-cluster.html
│ ├── taxonomy-faq_category.html
│ ├── taxonomy-product_cat.html # WooCommerce
│ ├── taxonomy-product_tag.html # WooCommerce
│ ├── search.html
│ ├── 404.html
│ └── starters/ # 5 starter template sets
├── parts/ # FSE template parts (20+)
│ ├── header.html
│ ├── header-transparent.html
│ ├── header-minimal.html
│ ├── footer.html
│ ├── footer-minimal.html
│ ├── sidebar.html
│ ├── sidebar-docs.html
│ ├── post-meta.html
│ ├── author-box.html
│ ├── comments.html
│ ├── pagination.html
│ ├── related-content.html
│ ├── cluster-navigation.html
│ ├── attribute-browse.html
│ ├── breadcrumbs.html
│ ├── term-quick-links.html
│ ├── child-term-grid.html
│ ├── term-hero.html
│ ├── term-content.html
│ └── term-faq.html
└── woocommerce/ # WooCommerce template overrides
├── archive-product.php
├── single-product.php
├── taxonomy-product_cat.php
├── content-product.php
├── cart/
├── checkout/
└── myaccount/
Build Sequence
Phase 1: Foundation (Days 1-3)
- Create
style.cssheader,theme.jsondesign tokens,functions.phpbootstrap - Build
inc/setup.php— theme supports, menus, sidebars, image sizes - Build
inc/cleanup.php— remove WP bloat (emojis, embed scripts, etc.) - Build
inc/enqueue.php— conditional CSS/JS loading - Build
inc/theme-bridge.php— plugin detection + API wrapper - Build
inc/customizer.php— logo, colors, fonts, layout options
Phase 2: CPTs + Taxonomies (Days 4-7)
- Register all 7 CPTs in
inc/cpt/(7 config files + register.php) - Register all 9 taxonomies in
inc/taxonomies/(9 config files + register.php) - Build
inc/meta-fields/class-meta-box-base.php+ 7 per-CPT meta handlers - Build basic FSE templates for all CPTs: single-.html, archive-.html
Phase 3: Term Landing Pages + Cluster Hub (Days 8-10)
- Build 7-section term landing page template structure
- Build
taxonomy-cluster.htmlhub template - Build all taxonomy-*.html templates
- Build 6 interlinking components in
inc/interlinking/ - Build template parts: term-hero, term-content, term-faq, child-term-grid, etc.
Phase 4: Landing Page System (Days 11-14)
- Build section repeater meta box for
landing_pageCPT - Build 15 section PHP templates in
inc/landing-pages/sections/ - Build section rendering engine (
inc/landing-pages/render.php) - Build 8 landing page presets (
inc/landing-pages/presets.php)
Phase 5: Blocks + Patterns (Days 15-19)
- Register 13 custom Gutenberg blocks with
block.json+ edit/save JS - Register 50+ block patterns across 8 categories
- Build
inc/breadcrumbs.phpfallback - Build
inc/walkers.phpfor nav menus - Build
inc/template-tags.phpfor template helper functions
Phase 6: Starters + WooCommerce (Days 20-23)
- Build 5 site-type starter template sets with demo content
- Build WooCommerce template overrides (archive-product, single-product, taxonomy-product_cat)
- Register
clustertaxonomy forproductpost type when WooCommerce active
Phase 7: Polish (Days 24-26)
- CSS optimization — ensure <35KB gzipped total
- JS optimization — ensure <15KB gzipped, vanilla ES6+
- Performance audit — meet FCP <1.0s, LCP <1.5s, TBT <50ms targets
- Accessibility review — ARIA labels, keyboard nav, focus states
- i18n pass — all strings via
igny8-themetext domain - Screenshot + readme
5. ACCEPTANCE CRITERIA
CPTs & Taxonomies
- All 7 CPTs registered with correct supports, rewrite rules, and templates
- All 9 taxonomies registered with correct hierarchy, post type assignments, and rewrites
- All CPT meta boxes render and save correctly
serviceCPT displays with all 10 meta fields in single-service templatelanding_pageCPT renders sections from repeater metaportfolioCPT shows results, gallery, before/afterfaqCPT renders as FAQ with optional schema
Term Landing Pages
- Every taxonomy term archive renders 7-section landing page
- Term hero shows name, description (from
_igny8_term_contentor fallback), post count - Child term grid, content grid, related terms, FAQ accordion all render
- Cluster cross-links appear when IGNY8 plugin connected
- Graceful fallback when plugin is not active
Cluster Hub
taxonomy-cluster.htmlrenders hub with pillar content, supporting grid, attribute nav- Dimensional navigation works (browse intersecting attributes)
- Related clusters cross-link correctly
Landing Pages
- All 15 section types render correctly
- All 8 presets pre-populate correct section order
- Section repeater meta box allows add/remove/reorder sections
- FAQ section generates FAQPage schema when
schema_enabledis true
Blocks & Patterns
- All 13 custom blocks registered and functional in block editor
- 50+ patterns available in pattern inserter, categorized correctly
- Dynamic blocks (service-grid, portfolio-showcase, doc-sidebar) query correct CPTs
Interlinking Components
- Related content shows
_igny8_related_linksdata or category fallback - Cluster navigation renders when plugin provides data
- Breadcrumbs use plugin or theme fallback
- All 6 template parts render without errors
Starters & WooCommerce
- All 5 starter templates import with demo content
- WooCommerce product templates render with cluster taxonomy
- Product category archives follow term landing structure
Performance & Quality
- CSS <35KB gzipped, JS <15KB gzipped
- PageSpeed Insights 95+ mobile
- FCP <1.0s, LCP <1.5s, TBT <50ms, CLS <0.05
- All strings translatable via
igny8-themetext domain - Keyboard navigation works on all interactive elements
- ARIA labels on all custom blocks and components
6. CLAUDE CODE INSTRUCTIONS
Context Requirements
Before starting implementation:
- Read 03A (plugin standalone) — understand
igny8()public API, module methods - Read 03B (plugin connected) — understand term meta keys, blueprint data structure
- Read 01A (SAG Data Foundation) — understand SAGCluster, SAGAttribute relationships
- Read 01B (SAG Blueprint Engine) — understand dimension/attribute hierarchy
Execution Order
Foundation → CPTs+Taxonomies → Term Landing+Cluster Hub → Landing Page System → Blocks+Patterns → Starters+WooCommerce → Polish
Critical Rules
- FSE block theme — use
templates/andparts/directories with HTML files, not classic PHP templates - theme.json — all design tokens defined here, not in CSS variables directly
- No jQuery on frontend — vanilla ES6+ only, jQuery allowed in admin only
- Conditional plugin features — always check
function_exists('igny8')before plugin API calls - All IDs are integers — IGNY8 content IDs, cluster IDs, term IDs are all integers (BigAutoField)
- Meta prefix — theme meta uses
_theme_prefix, plugin meta uses_igny8_prefix (read-only from theme) - Text domain —
igny8-theme(different from plugin'signy8domain) - Sanitize/escape — all meta saves via
sanitize_text_field()/wp_kses_post(), all output viaesc_html()/esc_attr()/esc_url() - Performance first — aim for zero JS on pages that don't need it, conditional CSS loading
File Creation Order
1. style.css + theme.json + functions.php (foundation)
2. inc/setup.php + inc/cleanup.php + inc/enqueue.php
3. inc/theme-bridge.php + inc/customizer.php
4. inc/cpt/register.php + 7 CPT files
5. inc/taxonomies/register.php + 9 taxonomy files
6. inc/meta-fields/class-meta-box-base.php + 7 meta handlers
7. templates/ (20+ FSE template files)
8. parts/ (20+ template part files)
9. inc/interlinking/ (6 component files)
10. inc/landing-pages/ (15 section templates + render engine + presets)
11. inc/blocks/ (13 block directories)
12. inc/patterns/ (50+ patterns)
13. woocommerce/ (template overrides)
14. templates/starters/ (5 starter sets)
15. inc/breadcrumbs.php + inc/walkers.php + inc/template-tags.php
Cross-References
| Doc | Relationship |
|---|---|
| 03A WP Plugin Standalone | Plugin API: igny8()->seo, igny8()->schema, igny8()->linking consumed by theme |
| 03B WP Plugin Connected | Connected mode provides: term meta, blueprint data, cluster navigation |
| 01A SAG Data Foundation | SAGCluster → cluster taxonomy, SAGAttribute → service_category/service_attribute/service_area |
| 01B SAG Blueprint Engine | Blueprint dimensions → theme taxonomies, blueprint clusters → hub pages |
| 02D Linker Internal | Link suggestions feed parts/related-content.html via plugin API |
| 02G Rich Schema SERP | Schema types feed Module 2 which theme triggers via igny8()->schema |
| 03D Toolkit Plugin | Toolkit complements theme (forms, performance, security) |