docs: restructure CHANGELOG by feature area
Universal: Auto Version Bump / Version Bump (push) Has been cancelled

Reorganized from chronological bullet dump into structured sections:
Core Engine, Admin Component, Queue Processing, Per-Article Controls,
OAuth, Migration, Service Plugins (34 platforms by category), Plugin
Configuration, Infrastructure.

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-28 14:01:46 -05:00
parent 3b089f8d72
commit d70acbc35d
+112 -50
View File
@@ -9,56 +9,118 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
## [Unreleased]
### Added
- Initial package structure with component, system plugin, content plugin, and webservices plugin
- Admin component with dashboard, post queue, services management, and activity logs
- System plugin triggering cross-post on article publish via `onContentAfterSave`
- Content plugin adding cross-post controls to article editor
- WebServices API plugin with REST endpoints for posts and services
#### Core Engine
- Cross-posting engine dispatches articles to service plugins on publish
- System plugin hooks `onContentAfterSave` and `onContentChangeState`
- Duplicate guard prevents re-posting to services that already received an article
- Message template rendering with 8 placeholders: `{title}`, `{url}`, `{introtext}`, `{fulltext}`, `{image}`, `{category}`, `{author}`, `{date}`
- Custom `mokojoomcross` plugin group for extensible service architecture
- Service plugins: Facebook, X/Twitter, LinkedIn, Mastodon, Bluesky, Mailchimp, Telegram, Discord, Slack
- Database tables: services, posts, templates, logs
- Perfect Publisher Pro migration tool in installer script
- Message template system with per-platform placeholders
- Post queue with scheduled posting, retry logic, and delivery tracking
- Core cross-posting engine: service plugin dispatch, duplicate guard, immediate execution
- System plugin listens to both `onContentAfterSave` and `onContentChangeState` for publish events
- Full admin templates: services list, post queue list, activity logs list, dashboard with recent activity
- Service edit form with default/custom mode toggle and credential fields
- Dashboard migration controller action for Perfect Publisher Pro import
- Template placeholders: {title}, {url}, {introtext}, {fulltext}, {image}, {category}, {author}, {date}
- Queue processing: Joomla Scheduled Task plugin (`plg_task_mokojoomcross`)preferred method
- Queue processing: Page-load fallback via system plugin `onAfterRender` with configurable throttle
- Configurable processing method: scheduler-only (recommended), page-load only, or both
- Dashboard warning banner when page-load processing is active instead of scheduler
- `MokoJoomCrossServiceInterface` contract for all service plugins
#### Admin Component (5 views)
- **Dashboard** — summary cards, posts-by-service analytics with success rates, top cross-posted articles, recent activity feed, PP Pro migration banner, page-load processing warning
- **Post Queue** — list with color-coded status badges, error messages, retry counts, platform post IDs, article/service columns, date filters
- **Services** — CRUD with service type selector (34 platforms organized by category), default/custom mode badges, publish toggle, credential editor
- **Templates** — CRUD for message templates, per-platform assignment, placeholder reference panel, template body preview
- **Activity Logs** — list with level badges (info/warning/error), service column, context data, level and search filters
#### Queue Processing (3 methods)
- Joomla Scheduled Task plugin (`plg_task_mokojoomcross`) — preferred, processes 20 posts per run
- Page-load fallback via system plugin `onAfterRender`configurable throttle interval, backend/frontend/both
- Shared `QueueProcessor` helper with DB lock to prevent concurrent execution
- Failed post retry with configurable max retries and delay
- Failed post retry with configurable max retries and exponential delay
- Scheduled post support (`scheduled_at` column)
- Automatic log cleanup based on configurable retention period
- PP Pro migration rewritten: reads #__autotweet_channels table with credential mapping per service type
- PP Pro migration fallback: extracts from component params when channel table missing
- Plugin-level config forms for Telegram, Facebook, Discord, Slack (default bot tokens stored in plugin params)
- Telegram plugin config: default bot token, parse mode, link preview toggle
- Facebook plugin config: default page access token, default page ID
- Discord plugin config: default webhook URL, embed color
- Slack plugin config: default webhook URL
- LinkedIn plugin config: OAuth client ID/secret, redirect URI
- Mastodon plugin config: default instance URL, visibility, hashtags
- Bluesky plugin config: default PDS URL, auto link cards
- Mailchimp plugin config: default sender name/email, auto-send toggle
- Template management: full CRUD with list/edit views, placeholder reference panel
- Templates submenu item and dashboard quick link
- Logs filter form with level and search filters
- Admin component now has 5 submenu items: Dashboard, Post Queue, Services, Templates, Logs
- Per-article cross-posting: skip toggle and service checkboxes in article editor attribs tab
- Content plugin injects dynamic "Cross-Posting" fieldset via onContentPrepareForm
- System plugin reads article attribs for mokojoomcross_services and mokojoomcross_skip
- Analytics dashboard: posts-by-service table with success rates, top articles, daily trend data
- OAuth helper: authorization URL generation, PKCE for Twitter, code exchange, token storage
- OAuth controller: authorize and callback endpoints for Facebook, LinkedIn, Twitter
- Wiki: Services guide, REST API reference, Message Templates, Troubleshooting
- 25 expansion service plugins: Generic Webhook, Microsoft Teams, Threads, Google Business
Profile, WhatsApp Business, Google Chat, Medium, Pinterest, Reddit, SendGrid, Brevo,
WordPress, Ntfy, Tumblr, ConvertKit, Nostr, ActivityPub, Dev.to, Ghost, Hashnode,
Google Blogger, Matrix/Element, RSS Feed, Constant Contact, TikTok
- Generic Webhook plugin: universal connector for IFTTT, Zapier, n8n, Make, any custom endpoint
- Service type dropdown updated with all 34 platforms organized by category
- Package manifest now includes all 40 sub-extensions (component + 5 core plugins + 34 service plugins)
#### Per-Article Controls
- "Cross-Posting" fieldset injected into article editor via `onContentPrepareForm`
- Skip cross-posting toggle per article
- Service selection checkboxes (unchecked = post to all enabled services)
#### OAuth 2.0
- `OAuthHelper` with authorization URL generation, code-to-token exchange, token storage
- Twitter PKCE flow support
- `OauthController` with authorize and callback endpoints
- Reads client ID/secret from service plugin params
#### Perfect Publisher Pro Migration
- Reads `#__autotweet_channels` table with per-platform credential mapping
- Fallback extraction from component params when channel table missing
- Maps Facebook, Twitter, LinkedIn, Telegram, Discord, Slack, Mastodon
- Creates services in disabled state for manual verification
- One-click migration from dashboard
#### Service Plugins (34 platforms)
**Social Media (12)**
- Facebook / Meta — Graph API v19.0, default MokoWaaS app mode, page feed posting
- X / Twitter — API v2, OAuth 2.0 Bearer Token, 280 char limit
- LinkedIn — Share API v2, organization + personal profile, 3000 char limit
- Mastodon — API v1, multi-instance, hashtags, 500 char limit
- Bluesky — AT Protocol, session auth, app passwords, 300 char limit
- Threads (Meta) — Threads Publishing API, default app mode, 500 char limit
- Pinterest — Pins API v5, board selection, image-focused
- Reddit — OAuth2 link submission, subreddit selection
- Tumblr — API v2, link/text posts, OAuth 1.0a
- TikTok — Content Posting API, photo slideshows
- Nostr — NIP-01 event publishing, configurable relays
- ActivityPub — generic Fediverse (Pleroma, Akkoma, Misskey, Pixelfed)
**Chat / Messaging (8)**
- Telegram — Bot API, default @MokoWaaSBot + custom bot, HTML/Markdown, 4096 chars
- Discord — Webhooks, default MokoWaaS webhook mode, embeds, 2000 chars
- Slack — Incoming Webhooks, default MokoWaaS webhook mode, Block Kit
- Microsoft Teams — Incoming Webhooks, default mode, Adaptive Cards
- Google Chat — Webhook API, card formatting
- WhatsApp Business — Meta Cloud API, template + free-form messages
- Matrix / Element — Client-Server API, self-hosted homeserver support
- Ntfy — Push notifications, priority levels, action buttons
**Email / Newsletter (5)**
- Mailchimp — Campaigns API, audience selection, send/draft modes
- SendGrid — Marketing Campaigns API v3, Single Send creation
- Brevo (Sendinblue) — API v3, campaign creation
- ConvertKit — API v3, broadcast creation
- Constant Contact — API v3, campaign creation
**Publishing / Blogging (6)**
- Medium — Publishing API, full HTML, canonical URL, tags
- WordPress — REST API v2, Application Passwords, category mapping
- Dev.to — Forem API, markdown, series support
- Ghost — Admin API v5, JWT auth, full HTML
- Hashnode — GraphQL API, cover image, tags
- Google Blogger — Blogger API v3, labels from categories
**Business (1)**
- Google Business Profile — API v1, local posts (UPDATE/EVENT/OFFER)
**Universal (2)**
- Generic Webhook — POST/PUT to any URL, JSON/form body, custom headers (IFTTT, Zapier, n8n, Make)
- RSS Feed — dedicated cross-post feed generation
#### Plugin Configuration
- Telegram: default bot token, parse mode, link preview toggle
- Facebook: default page access token, default page ID
- Discord: default webhook URL, embed color
- Slack: default webhook URL
- LinkedIn: OAuth client ID/secret, redirect URI
- Mastodon: default instance URL, visibility, hashtags
- Bluesky: default PDS URL, auto link cards
- Mailchimp: default sender name/email, auto-send toggle
- Microsoft Teams: default webhook URL
- Threads: default webhook URL
#### Infrastructure
- 7 CI/CD workflows: CI, auto-release, pre-release, auto-bump, update-server, cascade-dev, issue-branch
- Joomla update server (`updates.xml`) with development channel
- WebServices REST API plugin with CRUD routes for posts and services
- Database: 4 tables (services, posts, templates, logs) with default templates
- Package installer with auto-enable for core + task + service plugins
- 9 wiki documentation pages
- Windows Terminal profile in Joomla dropdown
## [01.00.00] - 2026-05-28
### Added
- Initial release