# 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 data - `igny8()->schema->get_json_ld($post_id)` — schema markup - `igny8()->linking->get_link_suggestions($post_id)` — internal link suggestions - `igny8()->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_sections` repeater 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 registers `cluster` for `product` post 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`: 1. `pricing-table` — configurable pricing plans with toggle 2. `feature-grid` — icon + title + description grid 3. `testimonial-slider` — carousel from `testimonial` CPT 4. `stats-counter` — animated number counters 5. `team-grid` — from `team_member` CPT 6. `faq-accordion` — collapsible FAQ with optional FAQPage schema 7. `cta-banner` — full-width call-to-action band 8. `logo-carousel` — partner/client logo showcase 9. `comparison-table` — feature comparison matrix 10. `icon-box` — icon + heading + text block 11. `service-grid` — from `service` CPT (dynamic) 12. `portfolio-showcase` — from `portfolio` CPT (dynamic) 13. `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 `cluster` taxonomy for `product` post 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)** 1. Create `style.css` header, `theme.json` design tokens, `functions.php` bootstrap 2. Build `inc/setup.php` — theme supports, menus, sidebars, image sizes 3. Build `inc/cleanup.php` — remove WP bloat (emojis, embed scripts, etc.) 4. Build `inc/enqueue.php` — conditional CSS/JS loading 5. Build `inc/theme-bridge.php` — plugin detection + API wrapper 6. Build `inc/customizer.php` — logo, colors, fonts, layout options **Phase 2: CPTs + Taxonomies (Days 4-7)** 1. Register all 7 CPTs in `inc/cpt/` (7 config files + register.php) 2. Register all 9 taxonomies in `inc/taxonomies/` (9 config files + register.php) 3. Build `inc/meta-fields/class-meta-box-base.php` + 7 per-CPT meta handlers 4. Build basic FSE templates for all CPTs: single-*.html, archive-*.html **Phase 3: Term Landing Pages + Cluster Hub (Days 8-10)** 1. Build 7-section term landing page template structure 2. Build `taxonomy-cluster.html` hub template 3. Build all taxonomy-*.html templates 4. Build 6 interlinking components in `inc/interlinking/` 5. Build template parts: term-hero, term-content, term-faq, child-term-grid, etc. **Phase 4: Landing Page System (Days 11-14)** 1. Build section repeater meta box for `landing_page` CPT 2. Build 15 section PHP templates in `inc/landing-pages/sections/` 3. Build section rendering engine (`inc/landing-pages/render.php`) 4. Build 8 landing page presets (`inc/landing-pages/presets.php`) **Phase 5: Blocks + Patterns (Days 15-19)** 1. Register 13 custom Gutenberg blocks with `block.json` + edit/save JS 2. Register 50+ block patterns across 8 categories 3. Build `inc/breadcrumbs.php` fallback 4. Build `inc/walkers.php` for nav menus 5. Build `inc/template-tags.php` for template helper functions **Phase 6: Starters + WooCommerce (Days 20-23)** 1. Build 5 site-type starter template sets with demo content 2. Build WooCommerce template overrides (archive-product, single-product, taxonomy-product_cat) 3. Register `cluster` taxonomy for `product` post type when WooCommerce active **Phase 7: Polish (Days 24-26)** 1. CSS optimization — ensure <35KB gzipped total 2. JS optimization — ensure <15KB gzipped, vanilla ES6+ 3. Performance audit — meet FCP <1.0s, LCP <1.5s, TBT <50ms targets 4. Accessibility review — ARIA labels, keyboard nav, focus states 5. i18n pass — all strings via `igny8-theme` text domain 6. 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 - [ ] `service` CPT displays with all 10 meta fields in single-service template - [ ] `landing_page` CPT renders sections from repeater meta - [ ] `portfolio` CPT shows results, gallery, before/after - [ ] `faq` CPT 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_content` or 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.html` renders 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_enabled` is 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_links` data 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-theme` text 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: 1. Read 03A (plugin standalone) — understand `igny8()` public API, module methods 2. Read 03B (plugin connected) — understand term meta keys, blueprint data structure 3. Read 01A (SAG Data Foundation) — understand SAGCluster, SAGAttribute relationships 4. 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 1. **FSE block theme** — use `templates/` and `parts/` directories with HTML files, not classic PHP templates 2. **theme.json** — all design tokens defined here, not in CSS variables directly 3. **No jQuery on frontend** — vanilla ES6+ only, jQuery allowed in admin only 4. **Conditional plugin features** — always check `function_exists('igny8')` before plugin API calls 5. **All IDs are integers** — IGNY8 content IDs, cluster IDs, term IDs are all integers (BigAutoField) 6. **Meta prefix** — theme meta uses `_theme_` prefix, plugin meta uses `_igny8_` prefix (read-only from theme) 7. **Text domain** — `igny8-theme` (different from plugin's `igny8` domain) 8. **Sanitize/escape** — all meta saves via `sanitize_text_field()` / `wp_kses_post()`, all output via `esc_html()` / `esc_attr()` / `esc_url()` 9. **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) |