Forums Feature Requests Thread

[Enhancement] Forums: Reaction palette is fixed at 12 emoji — no per-tenant custom reactions

Patrick Bass · Jun 6 · 9 · 1 Locked
[Normal Priority] [Feature Enhancement] [Deployed to Production]
🚀 OP Jun 6, 2026 5:27pm

Area: Forums (audit p2) · Surface: POST reaction toggle (PostReaction), thread.php reaction strip · Dimension: existing-feature-improve · Severity: enhancement

Slack, Discord, and Circle all let communities add their own custom/branded reactions, which is a meaningful identity and engagement feature (inside jokes, brand emoji, channel-specific reactions). Our set is fixed and only changeable by editing PHP and redeploying. Given mobieusChat already supports custom emoji (per the chat-rooms feature notes), forum reactions feeling more limited than chat is an internal inconsistency, and tenant-brandable reactions are a low-cost differentiator.

Evidence

platform/src/Models/PostReaction.php:27-40 ALLOWED_TYPES is a hardcoded const array of exactly 12 types (thumbs-up, heart, laugh, wow, sad, angry, fire, mind-blown, clap, party, rocket, on-target). The model comment at :24 states 'Adding a new type here also requires an emoji entry in templates/forums/thread.php' — i.e. reactions are a code change, not configurable. No per-tenant custom-reaction table exists.

Suggested fix. Introduce a per-tenant reaction-set table (slug, emoji/image, label, sort_order, enabled) seeded with the current 12 defaults, and have PostReaction validate against the tenant set instead of the const. Render the strip from the configured set. Keeps current behaviour as the default seed.

Filed by the automated tenant-app audit and adversarially evidence-verified. Status: verified. Open — not yet actioned.


Patrick Bass
@mobieus

🚀 Jun 7, 2026 10:59am

Shipped and deployed to production. Commit bb50cee4e7.

Per-tenant custom forum reactions: /admin/forums/settings lets admins add custom emoji to the 12 built-in reactions. Stored in config/app.ini. PostReaction::allowedTypes() merges custom with defaults at render time.

Closed as: deployed.


Patrick Bass
@mobieus

Log in or register to reply to this thread.