Skip to content
This repository was archived by the owner on Jan 12, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 102 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,107 @@ All notable changes to the Moiraine WordPress theme will be documented in this f
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [3.0.0] - 2025-12-09

### Added - Portrait Image Support, New Patterns & Typography Enhancements

**New Patterns:**
- **post-featured-two-column** - Displays a single featured post with portrait image (2:3 aspect ratio) and title on left, large excerpt on right
- **blog-post-columns-portrait** - Three-column blog post grid with portrait-oriented featured images, perfect for blog archives and portfolio displays
- **hero-with-cta** - Centered business hero with primary CTA button and supporting description
- **hero-two-tone** - Split two-tone hero with dual CTA buttons and optional feature image
- **cta-newsletter** - Newsletter/lead capture CTA with headline, description, and full-width submit button
- **contact-info** - Modern contact info row with office hours, phone/email card, and address/location card
- **feature-grid** - Three-column feature/service grid with icon circles and supporting text
- **team-grid** - Three-column team grid with avatars, names, and job titles
- **testimonial-card** - Single testimonial card with quote and client attribution
- **client-reviews-orange** - Triple testimonial row on bold orange background with circular avatars
- **stats-showcase** - Two-column section combining promotional content with modern statistics display (4 stat cards in 2x2 grid)
- **stats-list** - Two-column section with promotional content and feature list (3 feature items with icons)

**Custom Image Sizes:**
- `moiraine-portrait-small` (380×570) - 2:3 aspect ratio for portrait blog/portfolio grids
- `moiraine-portrait-medium` (380×507) - 3:4 aspect ratio for medium portrait layouts
- `moiraine-portrait-large` (380×475) - 4:5 aspect ratio for larger portrait displays
- `moiraine-single-hero` (700×400) - 16:9-ish landscape for single post/page hero images

**CSS Typography & UI Enhancements:**
- **Partial underline effect** - Elegant 1/3 width centered underline for post titles (`.has-partial-underline`)
- **Large excerpt links** - Enhanced typography for post excerpt links (40px font size)
- **Larger hamburger menu** - Increased mobile menu icon size (32px) with thicker stroke for better visibility
- **New serif option** - Added Bitter variable font (regular + italic) to the typography palette for richer headline/body pairings

**Pattern Library:**
- Total active patterns: 38 (includes 3 restored header/footer patterns, 4 templates)
- Added portrait-oriented layouts from Versifier child theme
- Expanded hero, CTA, testimonial, and statistics options with new Moiraine-specific layouts
- Restored essential header/footer patterns for theme functionality

### Changed - Pattern Library Cleanup & Major Version Bump

**Pattern Removal for Theme Differentiation:**
- **What changed:** Removed 82 unused Ollie patterns from the theme entirely
- **Patterns remaining:** Reduced from 108 to 36 active patterns (67% reduction)
- **Restored:** 3 essential header/footer patterns (header-light-action-button, header-light-with-hamburger-menu, footer-light) needed for theme and child theme functionality
- **Why:** Moving away from Ollie patterns to create custom Moiraine-specific patterns for better theme differentiation and unique design identity
- **Impact:** Cleaner, more focused pattern library while maintaining all functionality

**Pattern Content Customization:**
- **What changed:** All 17 Ollie-based patterns now feature unique Moiraine-specific text content (not just "Ollie" → "Moiraine" rebranding)
- **Patterns updated:** 9 patterns received new unique content (card-details, feature-boxes-with-button, hero-call-to-action-buttons-light, hero-dark, hero-light, numbers, pricing-table, text-call-to-action-buttons, text-call-to-action)
- **Content strategy:** New messaging emphasizes modern WordPress block themes, Site Editor integration, professional patterns, and no-code approach
- **Why:** Establish distinct Moiraine identity with unique value proposition rather than generic Ollie content
- **Impact:** Patterns now communicate Moiraine's unique benefits: powerful flexibility with elegant design, professional WordPress sites in minutes, no coding required

**Active Patterns (38):**
- Headers & footers (3): header-light-action-button, header-light-with-hamburger-menu, footer-light
- Hero patterns (6): hero-text-image-and-logos, hero-call-to-action-buttons-light, hero-dark, hero-light, hero-two-tone, hero-with-cta
- Features & content (10): feature-boxes-with-button, feature-grid, numbers, card-details, faq, pricing-table, services-feature-cards, blog-post-columns, blog-post-columns-portrait, post-featured-two-column
- Call-to-actions & contact (5): text-call-to-action, text-call-to-action-buttons, cta-newsletter, contact-side-by-side, contact-info
- Statistics & showcases (2): stats-showcase, stats-list
- Testimonials & teams (8): testimonials-and-logos, testimonials-with-big-text, testimonial-highlight, testimonial-card, client-reviews-orange, single-testimonial, team-members, team-grid
- Templates (4): template-index-grid, template-page-centered, template-post-centered, post-loop-grid-default

