Jonathan Miller
f649858fcd
feat: add SEO content scoring panel to article editor
...
JavaScript-based SEO analysis with 7 checks (OG title, description,
image, SEO title, meta description, title length, description
length). Shows pass/fail dots and overall score. Closes #68
2026-06-23 12:53:58 -05:00
gitea-actions[bot]
7a38025b5e
chore(version): pre-release bump to 01.04.03-dev [skip ci]
Publish to Composer / Publish Package (release) Successful in 7s
2026-06-23 17:20:08 +00:00
gitea-actions[bot]
e530ca821e
chore(version): auto-bump patch 01.04.02-dev [skip ci]
2026-06-23 17:19:49 +00:00
Jonathan Miller
872074cd5b
feat: add FAQ, HowTo, Event, and Recipe JSON-LD schema types
...
Universal: Auto Version Bump / Version Bump (push) Successful in 10s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 23s
- FAQ: auto-detects h3/h4 + paragraph patterns, outputs FAQPage (#62 )
- HowTo: auto-detects ordered lists, outputs HowTo with steps (#63 )
- Event: per-article fields (dates, venue, tickets), event_data JSON
column, outputs Event schema (#64 )
- Recipe: per-article fields (times, ingredients, nutrition),
recipe_data JSON column, outputs Recipe schema (#66 )
- DB migration 01.04.00: adds event_data and recipe_data columns
Closes #62 , closes #63 , closes #64 , closes #66
2026-06-23 12:19:37 -05:00
gitea-actions[bot]
c871b7d30d
chore(version): pre-release bump to 01.04.01-dev [skip ci]
Publish to Composer / Publish Package (release) Successful in 4s
2026-06-23 16:33:35 +00:00
gitea-actions[bot]
641eee753a
chore(version): auto-bump patch 01.03.08-dev [skip ci]
2026-06-23 16:33:26 +00:00
Jonathan Miller
44d9daf3bc
feat: add LocalBusiness JSON-LD schema type
...
Universal: Auto Version Bump / Version Bump (push) Successful in 12s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 11s
Adds configurable LocalBusiness structured data with address,
contact, geo coordinates, and opening hours. Enabled via plugin
parameters. Closes #65
2026-06-23 11:30:45 -05:00
Jonathan Miller
96eea6060f
feat: add Discord, Mastodon, and Slack preview cards to editor
...
Shows how shared links will appear on Discord (dark theme with
accent bar), Mastodon (rounded card), and Slack (compact unfurl)
alongside the existing Facebook, Twitter, and LinkedIn previews.
Closes #69
2026-06-23 11:28:37 -05:00
Jonathan Miller
aeea65423c
feat: add VideoObject JSON-LD schema for video content
...
Outputs VideoObject structured data when an article has a video URL
set, enabling Google video rich results. Closes #67
2026-06-23 11:28:37 -05:00
Jonathan Miller
b4d5b73d15
fix: code quality improvements ( #76 , #77 , #78 , #79 )
...
- Add exception logging to BatchController batch skip (#76 )
- Align form maxlength with DB schema limits (#77 )
- applySeoTags() already uses public API — no change needed (#78 )
- Add strip_tags() input sanitization on OG text fields (#79 )
2026-06-23 11:28:36 -05:00
gitea-actions[bot]
e939e90733
chore(version): pre-release bump to 01.03.07-dev [skip ci]
Publish to Composer / Publish Package (release) Successful in 7s
2026-06-23 16:03:42 +00:00
gitea-actions[bot]
d4c22ebdbf
chore(version): auto-bump patch 01.03.06-dev [skip ci]
2026-06-23 16:03:32 +00:00
gitea-actions[bot]
07b296db61
chore(version): pre-release bump to 01.03.05-dev [skip ci]
Publish to Composer / Publish Package (release) Successful in 39s
2026-06-23 15:47:35 +00:00
gitea-actions[bot]
6a0ee812d8
chore(version): auto-bump patch 01.03.04-dev [skip ci]
2026-06-23 15:47:22 +00:00
Jonathan Miller
fcfa6838e5
fix: address PR #82 review findings
...
Joomla: Extension CI / Release Readiness Check (pull_request) Failing after 5s
Universal: PR Check / Branch Policy (pull_request) Successful in 2s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Generic: Repo Health / Access control (pull_request) Successful in 2s
Universal: PR Check / Validate PR (pull_request) Failing after 7s
Universal: PR Check / Secret Scan (pull_request) Successful in 8s
Joomla: Extension CI / Lint & Validate (pull_request) Failing after 14s
Universal: Auto Version Bump / Version Bump (push) Successful in 16s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 15s
Joomla: Metadata Validation / Validate Joomla Metadata (pull_request) Failing after 54s
Joomla: Extension CI / Tests (PHP 8.2) (pull_request) Has been cancelled
Joomla: Extension CI / Tests (PHP 8.3) (pull_request) Has been cancelled
Joomla: Extension CI / PHPStan Analysis (pull_request) Has been cancelled
Joomla: Extension CI / Build RC Pre-Release (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
Generic: Repo Health / Scripts governance (pull_request) Has been cancelled
Generic: Repo Health / Repository health (pull_request) Has been cancelled
Generic: Repo Health / Report Issues (pull_request) Has been cancelled
- Only emit og:video:secure_url for HTTPS URLs (review #1 )
- Only emit og:video:width/height for direct files, not embeds (review #2 )
- Add server-side http/https scheme validation on og_video save (review #3 )
- Consolidate duplicate com_mokoshop product blocks into one (review #4 )
- Fix stale com_virtuemart reference in SQL comment (review #5 )
- Use COM_MOKOOG_* language keys in tag.xml instead of plugin keys (review #6 )
2026-06-23 10:46:58 -05:00
gitea-actions[bot]
908e1d3e1b
chore(version): pre-release bump to 01.03.03-dev [skip ci]
Publish to Composer / Publish Package (release) Successful in 29s
2026-06-23 15:37:27 +00:00
gitea-actions[bot]
9539bb44c2
chore(version): auto-bump patch 01.03.02-dev [skip ci]
2026-06-23 15:37:17 +00:00
Jonathan Miller
5b29690d34
feat: add og:video support and Pinterest rich pin tags
...
Universal: Auto Version Bump / Version Bump (push) Successful in 16s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 12s
- Add og:video meta tags with per-article video URL field and auto
MIME type detection for YouTube/Vimeo/direct files. Includes DB
migration for og_video column. (closes #59 )
- Add Pinterest rich pin tags: article:tag from Joomla content tags
on article pages, product:availability from MokoSuiteShop stock
quantity on product pages. (closes #60 )
2026-06-23 10:36:04 -05:00
Jonathan Miller
881bb0a2ae
feat: add fediverse:creator tag, character counters, LinkedIn preview
...
- Add fediverse:creator meta tag for Mastodon/Fediverse author
attribution — first extension on any CMS to support this (closes #57 )
- Add live character count indicators with green/yellow/red color
coding on OG title, description, SEO title, and meta description
fields in the article/menu editor (closes #58 )
- Add LinkedIn social preview card alongside existing Facebook and
Twitter/X previews in the editor (closes #61 )
2026-06-23 10:36:04 -05:00
gitea-actions[bot]
7d1a939b6a
chore(version): pre-release bump to 01.03.01-dev [skip ci]
Publish to Composer / Publish Package (release) Successful in 5s
2026-06-21 22:55:44 +00:00
gitea-actions[bot]
6a3f9c126e
chore(version): auto-bump patch 01.02.04-dev [skip ci]
2026-06-21 22:55:32 +00:00
gitea-actions[bot]
20b62b95d8
chore(version): pre-release bump to 01.02.03-dev [skip ci]
Publish to Composer / Publish Package (release) Successful in 6s
2026-06-21 22:27:35 +00:00
gitea-actions[bot]
437a23cec2
chore(version): auto-bump patch 01.02.02-dev [skip ci]
2026-06-21 22:27:19 +00:00
gitea-actions[bot]
b033cfe4e2
chore(version): pre-release bump to 01.02.01-dev [skip ci]
Publish to Composer / Publish Package (release) Successful in 4s
2026-06-21 22:22:24 +00:00
gitea-actions[bot]
e86bb5906b
chore(version): auto-bump patch 01.01.02-dev [skip ci]
2026-06-21 22:22:14 +00:00
gitea-actions[bot]
549a3b5599
chore(version): pre-release bump to 01.01.01-dev [skip ci]
Publish to Composer / Publish Package (release) Successful in 26s
Branch Cleanup / Delete merged branch (pull_request) Has been skipped
Universal: Build & Release / Promote to RC (pull_request) Has been skipped
RC Revert / Rename rc/ back to dev/ (pull_request) Has been skipped
Universal: Build & Release / Build & Release Pipeline (pull_request) Successful in 25s
Universal: Workflow Sync Trigger / Sync workflows to live repos (pull_request) Failing after 2m51s
2026-06-21 22:00:50 +00:00
gitea-actions[bot]
19e177f1a4
chore(version): auto-bump patch 01.00.09-dev [skip ci]
2026-06-21 22:00:38 +00:00
gitea-actions[bot]
dfd0fef3b8
chore(version): pre-release bump to 01.00.08-dev [skip ci]
2026-06-21 21:43:08 +00:00
Jonathan Miller
26328d530e
Merge branch 'dev' of https://git.mokoconsulting.tech/MokoConsulting/MokoSuiteOpenGraph into dev
Generic: Repo Health / Access control (push) Successful in 2s
Generic: Repo Health / Site Health (push) Has been skipped
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Joomla: Extension CI / Release Readiness Check (pull_request) Failing after 5s
Universal: Secret Scanning / Gitleaks Secret Scan (pull_request) Successful in 6s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 9s
Joomla: Extension CI / Lint & Validate (pull_request) Failing after 12s
Universal: PR Check / Validate PR (pull_request) Successful in 11s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Generic: Repo Health / Access control (pull_request) Successful in 1s
Universal: Security Audit / Dependency Audit (pull_request) Successful in 4s
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
Joomla: Extension CI / Tests (PHP 8.2) (pull_request) Has been cancelled
Joomla: Extension CI / Tests (PHP 8.3) (pull_request) Has been cancelled
Joomla: Extension CI / PHPStan Analysis (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
Generic: Repo Health / Scripts governance (pull_request) Has been cancelled
Generic: Repo Health / Repository health (pull_request) Has been cancelled
Generic: Repo Health / Report Issues (pull_request) Has been cancelled
2026-06-21 16:42:56 -05:00
Jonathan Miller
77da0c5517
fix: remove remaining @ suppression, check Folder::create() returns
...
- Remove @getimagesize() suppression in ImageHelper, ImageGenerator,
MokoOG — let PHP report warnings for corrupt/unreadable images
- Add Log::add() when ImageHelper::resize() cannot read image dimensions
- Check Folder::create() return value in ImageGenerator and ImageHelper,
return graceful fallback if directory creation fails
2026-06-21 16:42:54 -05:00
gitea-actions[bot]
6a928f856f
chore(version): pre-release bump to 01.00.07-dev [skip ci]
2026-06-21 21:26:34 +00:00
Jonathan Miller
fa75b7d9c4
Merge branch 'dev' of https://git.mokoconsulting.tech/MokoConsulting/MokoSuiteOpenGraph into dev
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 1s
Joomla: Extension CI / Release Readiness Check (pull_request) Failing after 8s
Universal: PR Check / Branch Policy (pull_request) Successful in 2s
Joomla: Extension CI / Lint & Validate (pull_request) Failing after 14s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 9s
Universal: Secret Scanning / Gitleaks Secret Scan (pull_request) Successful in 7s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Generic: Repo Health / Access control (pull_request) Successful in 1s
Universal: Security Audit / Dependency Audit (pull_request) Successful in 4s
Universal: PR Check / Validate PR (pull_request) Successful in 25s
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
Joomla: Extension CI / Tests (PHP 8.2) (pull_request) Has been cancelled
Joomla: Extension CI / Tests (PHP 8.3) (pull_request) Has been cancelled
Joomla: Extension CI / PHPStan Analysis (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
Generic: Repo Health / Scripts governance (pull_request) Has been cancelled
Generic: Repo Health / Repository health (pull_request) Has been cancelled
Generic: Repo Health / Report Issues (pull_request) Has been cancelled
2026-06-21 16:26:18 -05:00
Jonathan Miller
46e30c950b
fix: address PR review findings — error handling and data integrity
...
- Add missing language field to batch-generated records
- Wrap batch insert in try-catch to handle duplicate key races
- Add logging to all empty catch blocks (script.php, MokoOG license check)
- Guard loadShopProduct() with try-catch for missing MokoSuiteShop tables
- Guard reviews query in JsonLdBuilder for missing #__mokoshop_reviews
2026-06-21 16:26:13 -05:00
gitea-actions[bot]
77148d2401
chore(version): pre-release bump to 01.00.06-dev [skip ci]
2026-06-21 20:40:44 +00:00
Jonathan Miller
38af92b876
Merge branch 'dev' of https://git.mokoconsulting.tech/MokoConsulting/MokoSuiteOpenGraph into dev
Generic: Repo Health / Access control (push) Successful in 1s
Generic: Repo Health / Site Health (push) Has been skipped
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Generic: Repo Health / Access control (pull_request) Successful in 1s
Joomla: Extension CI / Release Readiness Check (pull_request) Failing after 4s
Universal: Secret Scanning / Gitleaks Secret Scan (pull_request) Successful in 5s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 8s
Universal: Security Audit / Dependency Audit (pull_request) Successful in 4s
Joomla: Extension CI / Lint & Validate (pull_request) Failing after 12s
Universal: PR Check / Validate PR (pull_request) Successful in 32s
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
Joomla: Extension CI / Tests (PHP 8.2) (pull_request) Has been cancelled
Joomla: Extension CI / Tests (PHP 8.3) (pull_request) Has been cancelled
Joomla: Extension CI / PHPStan Analysis (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
Generic: Repo Health / Scripts governance (pull_request) Has been cancelled
Generic: Repo Health / Repository health (pull_request) Has been cancelled
Generic: Repo Health / Report Issues (pull_request) Has been cancelled
2026-06-21 15:40:35 -05:00
Jonathan Miller
28d44d6884
fix: undefined $db in findImage(), pass cached product to buildProduct()
...
- Add missing Factory::getDbo() in findImage() category fallback — would
cause fatal error on article pages with no images (found in PR review)
- Pass cached product to JsonLdBuilder::buildProduct() to avoid duplicate
DB query (same pattern as buildArticle with cachedArticle)
- Fix orphaned PHPDoc block for getImageDimensions()
2026-06-21 15:40:01 -05:00
gitea-actions[bot]
3d2d91ace5
chore(version): pre-release bump to 01.00.05-dev [skip ci]
2026-06-21 20:32:13 +00:00
gitea-actions[bot]
0e6137b064
chore(version): pre-release bump to 01.00.04-dev [skip ci]
2026-06-21 20:27:36 +00:00
Jonathan Miller
e105474c68
Merge remote-tracking branch 'origin/dev' into dev
...
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 1s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 6s
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
# Conflicts:
# .mokogitea/workflows/pre-release.yml
2026-06-21 15:25:56 -05:00
Jonathan Miller
ca06c86328
perf: consolidate article DB queries into single cached lookup ( #38 )
...
- Add loadArticle() with static per-request cache for article data
- Refactor getArticleDate(), getArticleAuthor() to use cached article
- Refactor findImage() for com_content to use cached article
- Pass cached article to JsonLdBuilder::buildArticle() to skip its query
- Reduces article page DB queries from 5 to 1 for OG tag generation
2026-06-21 11:09:52 -05:00
Jonathan Miller
f484675300
fix: batch limit cap, TagTable validation, CSV language column ( #42 , #43 , #52 )
...
- Cap batch process limit to 200 per request to prevent DoS (#42 )
- Add TagTable::check() validation: og_type enum, field max lengths,
canonical_url format, robots directives, content_type pattern (#43 )
- Add language column to CSV export headers and data (#52 )
- Parse language column on CSV import with format validation
- Include language in duplicate check query to match unique key
2026-06-21 10:57:38 -05:00
Jonathan Miller
8793e6b3f4
feat: add MokoSuiteShop product OG tag support ( #53 )
...
- Detect com_mokoshop product views and set og:type to 'product'
- Auto-generate OG tags from CRM product data (name, description, image)
- Add product:price:amount and product:price:currency meta tags
- Add JSON-LD Product schema with offers, SKU, and aggregate ratings
- Load product images from linked #__content article images
- Cache product DB lookups to avoid duplicate queries per request
2026-06-21 10:20:38 -05:00
Jonathan Miller
0afc8b135a
fix: replace GD error suppression with logging, remove dead adapters ( #49 , #36 )
...
- Replace @ error suppression in ImageGenerator with Log::add() warnings
for missing GD, missing font, corrupt images (#49 )
- Add GD extension pre-check before attempting image generation
- Add WebP function_exists() guard for servers without WebP support
- Remove @ suppression from ImageHelper::loadImage() with logging
- Remove unused ContentType adapters (HikaShop, K2, VirtueMart) and
ContentTypeInterface — not targeting these platforms (#36 )
2026-06-21 10:12:00 -05:00
Jonathan Miller
433ecfea71
fix: resolve 3 v1.0 release blockers ( #47 , #48 , #39 )
...
- Add TagsController extending AdminController for admin list
delete/publish/unpublish operations (#48 )
- Add language filter to loadOgDataByType() and loadOgDataByMenu()
matching the pattern already used in loadOgData() (#47 )
- Replace direct $doc->_links access with getHeadData()/setHeadData()
public API for Joomla forward compatibility (#39 )
- Update ISSUES.md with full 2026-06-21 assessment
2026-06-21 10:02:03 -05:00
gitea-actions[bot]
2bf63f70ab
chore(version): pre-release bump to 01.00.03-dev [skip ci]
2026-06-11 20:32:40 +00:00
gitea-actions[bot]
1593f28f19
chore(version): pre-release bump to 01.00.02-dev [skip ci]
2026-06-07 01:10:13 +00:00
Jonathan Miller
05b2a44209
refactor: rename src/ to source/ and update all CI references
...
- Rename project source directory from src/ to source/
- Update CI workflows (ci-joomla, pr-check, repo-health) to check
source/ first, falling back to src/ and htdocs/ for compat
- Update .gitignore vendor exception path
- manifest.xml entry-point already updated
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-06-06 08:24:35 -05:00