chore: cascade main -> dev [skip ci] #32

Merged
jmiller merged 16 commits from main into dev 2026-05-24 04:31:22 +00:00
Owner

Routine merge-down from main to dev.

Routine merge-down from main to dev.
jmiller added 1 commit 2026-05-24 04:25:16 +00:00
jmiller added 15 commits 2026-05-24 04:31:14 +00:00
- Add seo_title, meta_description, robots, canonical_url columns
- SQL migration for upgrades (01.01.00.sql) + updated install schema
- New "SEO Meta Tags" fieldset in article/menu editor with:
  - SEO title (70 char max, overrides <title>)
  - Meta description (200 char max)
  - Robots directive (noindex, nofollow, nosnippet, etc.)
  - Canonical URL override
- System plugin applies SEO tags in onBeforeCompileHead before OG tags
- SEO audit column in admin tag list (missing desc, title too long, noindex)
- Content plugin saves/loads all SEO fields alongside OG data

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- New ImageHelper class with resize(), validate(), cleanup() methods
- Center-crop algorithm maintains aspect ratio to target dimensions
- GD-based processing, supports JPEG/PNG/GIF/WebP input, outputs JPEG
- Generated images cached in images/mokoog/generated/ with hash naming
- Skips resize if image already at or below target dimensions
- Skips regeneration if cached version is newer than source
- validate() checks minimum 200x200px (Facebook/WhatsApp requirement)
- cleanup() removes generated images when OG records are deleted
- Auto-resize toggle in system plugin advanced settings (default: on)
- Integrated into resolveImageUrl() in the system plugin

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- BatchController with count() and process() AJAX endpoints
- Chunked processing (50 articles per request) to avoid PHP timeouts
- LEFT JOIN query to find articles without existing OG records
- Auto-extracts og_title from article title, og_description from
  metadesc or introtext (160 char), og_image from article images JSON
- Also populates meta_description from article metadesc
- Progress bar UI in admin tag list with real-time updates
- "Batch Generate" toolbar button in Tags view
- Auto-reloads page after completion

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Content plugin now hooks com_categories.categorycom_content forms
- Category OG data stored as content_type 'com_content.category'
- System plugin detects category views and merges category OG as fallback
- Article image fallback chain: article image → category image → default
- New loadOgDataByType() helper for flexible type lookups

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Telegram channel meta tag config and output (telegram:channel)
- Image validation via ImageHelper::validate() already covers
  WhatsApp minimum requirements (300x200px)
- Auto-resize (from #2) ensures images meet all platform specs

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- ContentTypeInterface with canHandle(), getTitle(), getDescription(), getImage()
- VirtueMartAdapter for product pages (com_virtuemart)
- K2Adapter for K2 items (com_k2)
- HikaShopAdapter for HikaShop products (com_hikashop)

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Debug column in admin tag list with FB, LinkedIn, Google buttons
- Links open platform debugger tools in new tab with page URL
- Facebook Sharing Debugger, LinkedIn Post Inspector, Google Rich Results

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- JsonLdBuilder helper with Article, WebPage, BreadcrumbList, Organization
- Article schema includes headline, author, datePublished, dateModified, image
- BreadcrumbList built from Joomla's pathway
- Toggle JSON-LD and breadcrumbs independently in plugin settings
- Output via addCustomTag() in onBeforeCompileHead

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add language column to #__mokoog_tags (default * for all languages)
- Updated unique key to include language
- SQL migration 01.02.00 for upgrades
- og:locale output from current Joomla language (en-GB to en_GB)
- Language-aware OG data loading: exact match preferred over wildcard

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ImageGenerator class renders article title onto a template background:
- Center-crop template to 1200x630px
- Semi-transparent dark overlay band for text readability
- TTF font rendering with word wrapping (max 3 lines)
- Cached output in images/mokoog/generated/overlay_*.jpg
- Configurable font size, color, quality

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ImportExportController with export() and import() actions:
- Export: CSV with all OG + SEO fields, joined with article titles
- Import: Upload CSV, match on content_type + content_id
- Upsert logic: creates new or updates existing records
- Reports created/updated/skipped counts
- Toolbar buttons ready for integration

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Facebook and Twitter/X card previews update in real-time
- Renders below the OG fieldset in article/menu editors
- Reads og_title, og_description, og_image with fallback to
  article title and meta description
- CSS mockups of each platform's card layout
- Registered via joomla.asset.json Web Asset Manager
- Safe DOM construction (no innerHTML with user data)
- MutationObserver watches media field for image changes

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New sub-extension: plg_webservices_mokoog
- Registers REST API routes via onBeforeApiRoute
- CRUD endpoints at /api/index.php/v1/mokoog/tags
- Lookup endpoint at /api/index.php/v1/mokoog/lookup/:type/:id
- SubscriberInterface pattern with DI container

Component API layer (com_mokoog/api/):
- TagsController extending ApiController for CRUD operations
- JsonapiView with whitelisted fields for JSON:API output
- TagModel (AdminModel) for single-item operations

Package updates:
- pkg_mokoog.xml includes plg_webservices_mokoog
- Install script auto-enables webservices plugin
- Component manifest declares api/ directory

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
fix: production readiness improvements for admin panel and installer
Joomla: Repo Health / Access control (push) Successful in 2s
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 4s
Joomla: Repo Health / Release configuration (push) Has been cancelled
Joomla: Repo Health / Scripts governance (push) Has been cancelled
Joomla: Repo Health / Repository health (push) Has been cancelled
0509980b50
Add search/filter tools to tags list view, fix API content type naming,
build proper frontend URLs for social debugger links, and auto-enable
the content plugin on package install.

Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
jmiller merged commit 11ad5be25e into dev 2026-05-24 04:31:22 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MokoConsulting/MokoJoomOpenGraph#32