**Removed Patterns (82):**
- Headers (5 of 8 patterns - kept 3 essential headers)
- Footers (5 of 6 patterns - kept 1 essential footer)
- Menus (12 patterns)
- Templates (13 of 17 patterns - kept 4 essential templates)
- Cards (13 patterns)
- Various other patterns (34 patterns)

**Technical Implementation:**
- Patterns completely removed from both GitHub repository and WordPress.org distribution
- Multisite compatibility: Verified all subsites (main, SPA, Auctor) work correctly with remaining 29 active patterns
- Documentation: Comprehensive cleanup documentation at `docs/moiraine/PATTERN-CLEANUP-DEC2025.md`

**Distribution Details:**
- **WordPress.org theme package:** 38 active patterns (includes 3 restored headers/footers, 4 templates, 2 new statistics patterns)
- **GitHub repository:** 38 active patterns (removed patterns no longer in repository)
- **Restored patterns:** header-light-action-button, header-light-with-hamburger-menu, footer-light restored from archive for theme functionality
- **Pattern history:** Original Ollie patterns available in Ollie theme repository for reference

**Future Direction:**
- Focus on developing unique Moiraine-specific patterns
- Goal: Establish distinct design identity separate from Ollie theme influence
- Approach: Create new custom patterns tailored to Moiraine's design philosophy

**Breaking Changes:**
- Pattern library restructured with 89 patterns removed
- New portrait image sizes require regeneration of thumbnails for existing images
- Custom CSS classes added that may affect child themes using similar naming

**Migration Notes:**
- Run thumbnail regeneration after update: WP-CLI `wp media regenerate` or use Regenerate Thumbnails plugin
- Portrait patterns use `moiraine-portrait-small` image size - ensure images are regenerated
- Custom CSS classes (`.has-partial-underline`, `.moiraine-hamburger-large`) now available for use in patterns

### Removed
- **82 Ollie Patterns:** Completely removed unused Ollie patterns from theme to establish unique Moiraine identity (patterns originally moved to archive, then removed entirely from repository)

### Restored (Post-Release)
- **3 Header/Footer Patterns:** Restored header-light-action-button, header-light-with-hamburger-menu, and footer-light from archive for essential theme and child theme (Versifier) functionality

## [2.8.0] - 2025-12-03

### Added - Translation Support (WordPress.org Requirement)
Expand Down Expand Up @@ -665,4 +766,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added Royal Blue Palette & Consulting Variation
- Added demo content including Contact Page
- Updated author information and branding
- Improved WordPress Standards compliance
- Improved WordPress Standards compliance
37 changes: 25 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

Moiraine is a modern WordPress block theme designed for the WordPress block editor and site editor. Create beautiful, fully-customizable websites with WordPress's built-in tools — no coding required.

Features **89+ professional patterns**, WooCommerce integration, modern development tooling, and blazing-fast performance with 100% scores across the board.
Features **38 professional patterns** (Moiraine-first heroes, CTAs, testimonials, statistics, blog layouts, plus essential headers/footers), WooCommerce integration, modern development tooling, and blazing-fast performance with 100% scores across the board.

## Table of Contents

Expand All @@ -29,16 +29,29 @@ Moiraine is built for modern WordPress features and requires WordPress 6.0 or la

## Key Features

### 🎨 **89+ Professional Patterns**
- **Hero Sections**: Eye-catching headers and banners
- **Feature Presentations**: Showcase your products and services
- **Call-to-Action Sections**: Drive conversions with beautiful CTAs
- **Card Layouts**: Flexible content presentation
- **Pricing Tables**: Professional pricing displays
- **Testimonials**: Build trust with customer feedback
- **Blog Post Layouts**: Beautiful post and archive designs including horizontal two-column featured posts
- **Menu Patterns**: 14 specialized navigation designs (cards, mobile, panels)
- **Template Patterns**: 14 complete page layout templates
### 🎨 **38 Professional Patterns**
Moiraine includes 38 focused patterns across headers/footers, hero, CTA/contact, testimonial, statistics, content layouts, and templates:

