{"id":50531985,"url":"https://github.com/vapvarun/jetonomy","last_synced_at":"2026-06-03T14:30:51.493Z","repository":{"id":347383263,"uuid":"1185288478","full_name":"vapvarun/jetonomy","owner":"vapvarun","description":"Next-gen discussion platform for WordPress — forums, Q\u0026A, ideas, voting, trust levels, 61+ REST API endpoints. Free forever.","archived":false,"fork":false,"pushed_at":"2026-05-31T09:23:04.000Z","size":22779,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-31T10:04:58.560Z","etag":null,"topics":["bbpress-alternative","community","community-platform","discourse-alternative","discussion","forum","interactivity-api","moderation","open-source","php","qa","reputation","rest-api","self-hosted","trust-levels","voting","wordpress","wordpress-forum","wordpress-plugin","wpforo-alternative"],"latest_commit_sha":null,"homepage":"https://store.wbcomdesigns.com/jetonomy/","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vapvarun.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":"audit/1.4.3-ux-punchlist.md","citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-18T12:35:01.000Z","updated_at":"2026-05-26T12:06:03.000Z","dependencies_parsed_at":null,"dependency_job_id":"e7843b8d-9201-4db3-a953-0651924dfb75","html_url":"https://github.com/vapvarun/jetonomy","commit_stats":null,"previous_names":["vapvarun/jetonomy"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/vapvarun/jetonomy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vapvarun%2Fjetonomy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vapvarun%2Fjetonomy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vapvarun%2Fjetonomy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vapvarun%2Fjetonomy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vapvarun","download_url":"https://codeload.github.com/vapvarun/jetonomy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vapvarun%2Fjetonomy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33870025,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-03T02:00:06.370Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bbpress-alternative","community","community-platform","discourse-alternative","discussion","forum","interactivity-api","moderation","open-source","php","qa","reputation","rest-api","self-hosted","trust-levels","voting","wordpress","wordpress-forum","wordpress-plugin","wpforo-alternative"],"created_at":"2026-06-03T14:30:50.844Z","updated_at":"2026-06-03T14:30:51.484Z","avatar_url":"https://github.com/vapvarun.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eJetonomy\u003c/strong\u003e\u003cbr\u003e\n  Next-gen discussion platform for WordPress -- forums, Q\u0026A, ideas, and more.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/vapvarun/jetonomy/actions/workflows/tests.yml\"\u003e\u003cimg src=\"https://github.com/vapvarun/jetonomy/actions/workflows/tests.yml/badge.svg\" alt=\"Tests\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.php.net/\"\u003e\u003cimg src=\"https://img.shields.io/badge/PHP-8.1%2B-777BB4.svg?logo=php\u0026logoColor=white\" alt=\"PHP 8.1+\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://wordpress.org/\"\u003e\u003cimg src=\"https://img.shields.io/badge/WordPress-6.7%2B-21759B.svg?logo=wordpress\u0026logoColor=white\" alt=\"WordPress 6.7+\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://img.shields.io/badge/Tested%20up%20to-WP%206.9-success\"\u003e\u003cimg src=\"https://img.shields.io/badge/Tested%20up%20to-WP%206.9-success\" alt=\"Tested up to WP 6.9\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.gnu.org/licenses/gpl-2.0.html\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-GPLv2%2B-green.svg\" alt=\"License: GPL v2+\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/PHPUnit-226%20tests-brightgreen?logo=testing-library\u0026logoColor=white\" alt=\"226 Tests\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/PHPStan-Level%205-brightgreen?logo=php\u0026logoColor=white\" alt=\"PHPStan Level 5\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/REST%20API-61%2B%20endpoints-blue?logo=json\u0026logoColor=white\" alt=\"61+ REST API Endpoints\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Security-OWASP%20tested-blue?logo=owasp\u0026logoColor=white\" alt=\"Security Tested\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://app.instawp.io/launch?s=jetonomy\u0026d=v2\"\u003e\u003cimg src=\"https://img.shields.io/badge/Try%20Live%20Demo-Launch%20Sandbox-FF6B35?style=for-the-badge\" alt=\"Try Live Demo\"\u003e\u003c/a\u003e\n  \u0026nbsp;\n  \u003ca href=\"https://store.wbcomdesigns.com/jetonomy/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Download-Free-brightgreen?style=for-the-badge\u0026logo=wordpress\u0026logoColor=white\" alt=\"Download Free\"\u003e\u003c/a\u003e\n  \u0026nbsp;\n  \u003ca href=\"https://store.wbcomdesigns.com/jetonomy-pro/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Pro-14%20Extensions-7C3AED?style=for-the-badge\" alt=\"Jetonomy Pro\"\u003e\u003c/a\u003e\n  \u0026nbsp;\n  \u003ca href=\"https://store.wbcomdesigns.com/jetonomy/docs/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Docs-Read%20the%20Docs-blue?style=for-the-badge\u0026logo=readthedocs\u0026logoColor=white\" alt=\"Documentation\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## What is Jetonomy?\n\nJetonomy adds a fast, self-moderating discussion platform to any WordPress site. It stores forum data in dedicated database tables (not `wp_posts`), uses trust levels to automate moderation, and adapts to your theme via CSS custom properties.\n\n**Free forever.** No feature locks, no nag screens, no premium wall on core features.\n\n## Features\n\n### Space Types\n- **Forums** -- threaded discussions with replies\n- **Q\u0026A** -- questions with accepted answers\n- **Ideas** -- feature voting and roadmap boards\n- **Social Feed** -- activity-style posts\n\n### Community\n- 6 trust levels with automatic promotion\n- Voting, reputation scores, and leaderboard\n- User profiles with activity history and badges\n- @mentions with notifications\n- Post and reply subscriptions\n- Flag/report system with moderation queue\n- **Private topics** -- visible only to author and moderators\n- **Topic prefixes** -- colored labels (Bug, Suggestion, Solved) configurable per space\n- **Similar topic detection** -- see related topics as you type, before posting duplicates\n- **Quote replies** -- click Quote on any reply for attributed blockquotes\n- **Polls** -- add polls to any topic with real-time voting\n\n### BuddyPress Integration (v1.2+)\n- Link BuddyPress groups to forum spaces with automatic member sync\n- Forum tab on BP group pages with topics and New Topic button\n- Forum tab on BP member profiles with Posts, Replies, and Bookmarks sub-tabs\n- Discussion Forum settings in group creation wizard and manage screen\n- Space privacy auto-syncs with BP group privacy changes\n- Linked group shown in forum sidebar About section\n\n### LMS Integration (v1.1+)\n- **LearnDash** -- course enrollment sync (supports LearnDash 5.x)\n- **Tutor LMS** -- course enrollment sync with space access\n- **LifterLMS** -- course and membership enrollment sync\n- **Sensei LMS** -- enrollment status change sync\n- **MasterStudy LMS** -- course enrollment sync\n- Auto-create discussion space when a new course is published\n- Course author assigned as space admin on auto-create\n- Searchable autocomplete for 1000+ courses in access rules\n\n### Moderation\n- Trust-based behavior gates (rate limits, link blocks for new accounts)\n- Content flagging with one-click moderation actions\n- Banned users management\n- Space-level access rules and join policies\n\n### GDPR Compliance\n- Personal data export for messages, reactions, badges, polls, and custom fields\n- Personal data erasure through WordPress privacy tools\n\n### Search \u0026 SEO\n- Full-text search with type filtering\n- Schema.org structured data (DiscussionForumPosting, QAPage)\n- Open Graph and Twitter Cards\n- XML sitemap inclusion\n- Configurable community H1 heading for SEO\n\n### Developer\n- 61+ REST API endpoints with cursor-based pagination\n- Template override system (`theme/jetonomy/` directory)\n- Adapter pattern for search, email, membership, and real-time\n- WordPress Interactivity API for real-time UI updates\n- MemberPress, Paid Memberships Pro, and 5 LMS adapters included\n\n### Migration\n- bbPress importer with dry-run and resume\n- wpForo importer with dry-run and resume (multi-board support)\n- Live progress tracking, no record limit\n\n## Requirements\n\n- WordPress 6.7+\n- PHP 8.1+\n- MySQL 5.7+ or MariaDB 10.3+\n\n## Installation\n\n1. Download the latest release from [Releases](https://github.com/vapvarun/jetonomy/releases)\n2. Upload via **WordPress \u003e Plugins \u003e Add New \u003e Upload Plugin**\n3. Activate the plugin\n4. Run the setup wizard to create your first spaces\n\nYour community will be live at `yoursite.com/community/`.\n\n## Jetonomy Pro\n\nFor growing communities that need more, [Jetonomy Pro](https://store.wbcomdesigns.com/jetonomy-pro/) adds 14 modular extensions:\n\n| Extension | What it does |\n|-----------|-------------|\n| AI Integration | Spam detection, auto-moderation, reply suggestions, thread summaries - OpenAI, Anthropic, or self-hosted Ollama |\n| Emoji Reactions | Slack-style reactions on posts and replies |\n| Private Messaging | 1:1 and group conversations |\n| Polls | Community voting within posts |\n| Analytics Dashboard | Engagement graphs, top spaces, CSV export |\n| Email Digests | Daily/weekly activity summaries |\n| Web Push | Browser notifications |\n| Webhooks | HTTP POST to Zapier, Slack, n8n |\n| Reply by Email | Reply to notifications without logging in |\n| Custom Badges | Auto-award badges based on activity |\n| Custom Fields | Profile and post custom fields |\n| Advanced Moderation | Keyword filters, regex, spam scoring |\n| SEO Pro | Per-space meta, Schema.org, sitemap controls |\n| White Label | Replace all Jetonomy branding |\n\nEach extension is independent -- enable only what you need. Disabled extensions load zero code.\n\n**Pricing:** Personal $69/yr | Developer $99/yr | Agency $199/yr | [Lifetime plans available](https://store.wbcomdesigns.com/jetonomy-pro/)\n\n## Documentation\n\nFull documentation is available at [store.wbcomdesigns.com/jetonomy/docs/](https://store.wbcomdesigns.com/jetonomy/docs/)\n\n## Support\n\n- [Documentation](https://store.wbcomdesigns.com/jetonomy/docs/)\n- [Support](https://wbcomdesigns.com/support/)\n- [Feature Requests \u0026 Bug Reports](https://github.com/vapvarun/jetonomy/issues)\n\n## Contributing\n\nContributions are welcome. Please open an issue first to discuss what you'd like to change.\n\n## Changelog\n\n### 1.4.2 (May 2026)\n\n**New content types**\n- Show \u0026 Tell short-form feed spaces. Optional title, inline content cards.\n- Ideas spaces ship a real roadmap with statuses (planned, in progress, shipped, declined).\n- Q\u0026A spaces let owners pin the accepted answer; an \"Answered\" badge surfaces on the space list.\n\n**Performance and scale**\n- Cleanup cron handlers (trust evaluation, expired restrictions, old notifications, scheduled posts) now process at most 500 rows per run. Filterable via `jetonomy_cron_batch_size`. Sites with large activity logs no longer time out.\n\n**Multisite**\n- Activating Jetonomy across a network now creates the required tables on every existing subsite, and on every new subsite created later. Previously only the current blog got tables.\n\n**Translations and accessibility**\n- Composer, login block, IA state, banned-member notice, header escape hint, prefix builder, and admin import flow are fully translatable.\n- Keyboard focus indicators are visible everywhere; aria-labels added to filter, bulk-action, and select-all controls.\n\n**Fixes**\n- Posts/replies-per-page setting now controls the actual list length and the Load More click count.\n- Vote controls hide when an admin disables voting on a space.\n- Idea status changes notify the right people across the activity log, email digest, and in-app inbox.\n- Native browser confirm dialogs swapped for in-product modals so admin actions feel consistent.\n- Import progress AJAX requires the right capability, not just a nonce.\n- Setup wizard redirect skips under WP-CLI / REST contexts so automation does not get bounced to the wizard.\n- Settings save confirmations no longer disappear before the user can see them.\n- Q\u0026A: accepting a second answer now correctly clears the previously accepted reply (one accepted answer per post).\n\n### 1.4.1 (April 2026)\n\n**Public or private community**\n- New Access Control mode in Settings: Public (anyone can read) or Private (every page requires sign-in). The mode applies to the whole front-end and to the REST API, so private really means private.\n- The sign-in page itself stays reachable in private mode so guests can register or recover their account.\n- Public mode is the default and is unchanged from 1.4.0; existing communities keep working without any setting changes.\n\n**For people who run a space**\n- New Activity Log admin page browses every audit event (post created, reply approved, member banned, role changed) with filters by user, type, and date range.\n- New Revisions admin page browses every saved post / reply revision with a side-by-side diff between any two revisions.\n- Two new REST endpoints for moderation tooling: `POST /jetonomy/v1/moderation/bulk` and `GET /jetonomy/v1/posts/{id}/flags`.\n\n**For members**\n- New Drafts tab at `/community/drafts/` lists every post you saved as a draft.\n- New Bookmarks tab at `/community/bookmarks/` lists every post you bookmarked.\n- Both are personal pages: require sign-in, excluded from search engines.\n\n**Email templates editor**\n- New Reset to default button on every notification template restores the shipped subject and body in one click.\n- The Verification reminder template is now editable from the same screen.\n- Single source of truth for defaults so reset always restores the exact copy the plugin ships with.\n\n**Members who have not confirmed their email**\n- New hourly nudge: members who registered but did not click the verification link receive a single follow-up email after 24 hours (configurable in Settings).\n\n**Under the hood**\n- Per-role REST access matrix is now a verifiable contract: `bin/access-matrix-check.sh` runs 78 checks across 6 roles in either public or private mode, gates the build.\n- Manifest schema bumped to v2: every REST endpoint declares `auth`, `capability`, and `ownership_check` in `audit/manifest.json`.\n\n**Bug fixes**\n- Hidden spaces no longer leak from the homepage spaces list to non-admins.\n- Multi-space moderators see every queue they own at `/community/mod/` instead of being redirected away.\n- The Remove button on flagged content now actually removes the content.\n- Voting works on every install (fixed a Pro analytics aggregator bug that corrupted the AJAX response on sites without the analytics table).\n- Space cards render their icon correctly even when only the icon name was saved.\n- The default qa-type space icon switched from a question-mark to an open book.\n- New-post composer with Pro polls active no longer drops form fields between submit attempts.\n\n### 1.4.0 (April 2026)\n\n**For people who run a space**\n- Edit a space from the front end - title, description, cover, icon, type, visibility, join policy, category, posts-per-page, prefixes\n- Create a space from the front end. Pick which WordPress roles can use the form in Settings → Front-end space creation\n- \"My Spaces\" page lists every space you run + every space you're in\n- Visual icon picker - 16 icons with search and \"Show more\" for 8 extras\n- Cover image uploader works without the WordPress upload-files permission\n- Role dropdown can't accidentally orphan a space - no self-demote, no last-admin-out\n\n**For members**\n- @mention autocomplete in the composer\n- \"New\" pill on threads with replies you haven't read\n- \"Managed by\" sidebar card on every space\n- Admin / Mod pills next to staff names on posts and replies\n- Layout panel (Container Width / Sidebar / Padding) fits Jetonomy to your theme\n\n**Search and sharing**\n- Every public page now ships full search and social cards (title, meta description, canonical, Open Graph, Twitter / X, structured data)\n- Smart fallback share image when a page has no image of its own\n- Pages not meant for search (moderation, search, composer, notifications) excluded automatically\n- Richer structured data - Sitelinks Searchbox on home, Person cards on profiles, Collection indexes on spaces and tags, breadcrumbs everywhere\n- Settings → SEO grew Twitter / X handle, default share image, sitemap link\n- Image alt text fills in automatically on upload\n\n**Sign-in**\n- Login, register, forgot-password - all faster, all in-page (no wp-login.php bounce)\n- Captcha now actually fires on signup when configured\n\n**Polish**\n- In-product confirms and prompts replace browser pop-ups; WCAG 2.1 AA accessible\n- All 8 Jetonomy blocks now visible in the block inserter\n- Shortcodes render styled on any page or page-builder canvas\n- `[jetonomy_widget id=\"...\"]` shortcode embeds any classic widget on any page\n\n**Bug fixes**\n- Category dropdown on Edit Space is no longer empty; \"No category\" saves correctly\n- Space moderators without a WordPress editor role can again use the inline mod tools\n- Join-request notifications link to the right place per recipient\n- Notifications page no longer auto-marks everything read on render\n- GDPR export contains the user's display name\n- Tags on post cards link to the tag page; tag page paginates instead of capping at 30\n- Share dropdown closes when you scroll\n- Auth rate-limit window doesn't reset on retry\n- Banned users can no longer log in (security)\n- Private-post structured data no longer leaks to anonymous visitors (security)\n\n### 1.3.8 (April 2026)\n- New: Cross-space moderation dashboard at `/community/mod/` for site admins; per-space moderation queue at `/community/s/:slug/mod/` for space admins and moderators\n- New: Front-end member role management on `/community/s/:slug/members/` so space admins can promote members to moderator or admin without going through wp-admin\n- New: FluentCommunity integration with paired spaces, two-way profile cross-links, unified avatars, member sync, activity broadcast, and a comment-to-reply bridge\n- New: BuddyPress group integration broadcasts new topics to the paired group's activity stream and round-trips comments back as forum replies\n- Fix: Plugin headings, accent tints, locked-space banner, and warning notices stay readable on dark-panel themes (Reign etc.); dark mode now follows the theme only and no longer auto-applies based on the visitor's OS preference\n- Fix: Sort modes (oldest, newest, unanswered) return the correct topic set; space settings merge on save instead of overwriting; similar-topics widget no longer leaks HTML entities; sitewide search ranks by relevance; rewrite rules flush on activation\n- Fix: Profile tabs no longer clip Drafts on mobile; share dropdown closes on scroll; long words wrap on mobile; member upload permissions; vote-flip optimistic score; TikTok oEmbed renders as an iframe; copy-link feedback when the browser blocks clipboard writes\n- Polish: Fourteen translation-ready strings rewritten for cleaner localisation; the Interactivity API exposes `isLoggedIn` and `loginUrl` so blocks and embeds can render the right CTA without extra REST calls\n\n### 1.3.7 (April 2026)\n- Fix: Reaction picker stays visible across browsers, CDNs, and security plugins that strip the WordPress emoji loader; reactions now ship as bundled colour SVG icons\n- Fix: Posting a Polls topic without a body shows the same friendly inline error as a regular topic instead of silently doing nothing\n- Improved: Plain-language polish across admin labels and emails (Pro extensions, AI provider settings, GDPR exporter, license status, email digest copy)\n\n### 1.3.6 (April 2026)\n- New: Private Messaging recipient typeahead autocompletes from members of spaces you share with the recipient\n- Fix (security): `POST /conversations` enforces shared-space scope on every recipient, matching the UI\n- Fix: \"Message\" actions on the Top Members widget and profile hover cards now open the working compose flow\n\n### 1.3.5 (April 2026)\n- New: Jetonomy Navigation block - permission-aware Category/Space tree for sidebars, scales to thousands of spaces\n- New: Jetonomy Login block - inline login/register panel with rate limiting and nonce protection (renders nothing for logged-in users - no layout shift)\n- Fix: Inline editor no longer collapses paragraphs into a single run-on line on save; historical flattened posts render with paragraphs restored on next page load\n- Release hygiene: `bin/build-release.sh` is now the only path to a release zip - enforces clean-tree gate, version triangulation (Version header + constant + readme Stable tag), production composer install, `php -l` on every staged file, smoke test through `plugins_loaded` + `init`, zip/re-extract/re-smoke-test\n\n### 1.3.4 (April 2026)\n- New: Akismet bypass for admin/space-admin/moderator replies - staff answers no longer quarantined on support communities\n- New: One-click \"Approve\" / \"Not Spam\" action in Replies and Posts admin lists for content held for moderation\n- New: Moderation queue REST endpoint accepts `status=pending|spam|all`\n- New: Bulk trust-level promotion via admin API - useful after migrations and onboarding batches\n- New: Spaces now track real membership - posting or replying in an open space auto-joins the author; one-time upgrade back-fills historical authors\n- Fix: Approve/spam/trash actions from the admin list now correctly update denormalized topic, reply, and member counters\n- New: Admin counter-rebuild tool extended to repair member-count drift (the 1.3.3 tool now covers members too)\n\n### 1.3.3 (April 2026)\n- New: Access Control collapsed from three options to two - \"Public community\" and \"Private community\"; existing installs migrated automatically\n- New: Admin counter rebuild button - refresh topic, reply, and vote counters when they drift after a bulk import or manual DB change (no WP-CLI required)\n- New: Imported/seeded topics preserve their original `created_at` timestamp instead of being stamped with today's date\n- Fix: \"Default Space Type\" setting now actually applies when creating new spaces (both admin UI and REST API); previously defaulted to Forum regardless\n\n### 1.3.2 (April 2026)\n- Fix: Setup wizard PHP deprecation warnings under PHP 8.1+ with WordPress 6.4+ (`strip_tags(null)`, `print_emoji_styles`, `wp_admin_bar_header`)\n- New: `jetonomy_new_post_submit_action` filter - Pro extensions can intercept the new-post form submit URL without mutating DOM after hydration\n\n### 1.3.1 (April 2026)\n- Fix: Theme button hover styles no longer bleed into Jetonomy button states - scoped CSS reset for BuddyX/Reign compatibility\n\n### 1.3.0 (April 2026)\n\n**Share forum threads anywhere**\n- New: Outbound oEmbed - thread URLs unfurl in Slack, Twitter/X, Discord, Facebook, and other WordPress sites with a rich preview card (title, author, excerpt, thumbnail)\n- New: Inbound embed expansion - pasted YouTube, Vimeo, SoundCloud, Spotify, TED Talks and other supported links in posts or replies render as embedded players instead of plain URLs\n- New: Instagram + Facebook embed support via optional Meta Developer App credentials - Settings → SEO → Social Embeds card with a collapsible 6-step setup guide; empty credentials = graceful plain-link fallback\n- New: Richer Open Graph + Twitter Card meta on every thread page - `og:type=article`, `article:author`, `article:published_time`, `article:section`, first-inline-image as `og:image`\n\n**Theme compatibility**\n- New: BuddyX, BuddyX Pro, and Reign theme color + dark mode bridge - forum accent and dark scheme automatically match the active theme with zero custom CSS\n- New: Unified Design Token Bridge - `--jt-*` tokens reference BuddyNext, then theme.json, then hardcoded fallbacks\n\n**AI moderation**\n- New: AI Adapter Layer - pluggable interface for AI providers with built-in self-hosted Ollama support\n- New: AI-powered spam detection for new posts and replies (free, local, no API costs)\n\n**Mobile UX pass**\n- New: `docs/DESIGN-SYSTEM.md` - long-term UI/UX source of truth (breakpoints, typography scale, spacing scale, component patterns, anti-patterns)\n- New: Token scale - `--jt-space-1..12`, `--jt-text-2xs..3xl`, `--jt-tap` (40px)\n- New: Community nav uses Lucide icons with `title` tooltips on mobile, icon+label on desktop/tablet\n- New: Post + reply action bars are uniformly icon-only on mobile (vote / share / bookmark / quote / report / more / react)\n- Fix: Topic listing title/count column rebalance on mobile so titles get 76% of the row width\n- Fix: Post meta row (`.jt-meta`) - \"3 weeks ago\" no longer breaks mid-word on narrow viewports\n- Fix: Firefox time picker on scheduled publish form - split `datetime-local` into separate `date` + `time` inputs so Firefox shows proper native pickers\n- Fix: Publish mode menu flash-of-visible-content on the new topic form\n- Fix: Preact/Interactivity API hydration console warnings from inline `onclick` attributes - replaced with delegated handlers using `data-jt-href`\n- Fix: More menu 3-dots dropdown now visible on touch devices (hover-reveal was hiding it)\n\n**Extensibility**\n- New: 6 ad/content injection hooks for sidebar and reply flow (`jetonomy_sidebar_*`, `jetonomy_reply_*`, `jetonomy_sidebar_after_about`)\n- New: `before_delete_*` filters on every model - third-party plugins can reject deletions by returning `WP_Error`\n- New: Query args filters on every model list method (`jetonomy_posts_query_args`, `jetonomy_spaces_query_args`, etc.)\n- New: Base slug 301 redirect - changing community base in settings now permanently redirects old URLs for SEO continuity\n- New: WP-CLI command module - 13 command roots covering every user/admin journey, plus 5 bundled scenarios (`wp jetonomy scenario run \u003cname\u003e`)\n\n**Quality + CI**\n- New: GitHub Actions CI pipeline - PHP Lint (8.1–8.4), WPCS, PHPStan level 5, Plugin Check (PCP), PHPUnit matrix\n- New: `composer test:free` and `composer test:combo` scripts\n- Improvement: WP_Error checks at every model caller site - prevents fatal errors when `before_delete` hooks reject an operation\n- Improvement: `has_more` pagination accuracy across every list endpoint\n- Improvement: InnoDB engine enforced on all 23 custom tables (migration 1.2.3)\n- Improvement: Vote operations wrapped in DB transactions\n- Improvement: Spaces N+1 query eliminated - visibility filter moved to SQL `LEFT JOIN`\n- Improvement: `jt_notifications.object_type` ENUM extended with `'message'` so Pro private-messaging notifications persist cleanly\n\n**Bug fixes**\n- Fix: `posts_per_page` space setting now actually applies to the topic listing\n- Fix: Guarded EDD Software Licensing SDK's `plugins_api_filter` against non-object `$_data`\n- Fix: Space settings merge (not replace) on save - previously full JSON replacement dropped keys\n- Fix: 10 earlier customer-reported bugs - BP compat crash, notification defaults, vote state indicator, admin View link, join request admin UI, post scheduling defaults, settings write consistency, REST nonce handling, fetch cookie credentials\n- Fix: PHP 8.1 `bool` return type compat\n- Fix: Double reply counter increment on new reply\n- Fix: Space settings cache invalidation\n\n### 1.2.0 (April 2026)\n- New: Private Topics -- mark topics visible only to author and moderators\n- New: Topic Prefixes -- colored labels (Bug, Suggestion, Solved) configurable per space\n- New: Similar Topics -- see related topics as you type, before posting duplicates\n- New: Quote Replies -- click Quote on any reply for attributed blockquotes\n- New: BuddyPress Integration -- link BP Groups to forum spaces with automatic member sync\n- New: Forum tab in BP Group pages with topics and New Topic button\n- New: Forum tab on BP Member profiles with Posts, Replies, and Bookmarks sub-tabs\n- New: Discussion Forum settings in group creation wizard and manage screen\n- New: Linked group shown in sidebar About section\n- Improvement: Third-party admin notices hidden on Jetonomy pages\n- Improvement: Space privacy auto-syncs with BP group privacy changes\n- Improvement: wpForo multi-board import support\n- Fix: Topic title placeholder alignment on all themes\n- Fix: New Topic button hidden for logged-out visitors\n- Fix: Spaces can only be linked to one group at a time\n\n### 1.1.0 (March 2026)\n- New: Configurable Community Title setting for H1 on community home page\n- New: Adapter-specific rule type options in Access Rules (e.g. \"Tutor Course\", \"LearnDash Course\")\n- New: Searchable autocomplete for membership levels -- scales to 1000+ courses\n- New: Human-readable labels in access rules table -- shows course names instead of raw IDs\n- New: Sync Members button to pull in existing enrolled users when creating a rule\n- Fix: H1 heading added to community home page for SEO and accessibility\n- Fix: Membership deactivation now fully removes space access instead of downgrading to viewer\n- Improvement: Priority column hidden from access rules UI for cleaner admin experience\n- Improvement: Action buttons with icons (Sync Members, Delete) in access rules table\n\n### 1.0.1\n- Fix: Renamed internal `.container` to `.jt-container` to prevent CSS class collisions\n- Fix: Community app wrapper fills theme flex/grid parents correctly\n- Fix: Container width auto-detects from theme settings\n- Fix: Hide theme page title bars on community pages\n- Tested with 12 popular themes\n\n### 1.0.0\n- Initial release\n\n## License\n\nGPL v2 or later. See [LICENSE](https://www.gnu.org/licenses/gpl-2.0.html).\n\n---\n\nBuilt by [Wbcom Designs](https://wbcomdesigns.com/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvapvarun%2Fjetonomy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvapvarun%2Fjetonomy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvapvarun%2Fjetonomy/lists"}