All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- add delegated campaign operation
- route Sendy campaigns through public abilities
- clear newsletter release lint blockers
- restore subscriber sync execution
- make delegated campaign replay durable
- harden delegated campaign contract
- rename extrachill_multisite_subscribe to extrachill_network_subscribe (#25)
- delete duplicate in-plugin Sendy client, hard-depend on DMB primitive
- consume DMB Sendy primitive; surface email-funnel metrics
- guard ability category registration against double-fire _doing_it_wrong notice
- dedupe Sendy logic + replace cred-scrape with options (closes #13, closes #14)
- consolidate newsletter email-shell builder, derive logo URL (closes #10)
- derive main URL from ec_get_site_url instead of hardcoded domain (refs #36)
- remove dangling Turnstile data-callback that broke implicit auto-render of sibling widgets
- render Turnstile widget on newsletter forms + send token on submit
- add newsletter-subscriber-stats ability
- Add unsubscribe guard to sync ability
- Add campaign management + subscriber status abilities
- Add Abilities API: subscribe, sync, campaign, and settings abilities with legacy shims
- Fix push-campaign output: cast campaign_id to string|null
- Add homeboy.json for release and deploy management
- Add defer strategy to newsletter script
- Add ec-surface-card class to recent newsletters sidebar widget
- eliminate ec-edge-shell from newsletter
- align newsletter homepage to theme edge contract
- Fixed ghost margin on single newsletter posts by removing theme layout override (.main-content, .sidebar) from newsletter.css, removed dead CSS selectors, and fixed CSS syntax errors in newsletter-forms.css
- Add sidebar styles filter registration for newsletter post type
- Consolidate theme integration into main plugin file
- Reverted dark mode email support to fix rendering issues in email clients
- Updated logo to 2026 version with absolute URL for consistent display
- Fixed analytics tracking with correct WordPress 6.9 Abilities API
- Fixed analytics tracking timing issue with Abilities API
- Add direct analytics tracking via Abilities API
- Added
extrachill_subscribe_to_list()low-level Sendy subscription helper that supports optional subscriber name and source tracking. - Added
extrachill_newsletter_subscribedaction to support subscription tracking integrations.
- Updated subscription workflow to accept optional subscriber name and source URL.
- Updated newsletter form REST payload to support batch-style
emailsarray and sendsource_url. - Updated newsletter schema breadcrumb items on the newsletter site to match the visible breadcrumb trail.
- Improved Sendy subscription result handling by returning explicit status codes for invalid, already subscribed, and general failure states.
- Added 'contact' integration context for newsletter subscriptions via contact forms
- Major overhaul of HTML email template with modern responsive design, dark mode support, and preheader text
- Replaced admin-ajax with REST API for "Push to Sendy" campaign management
- Refactored post meta integration to use
extrachill_post_meta_partsandextrachill_post_meta_published_prefixfilters for cleaner theme integration - Updated breadcrumb customization to include the post title for newsletter posts
- Improved frontend asset loading by including
restUrlin localizednewsletterParams - Refined newsletter inline form max-width on tablet/desktop displays
- Optimized YouTube thumbnail conversion in email templates with escaped URLs and improved regex
- Cleaned up redundant
newsletter_customize_post_metafunction from main plugin file - Removed unused AJAX handling logic in favor of REST API endpoints
- Improved error handling and feedback in "Push to Sendy" admin interface
- Refactored plugin loading to use
plugins_loadedhook with priority 20 for improved multisite dependency management - Improved activation/deactivation handling with transient-based rewrite rule flushing for better performance
- Removed unnecessary screen reader label from newsletter form template for cleaner markup
- Replaced hardcoded blog IDs and URLs with dynamic functions for improved multisite flexibility
- Updated
is_newsletter_site()and asset loading to useec_get_blog_id('newsletter') - Refactored breadcrumb and homepage hooks to use dynamic site URL functions
- Updated email templates to use
ec_get_site_url()for logo and footer links - Cleaned up newsletter forms CSS by removing unused festival wire, popup, and shortcode styles
- Simplified form button styling and removed redundant font-size declarations
- Added consistent button classes to form submit buttons
- Updated README to reference changelog file instead of inline version history
- Refined homepage newsletter form styling for better grid integration with reduced padding and compact layout
- Updated homepage form preset to use simpler "Subscribe" heading and shorter description
- Removed standalone newsletter grid display function (now handled by blog plugin)
- Modified admin asset loading to only enqueue on newsletter settings page
- Updated newsletter archive description for more concise messaging
- Improved visual consistency of newsletter forms across different display contexts
- Improved JavaScript error handling with better HTTP response validation and specific error messages
- Enhanced user feedback by always clearing email field and setting localStorage on successful subscription
- Refactored script localization to occur after enqueuing for better code organization
- Removed console error logging for cleaner production code
- Improved form submission reliability with consistent success handling
- Centralized asset loading by moving script enqueueing and localization to
inc/core/assets.php - Improved JavaScript error handling with validation for required REST nonce parameters
- Enhanced code organization for better maintainability of asset management
- Newsletter subscription form display after single post content on all sites
- Corrected all @since version tags throughout codebase to reflect accurate release history (0.1.0 initial, 0.1.2 current)
- Festival wire tip submission system completely removed (form template, display functions, CSS loading, documentation)
- Refactored JavaScript to use generic form handler with data attributes instead of specific form handlers
- Updated all subscription form templates to use
data-newsletter-formanddata-newsletter-contextattributes - Removed individual form IDs, action fields, and nonce fields from templates
- Changed homepage template from full page override to content-only inclusion via action hook
- Updated asset loading to remove festival wire CSS conditions
- Cleaned up documentation by removing festival wire references
- Improved form handling consistency across all subscription forms
- Enhanced maintainability of form JavaScript with single generic handler
- Refactored JavaScript from jQuery to vanilla JS for better performance and reduced dependencies
- Switched subscription forms from admin-ajax.php to REST API endpoints for improved security and maintainability
- Optimized asset loading with on-demand enqueuing strategy to reduce page load times
- Cleaned up CSS variables by removing fallback values for cleaner, more maintainable stylesheets
- Updated documentation for new architecture patterns and asset loading strategy
- Removed unused AJAX handlers file as functionality moved to REST API endpoints
- Improved error handling in subscription forms with better user feedback
- Enhanced CSS variable consistency across all stylesheet files
- Initial release with organized modular architecture
- Extracted newsletter functionality from ExtraChill theme
- Complete Sendy integration with centralized API configuration
- Multiple subscription forms (navigation, homepage, archive, content, footer)
- Template override system with plugin fallback
- Homepage-as-archive pattern for newsletter.extrachill.com
- Admin campaign management with push-to-Sendy functionality
- Integration system with declarative form registration
- Enhanced security with nonce verification and input sanitization
- Festival wire tip submission system with anti-spam protection
- Cloudflare Turnstile integration for spam prevention
- Rate limiting for tip submissions
- Centralized asset management with conditional loading
- Custom breadcrumb and post meta customization
- Sidebar widget for recent newsletters
- Responsive design and mobile optimization docs/CHANGELOG.md