- **Headers & Footers (3)**: `header-light-action-button`, `header-light-with-hamburger-menu`, `footer-light`
- **Hero (6)**: `hero-text-image-and-logos`, `hero-call-to-action-buttons-light`, `hero-dark`, `hero-light`, `hero-two-tone`, `hero-with-cta`
- **Features & Content (10)**: `feature-boxes-with-button`, `feature-grid`, `numbers`, `card-details`, `faq`, `pricing-table`, `services-feature-cards`, `blog-post-columns`, `blog-post-columns-portrait`, `post-featured-two-column`
- **Call-to-Actions & Contact (5)**: `text-call-to-action`, `text-call-to-action-buttons`, `cta-newsletter`, `contact-side-by-side`, `contact-info`
- **Statistics & Showcases (2)**: `stats-showcase`, `stats-list`
- **Testimonials & Teams (8)**: `client-reviews-orange`, `testimonial-card`, `testimonial-highlight`, `testimonials-and-logos`, `testimonials-with-big-text`, `single-testimonial`, `team-members`, `team-grid`
- **Templates (4)**: `template-index-grid`, `template-page-centered`, `template-post-centered`, `post-loop-grid-default`
- All patterns use Moiraine-specific copy and styling; portrait blog layouts leverage the new portrait image sizes
- Several of these patterns were originally authored for our standalone plugin Callandor and brought into Moiraine: https://github.com/imagewize/callandor

**Pattern origins:**
- **Moiraine originals (19):** `hero-two-tone`, `hero-with-cta`, `cta-newsletter`, `contact-info`, `feature-grid`, `team-grid`, `testimonial-card`, `client-reviews-orange`, `blog-post-columns-portrait`, `post-featured-two-column`, `contact-side-by-side`, `services-feature-cards`, `stats-showcase`, `stats-list`, plus custom messaging/variants across `hero-text-image-and-logos`, `hero-call-to-action-buttons-light`, `hero-dark`, `hero-light`, `feature-boxes-with-button`
- **From Ollie foundation (15, fully reworked copy/styles):** `blog-post-columns`, `card-details`, `faq`, `numbers`, `pricing-table`, `text-call-to-action`, `text-call-to-action-buttons`, `testimonials-with-big-text`, `testimonials-and-logos`, `testimonial-highlight`, `single-testimonial`, `team-members`
- **Restored Ollie patterns (4):** `header-light-action-button`, `header-light-with-hamburger-menu`, `footer-light` (essential for theme functionality), plus 4 template patterns

