v0.18.1 - Work In Progress

🚀 * New Feature - Layout Builder v2 for club (team) pages - rebuild the club page from drag-and-drop blocks (team header, season record, standings, results, schedule, roster, player stats, rankings, scorelines, and the form trends matrix). Each block has its own season and competition filter pills that refetch in place without reloading the page, and pages ship a richer default SEO title and description plus new dynamic variables (club abbreviation, founded year, address, website domain)
🟢 * Add - The Season Record block on the club (team) layout now combines the win% / W-D-L summary with a full stats table - goals, conceded, goal difference, clean sheets, cards, corners, fouls, offsides, shots, plus any custom match stats you track. Pick and reorder which stats to show, and the block's season + competition filters drive both the summary and the table.
🟢 * Add - The Player Stats block on the club (team) layout is now a sortable stats table (with frozen Player column and paging) plus a separate goalkeeper table - pick and reorder the columns, add any custom match stats you track, and player rating shows as a colored pill
🟢 * Add - Per-match averages in the Stats::Players::Custom shortcode - append ":avg" (average per game) or ":avg_90" (average per 90 minutes) to any column, e.g. columns="19:avg,22:avg_90,goals". Works with simple, calculated, formula, and core stats; totals stay the default
🟢 * Add - The "Color background" stat option now also colors values in the Player Stats Panel and Stat::Players shortcodes (including the "Show full list" popup). The classic Player rating display keeps its current colors
🟢 * Add - Club Form Trends shortcode - an aligned last-N matrix with W/D/L match dots and selectable rows (scored, clean sheet, conceded 2+, over 1.5/2.5/3.5, both teams scored, won to nil, leading at HT, comeback). ET matches count the 90-minute score for goal rows; halftime rows hide when no HT data exists. Optional competition scope
🟢 * Update - Unified W/D/L form badge styling across standings, match lists, and club stats - soft colored backgrounds with colored letters instead of solid blocks (the match scoreboard keeps solid colors for contrast). Customizer color overrides still apply
🟠 * Fix - Formula stats no longer show blank values in Stat::Players and Stats::Players::Custom shortcodes when a referenced stat has no tracked data or a division hits zero - those rows now count as 0
🟠 * Fix - The Stat::Players "Show full list" popup now respects the stat column's configured decimal places, matching the shortcode display
🟠 * Fix - Formula stats that reference a multi-part stat (like All Cards or a calculated sum) now apply operators to the whole referenced value instead of only its last component - previously a formula like "All Cards x 2" doubled only the red cards
🟢 * Add - Public REST API - assign match officials (referee, assistants, fourth official) when saving a match through /matches/{id}/save; the match read endpoint now returns these fields too
🟠 * Fix - Public REST API - the away team captain and both coaches now save when posting to /matches/{id}/lineups (captain_away and coach_home/coach_away were silently ignored)
🟠 * Fix - Public REST API - club captains can now set their own team's captain through the full match save endpoint
🟡 * Performance - Faster API imports for predictions, odds, lineups, and live scores by no longer pausing to retry when the API returns an empty "no data" response
🟡 * Performance - Faster scheduled kickoff sync from API-Football - kickoff, stadium, and referee changes now save in a single update per match instead of up to three
🟠 * Fix - Coach and stadium photos no longer duplicate on repeated API imports when an image optimizer plugin (Elementor Image Optimizer, WebP/CDN URL rewriters) blocks the uploaded file URL
🟠 * Fix - Live match substitutions no longer show the player coming on and the player going off swapped for API-imported live matches in some competitions (live now matches the finished match)
🟠 * Fix - Single live match pages no longer reload in an infinite loop on sites with full-page edge caching (Cloudflare, Varnish) - when a reload keeps returning a stale cached page, the live or finished layout is now refreshed in place via the REST API instead
🟠 * Fix - Accessibility improvements for public output - better screen reader, accessibility-tree, and color-contrast support

Layout Builder v2

Image 12034

Image 12041

Image 12042

Season Record block

Image 12035

Image 12036

Image 12037

Image 12038

Image 12039

Image 12040