chore: remove local issue files (now tracked in Gitea)
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 4s

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jonathan Miller
2026-05-23 17:30:50 -05:00
parent c9fe15c90c
commit 27bb22e8e2
12 changed files with 0 additions and 323 deletions
-28
View File
@@ -1,28 +0,0 @@
---
title: "[FEATURE] Batch Processing — Generate OG Tags for All Existing Articles"
labels: "enhancement, priority: high"
milestone: "v01.01"
---
## Feature Description
Add batch processing capability to generate or regenerate Open Graph tags for all existing articles in bulk, rather than requiring manual editing of each article.
## Problem or Use Case
When MokoOpenGraph is installed on an existing site with hundreds of articles, each article needs OG tags. Manually editing each one is impractical. Tagz Pro offers this as a premium feature — we should include it in the base package.
## Proposed Solution
Add a "Batch Generate" toolbar button to the com_mokoog admin view that:
1. Scans all published articles in `#__content`
2. For each article without existing OG data in `#__mokoog_tags`, auto-generates:
- `og_title` from article title
- `og_description` from meta description or intro text (first 160 chars)
- `og_image` from full-text image or intro image
3. Shows a progress bar during processing
4. Reports how many records were created/skipped
## Implementation Details
- New `Controller/BatchController.php` with `generate()` action
- New `Model/BatchModel.php` for bulk operations
- AJAX endpoint for progress reporting (avoid PHP timeout on large sites)
- Process in chunks of 50 articles per request
- Add batch button to `View/Tags/HtmlView.php` toolbar
-25
View File
@@ -1,25 +0,0 @@
---
title: "[FEATURE] Automatic OG Image Resizing and Optimization"
labels: "enhancement, priority: high"
milestone: "v01.01"
---
## Feature Description
Automatically resize and optimize images to meet Open Graph recommended dimensions (1200x630px) when an image is selected as the OG image.
## Problem or Use Case
Social platforms have specific image size requirements for optimal sharing previews. Facebook recommends 1200x630px, Twitter recommends 1200x628px. Most article images are not this exact size, leading to cropped or poorly-displayed sharing previews.
## Proposed Solution
When an OG image is saved (either manually or auto-generated):
1. Check if the image meets minimum dimensions (600x315px)
2. Generate an optimized copy at 1200x630px in `images/mokoog/generated/`
3. Use the resized copy for the OG meta tag, keep the original untouched
4. Support configurable target dimensions in plugin settings
5. Use GD or Imagick (whatever Joomla has available)
## Implementation Details
- New `Helper/ImageHelper.php` in `plg_system_mokoog` for image processing
- Store generated image path in `#__mokoog_tags.og_image_generated` column
- Add plugin config options: target width, target height, quality (JPEG), fit mode (crop/contain)
- Clean up generated images when OG record is deleted
-26
View File
@@ -1,26 +0,0 @@
---
title: "[FEATURE] Live Social Sharing Preview in Article Editor"
labels: "enhancement, priority: medium"
milestone: "v01.02"
---
## Feature Description
Show a real-time preview of how the article will appear when shared on Facebook, Twitter/X, and LinkedIn directly in the article editor, alongside the OG fields.
## Problem or Use Case
Content editors need to see the visual result of their OG configuration before publishing. Currently they must save, share the URL to a social platform debugger, and iterate. A live preview eliminates this friction.
## Proposed Solution
Add a JavaScript-powered preview panel in the "Open Graph / Social Sharing" fieldset that renders:
1. **Facebook preview** — Card with image, title, description, domain
2. **Twitter/X preview** — Summary with Large Image card layout
3. **LinkedIn preview** — Card with image, title, description, source
The preview should update in real-time as the user types in the OG fields, with fallback to the article title/description/image when OG fields are empty.
## Implementation Details
- New `media/plg_content_mokoog/js/preview.js` with Web Component or vanilla JS
- CSS mockups of each platform's card layout
- Listen to `input` events on the OG form fields
- Register via `joomla.asset.json` Web Asset Manager
- Integrate as a `<div>` below the OG fieldset in `forms/mokoog.xml` via a custom field type
-22
View File
@@ -1,22 +0,0 @@
---
title: "[FEATURE] Category-Level OG Tag Support"
labels: "enhancement, priority: medium"
milestone: "v01.01"
---
## Feature Description
Support custom Open Graph tags for Joomla article categories, so category listing pages have proper social sharing metadata.
## Problem or Use Case
When someone shares a category URL (e.g., `/news`), the OG tags fall back to site defaults because there's no per-category configuration. Category pages are high-traffic landing pages that deserve custom social sharing metadata.
## Proposed Solution
1. Add OG fields to the category edit form (via `onContentPrepareForm` for `com_categories.categorycom_content`)
2. In the system plugin, detect when the current page is a category view and load category-specific OG data
3. Allow category images to be used as OG fallback for articles within that category
## Implementation Details
- Extend `plg_content_mokoog` to hook `com_categories.categorycom_content` form
- Extend `plg_system_mokoog` to detect `option=com_content&view=category&id=X`
- `content_type` value: `com_content.category`
- Add category image fallback chain: Article image → Category OG image → Category image → Site default
-34
View File
@@ -1,34 +0,0 @@
---
title: "[FEATURE] Third-Party Extension Support (VirtueMart, K2, EasyBlog, etc.)"
labels: "enhancement, priority: medium"
milestone: "v01.02"
---
## Feature Description
Support Open Graph tags for popular third-party Joomla extensions, comparable to Tagz which supports VirtueMart, K2, EasyBlog, RSBlog, HikaShop, JoomShopping, RSEvents Pro, JEvents, and more.
## Problem or Use Case
Many Joomla sites use third-party content components. Without support, product pages, event pages, and custom content types won't have proper OG tags.
## Proposed Solution
Create a plugin architecture that allows content type adapters. Each adapter knows how to:
1. Detect its component's URLs (via `option` and `view`)
2. Extract title, description, and image from its database tables
3. Register its form for OG field injection
Priority adapters (Phase 1):
- **VirtueMart** — Product pages (`com_virtuemart`, view `productdetails`)
- **K2** — Items (`com_k2`, view `item`)
- **HikaShop** — Products (`com_hikashop`, view `product`)
Phase 2:
- **EasyBlog** — Posts
- **RSEvents Pro** — Events
- **JEvents** — Events
- **Phoca Cart** — Products
## Implementation Details
- New `ContentTypeInterface` in com_mokoog with methods: `canHandle()`, `getTitle()`, `getDescription()`, `getImage()`
- Each adapter is a separate class under `src/ContentType/`
- System plugin checks registered adapters in order until one matches
- Adapters auto-register via `services/provider.php` or a discovery mechanism
-25
View File
@@ -1,25 +0,0 @@
---
title: "[FEATURE] Structured Data / JSON-LD Output"
labels: "enhancement, priority: medium"
milestone: "v01.02"
---
## Feature Description
In addition to Open Graph meta tags, generate JSON-LD structured data (`<script type="application/ld+json">`) for improved SEO and rich search results.
## Problem or Use Case
Open Graph is for social sharing, but Google and other search engines primarily use JSON-LD structured data for rich results (breadcrumbs, article info, FAQ, product reviews, etc.). A comprehensive SEO extension should provide both.
## Proposed Solution
Add optional JSON-LD output alongside OG tags:
1. **Article** schema — `@type: Article` with headline, datePublished, author, image
2. **WebPage** schema — For non-article pages
3. **BreadcrumbList** schema — Based on Joomla menu hierarchy
4. **Organization** schema — Site-wide, configured in plugin settings
5. **Product** schema — When VirtueMart/HikaShop adapter is active
## Implementation Details
- New `JsonLdBuilder` helper class in `plg_system_mokoog`
- Output in `onBeforeCompileHead` alongside OG tags
- Plugin configuration toggle: Enable/disable JSON-LD per schema type
- Validate output against Google's Structured Data Testing Tool format
-27
View File
@@ -1,27 +0,0 @@
---
title: "[FEATURE] OG Image Text Overlay Generator"
labels: "enhancement, priority: low"
milestone: "v02.00"
---
## Feature Description
Generate custom social sharing images by overlaying the article title and branding onto a template image, creating unique, branded share graphics for each article.
## Problem or Use Case
Many sites want each shared article to have a unique, branded preview image with the article title overlaid — similar to how dev.to, Hashnode, and other platforms auto-generate share images. This eliminates the need for manual graphic design per article.
## Proposed Solution
1. Configure a template image (brand background) in plugin settings
2. When an article is saved without a custom OG image, auto-generate one:
- Start with the template image (1200x630px)
- Overlay the article title using GD/Imagick text rendering
- Optionally add category name, author, or logo
3. Save the generated image to `images/mokoog/generated/`
4. Allow per-article override to disable auto-generation
## Implementation Details
- New `ImageGenerator` class using GD or Imagick
- Font configuration (TTF/OTF font file, size, color, position)
- Text wrapping and truncation for long titles
- Template image upload in plugin settings
- Consider caching/regeneration on article title change
-28
View File
@@ -1,28 +0,0 @@
---
title: "[FEATURE] SEO Meta Description and Title Tag Management"
labels: "enhancement, priority: high"
milestone: "v01.01"
---
## Feature Description
Extend beyond Open Graph to also manage standard SEO meta tags: `<meta name="description">`, `<title>`, `<meta name="robots">`, and canonical URLs.
## Problem or Use Case
Tagz focuses on OG tags, but site owners also need control over basic SEO tags that Joomla's built-in fields don't fully cover (e.g., character limit enforcement, preview, robots directives per page). Combining OG and SEO in one extension reduces plugin count and provides a unified editing experience.
## Proposed Solution
Add to the article/menu editor fieldset:
1. **SEO Title** — Custom `<title>` tag override with character counter (50-60 chars recommended)
2. **Meta Description** — With character counter (150-160 chars recommended) and length indicator
3. **Robots Directive** — Per-page `noindex`, `nofollow`, `nosnippet` toggles
4. **Canonical URL** — Override the canonical URL for this page
5. **Focus Keyword** — Informational field for content editors
Add to the admin component:
- SEO audit column showing which articles are missing descriptions or have too-long titles
## Implementation Details
- Extend `forms/mokoog.xml` with new `seo` fieldset
- Extend `#__mokoog_tags` with columns: `seo_title`, `meta_description`, `robots`, `canonical_url`
- System plugin sets meta tags in `onBeforeCompileHead` (before OG tags)
- Add database migration `sql/updates/mysql/01.01.00.sql`
-27
View File
@@ -1,27 +0,0 @@
---
title: "[FEATURE] Social Platform Debugger Quick Links"
labels: "enhancement, priority: low"
milestone: "v01.02"
---
## Feature Description
Add quick-access buttons in the admin tag manager and article editor that open the current page in each social platform's debugger/preview tool.
## Problem or Use Case
After configuring OG tags, editors need to verify them using platform-specific debugger tools. Finding and manually entering URLs into each debugger is tedious.
## Proposed Solution
Add buttons/links that open in a new tab:
1. **Facebook Sharing Debugger**`https://developers.facebook.com/tools/debug/?q={URL}`
2. **Twitter/X Card Validator**`https://cards-dev.twitter.com/validator` (URL pre-filled if possible)
3. **LinkedIn Post Inspector**`https://www.linkedin.com/post-inspector/inspect/{URL}`
4. **Google Rich Results Test**`https://search.google.com/test/rich-results?url={URL}`
Display these in:
- The admin tag list view (per-row action)
- The article editor OG fieldset (after the preview panel)
## Implementation Details
- URL resolution: build the frontend URL for the content item using `Route::link('site', ...)`
- Simple anchor tags with `target="_blank"` — no backend API integration needed
- Add as a custom field type or layout override in `forms/mokoog.xml`
-27
View File
@@ -1,27 +0,0 @@
---
title: "[FEATURE] WhatsApp and Telegram Link Preview Optimization"
labels: "enhancement, priority: medium"
milestone: "v01.01"
---
## Feature Description
Ensure OG tags are optimized for WhatsApp and Telegram link preview rendering, which have specific requirements beyond standard Open Graph.
## Problem or Use Case
WhatsApp and Telegram are major sharing channels. While they read OG tags, they have quirks:
- WhatsApp caches aggressively and has specific image size preferences (300x200px minimum)
- Telegram supports its own `<meta name="telegram:channel">` tag
- Both prefer JPEG images under 300KB for fast loading
## Proposed Solution
1. Validate OG images meet WhatsApp minimum requirements (300x200px, <5MB)
2. Add optional image compression for sharing-optimized copies
3. Add Telegram channel meta tag configuration
4. Document cache-busting strategies for WhatsApp (append `?v=` parameter)
5. Show warnings in admin when images don't meet platform requirements
## Implementation Details
- Extend image validation in `ImageHelper`
- Add `telegram_channel` to plugin configuration
- Output `<meta name="telegram:channel" content="@...">` when configured
- Add validation warnings to the admin tag list view
-25
View File
@@ -1,25 +0,0 @@
---
title: "[FEATURE] Multilingual OG Tag Support"
labels: "enhancement, priority: medium"
milestone: "v01.02"
---
## Feature Description
Support per-language OG tags for multilingual Joomla sites using Joomla's built-in language associations.
## Problem or Use Case
Multilingual sites need different OG titles, descriptions, and images for each language version of an article. The `og:locale` and `og:locale:alternate` tags should also be set correctly for each language.
## Proposed Solution
1. Store OG data per language in `#__mokoog_tags` (add `language` column)
2. Output `og:locale` based on the current page language
3. Output `og:locale:alternate` for each associated language version
4. In the article editor, show OG fields for the current editing language
5. Support Joomla language tag format mapping (e.g., `en-GB``en_GB`)
## Implementation Details
- Add `language` column to `#__mokoog_tags` (default `*` for all languages)
- Modify unique key to include language: `content_type + content_id + language`
- System plugin reads current language from `Factory::getLanguage()->getTag()`
- Map Joomla language tags to OG locale format: `en-GB``en_GB`
- Query associated articles via `#__associations` to build `og:locale:alternate`
-29
View File
@@ -1,29 +0,0 @@
---
title: "[FEATURE] OG Tag Import/Export via CSV"
labels: "enhancement, priority: low"
milestone: "v02.00"
---
## Feature Description
Import and export OG tag data via CSV for bulk management, migration, and backup purposes.
## Problem or Use Case
Large sites need to manage OG data in spreadsheets — reviewing descriptions, updating images in bulk, or migrating from another OG extension (like Tagz). CSV import/export enables this workflow.
## Proposed Solution
**Export:**
- Export all `#__mokoog_tags` records to CSV
- Include article title (joined from `#__content`) for reference
- Columns: content_type, content_id, article_title, og_title, og_description, og_image, og_type
**Import:**
- Upload CSV with the same column format
- Match on `content_type + content_id`
- Option to update existing or skip existing
- Validation report showing errors before committing
## Implementation Details
- New `Controller/ImportExportController.php` with `export()` and `import()` actions
- CSV parsing with `fgetcsv()` / `SplFileObject`
- Add toolbar buttons to the Tags view
- Validate content_id exists in the referenced content table before importing