**Removed Patterns:**
- 82 Ollie patterns removed from the theme (kept 3 essential headers/footers)
- Removed from both GitHub repository and WordPress.org distribution
- Original Ollie patterns available in the Ollie theme repository for reference
- See [CHANGELOG.md](CHANGELOG.md#300---2025-12-09) for complete details

### 🧩 **Block Extensions System** (NEW in 2.3.0)
- **Post Excerpt Linking**: Extend core post-excerpt blocks with customizable link functionality
Expand All @@ -55,7 +68,7 @@ Custom blocks like Carousel and Menu Designer are available in the companion [Mo
- E-commerce optimized patterns and styles

### 🎯 **Typography & Design**
- 7 Google Fonts with responsive scaling
- Expanded typography set (Mona Sans, Bodoni Moda, new Bitter serif) with responsive scaling
- Multiple typography presets and style variations
- Global styles system via theme.json
- Full Site Editing compatibility
Expand Down
Binary file not shown.
Binary file not shown.
17 changes: 17 additions & 0 deletions functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,23 @@ function moiraine_template_part_areas( array $areas ) {
}
add_filter( 'default_wp_template_part_areas', __NAMESPACE__ . '\moiraine_template_part_areas' );

/**
* Add custom image sizes for portrait-oriented layouts.
*/
function moiraine_custom_image_sizes() {
// Portrait image sizes for grid/archive layouts.
// Aspect ratios: 0.67 (2:3), 0.75 (3:4), 0.80 (4:5).
add_image_size( 'moiraine-portrait-small', 380, 570, true ); // ~0.67 aspect ratio.
add_image_size( 'moiraine-portrait-medium', 380, 507, true ); // ~0.75 aspect ratio.
add_image_size( 'moiraine-portrait-large', 380, 475, true ); // ~0.80 aspect ratio.

// Landscape hero image for single post/page templates with sidebar.
// Optimized for 66.66% content column width (~700px).
add_image_size( 'moiraine-single-hero', 700, 400, true ); // 1.75 aspect ratio (16:9-ish).
}
add_action( 'after_setup_theme', __NAMESPACE__ . '\moiraine_custom_image_sizes' );


/**
* Include block extensions for enhanced functionality.
*/
Expand Down
34 changes: 0 additions & 34 deletions patterns/author-box.php

This file was deleted.

36 changes: 36 additions & 0 deletions patterns/blog-post-columns-portrait.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?php
/**
* Title: Blog Post Columns (Portrait)
* Slug: moiraine/blog-post-columns-portrait
* Description: Three-column blog post grid with portrait-oriented featured images
* Categories: moiraine/posts
* Keywords: blog, posts, query, pages, portrait, grid
* Viewport Width: 1500
* Block Types:
* Post Types:
* Inserter: true
*/
?>
<!-- wp:group {"metadata":{"name":"Blog Post Columns (Portrait)","categories":["moiraine/posts"],"patternName":"moiraine/blog-post-columns-portrait"},"align":"full","style":{"spacing":{"padding":{"top":"var:preset|spacing|x-large","bottom":"var:preset|spacing|x-large","right":"var:preset|spacing|medium","left":"var:preset|spacing|medium"},"margin":{"top":"0px","bottom":"0px"},"blockGap":"var:preset|spacing|x-large"}},"backgroundColor":"base","layout":{"inherit":true,"type":"constrained"}} -->
<div class="wp-block-group alignfull has-base-background-color has-background" style="margin-top:0px;margin-bottom:0px;padding-top:var(--wp--preset--spacing--x-large);padding-right:var(--wp--preset--spacing--medium);padding-bottom:var(--wp--preset--spacing--x-large);padding-left:var(--wp--preset--spacing--medium)"><!-- wp:query {"queryId":1,"query":{"perPage":3,"pages":"2","offset":0,"postType":"post","order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"exclude","inherit":false},"align":"wide"} -->
<div class="wp-block-query alignwide"><!-- wp:post-template {"align":"wide","style":{"spacing":{"blockGap":"var:preset|spacing|large"}},"layout":{"type":"grid","minimumColumnWidth":"20rem"}} -->
<!-- wp:group {"style":{"spacing":{"blockGap":"var:preset|spacing|small","padding":{"top":"var:preset|spacing|medium","right":"var:preset|spacing|medium","bottom":"var:preset|spacing|medium","left":"var:preset|spacing|medium"}},"border":{"radius":"5px"}},"backgroundColor":"base","layout":{"type":"flex","orientation":"vertical","verticalAlignment":"space-between"}} -->
<div class="wp-block-group has-base-background-color has-background" style="border-radius:5px;padding-top:var(--wp--preset--spacing--medium);padding-right:var(--wp--preset--spacing--medium);padding-bottom:var(--wp--preset--spacing--medium);padding-left:var(--wp--preset--spacing--medium)"><!-- wp:group {"metadata":{"name":"Post Content"},"style":{"spacing":{"blockGap":"var:preset|spacing|small"}},"layout":{"type":"constrained"}} -->
<div class="wp-block-group"><!-- wp:post-featured-image {"isLink":true,"aspectRatio":"2/3","height":"","sizeSlug":"moiraine-portrait-small","style":{"border":{"radius":"5px"}}} /-->

<!-- wp:group {"style":{"spacing":{"blockGap":"5px","margin":{"top":"1.5rem"}},"elements":{"link":{"color":{"text":"var:preset|color|secondary"}}}},"textColor":"secondary","fontSize":"x-small","layout":{"type":"flex","flexWrap":"wrap","justifyContent":"left","verticalAlignment":"center"}} -->
<div class="wp-block-group has-secondary-color has-text-color has-link-color has-x-small-font-size" style="margin-top:1.5rem"><!-- wp:paragraph -->
<p>·</p>
<!-- /wp:paragraph -->

<!-- wp:post-date /--></div>
<!-- /wp:group -->

<!-- wp:group {"style":{"spacing":{"blockGap":"var:preset|spacing|small"}},"layout":{"type":"flex","orientation":"vertical","justifyContent":"left"}} -->
<div class="wp-block-group"><!-- wp:post-title {"isLink":true,"style":{"typography":{"textDecoration":"none","fontStyle":"normal","fontWeight":"600","lineHeight":"1.3"},"border":{"bottom":{"width":"0px"}}},"fontSize":"medium","className":"has-partial-underline has-partial-underline-center has-partial-underline-third"} /--></div>
<!-- /wp:group --></div>
<!-- /wp:group --></div>
<!-- /wp:group -->
<!-- /wp:post-template --></div>
<!-- /wp:query --></div>
<!-- /wp:group -->
Loading
Loading