Commit Graph

22 Commits

Author SHA1 Message Date
Jonathan Miller 3d73ea2f9c feat(jsonld): add JSON-LD structured data output (closes #6)
- 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>
2026-05-23 23:30:29 -05:00
Jonathan Miller 9e953646d7 feat(debug): add social platform debugger quick links (closes #9)
- 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>
2026-05-23 23:30:00 -05:00
Jonathan Miller a34091ffbe feat(adapters): add third-party content type adapter architecture (closes #5)
- 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>
2026-05-23 23:29:59 -05:00
Jonathan Miller e6ee93b79b feat(social): add WhatsApp/Telegram link preview optimization (closes #10)
- 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>
2026-05-23 23:29:59 -05:00
Jonathan Miller 4c9486173b feat(categories): add category-level OG tag support (closes #4)
- 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>
2026-05-23 23:29:59 -05:00
Jonathan Miller 9a6cd6fce8 feat(batch): add batch OG tag generation for existing articles (closes #1)
- 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>
2026-05-23 23:29:58 -05:00
Jonathan Miller 3ec4b163bb feat(images): auto-resize OG images to 1200x630px (closes #2)
- 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>
2026-05-23 23:29:58 -05:00
Jonathan Miller 15ec388b52 feat(seo): add SEO meta tag management (closes #8)
- 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>
2026-05-23 23:29:58 -05:00
jmiller 35f9329106 chore: sync updates.xml from [skip ci] 2026-05-24 04:25:14 +00:00
Moko Consulting 8b8ba1219a chore: update CHANGELOG for deploy workflow removal
Joomla: Repo Health / Access control (push) Has been cancelled
Universal: Cascade Main → Dev / Cascade main → branches (push) Has been cancelled
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
2026-05-24 04:09:55 +00:00
jmiller b2feaf17d1 chore: sync updates.xml from [skip ci] 2026-05-24 03:45:21 +00:00
jmiller 4e72dbd97c chore: sync updates.xml from [skip ci] 2026-05-24 03:45:18 +00:00
jmiller 1b09c5d10c chore: remove deploy workflow — switching to Joomla update server method
Joomla: Repo Health / Access control (push) Has been cancelled
Universal: Cascade Main → Dev / Cascade main → branches (push) Has been cancelled
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
2026-05-24 03:44:08 +00:00
jmiller 59536181da chore: sync updates.xml from [skip ci] 2026-05-23 23:41:18 +00:00
jmiller 84705d92f6 chore: sync updates.xml from [skip ci] 2026-05-23 23:41:16 +00:00
jmiller 5a99987e0f chore: sync updates.xml from [skip ci] 2026-05-23 23:40:17 +00:00
jmiller bb064a4c20 chore: sync updates.xml from [skip ci] 2026-05-23 23:40:16 +00:00
jmiller 02692440ba chore: sync updates.xml from [skip ci] 2026-05-23 23:04:45 +00:00
Jonathan Miller 8feb75e1c7 chore: update .mokogitea/manifest.xml with standard format
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 2s
Add Moko Platform header comment, last-synced timestamp, and
normalize indentation to match other repos.

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
v01
2026-05-23 18:02:48 -05:00
Jonathan Miller 98ac42c398 fix: resolve 10 issues found in code review
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 3s
Critical:
- Create missing pkg_mokoog.sys.ini package language file
- Create missing forms/tag.xml and forms/filter_tags.xml for component
- Remove non-existent Service/ folder from component manifest
- Remove non-existent scriptfile from system plugin manifest

Important:
- Remove unused DatabaseAwareTrait from system plugin
- Add Event parameter to onBeforeCompileHead (Joomla 5 SubscriberInterface)
- Guard onContentAfterSave with isClient('administrator') check
- Fix duplicate DEFAULT keyword in SQL CREATE TABLE
- Quote column names with quoteName() in content plugin select
- Remove duplicate language file registration in component manifest

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-23 17:40:40 -05:00
Jonathan Miller 27bb22e8e2 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>
2026-05-23 17:30:50 -05:00
Jonathan Miller c9fe15c90c feat: initial MokoOpenGraph package scaffold
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 2s
Joomla package (pkg_mokoog) with three sub-extensions:
- com_mokoog: Admin component with tag manager, MVC, database schema
- plg_system_mokoog: OG + Twitter Card meta tag injection via onBeforeCompileHead
- plg_content_mokoog: Per-article and per-menu-item OG fields in editor

Includes CI/CD workflows, issue templates, 12 feature issues, and
full Joomla 4/5 DI container architecture.

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-23 17:10:17 -05:00