🟠 Release v2.454.0
⭐⭐ Moderate Complexity • 17 commits • 87 files changedReward fulfilment tracking, game score stability, and platform polish. Admins can now see every reward redemption with the delivery details members submitted, while members see reward allocation states correctly. Game scores are bounded to prevent invalid states, and emoji avatars preserve their full code points.
What’s New
- See who redeemed each reward and their delivery details — admins now have a dedicated Fulfilment table showing every redemption with member info, redemption timestamp, and all delivery details they provided at redemption
- Correctly display unallocated rewards — members no longer see unallocated rewards marked as “Missed Out”; they’re now properly shown as unavailable
- Prevent invalid game scores — games now enforce score caps at both the API route and the scoring engine to prevent out-of-bounds values
- Fix emoji avatar display — emoji avatars now preserve full Unicode code points instead of truncating multi-byte characters
- Polish admin UI — improved image picker behavior, sharper scratch-game win-rate display, cleaner post creation flow
Apps Updated
User App
✓ Updated - 3 fixes
API
✓ Updated - 3 fixes + 1 feature
Admin
✓ Updated - 4 features + 2 fixes
MCP Server
✓ Updated - 1 fix
Design System
✓ Updated - Banner rendering improvements
Games
— No changes
Detailed Changes
Admin Panel
Admin Panel
New Features
- Reward Fulfilment Tracker — A new “Fulfilment” section in each reward’s analytics page shows a paginated table of every redemption with member avatars, names, redemption timestamps, and all delivery details (shipping address, order info, etc.) the member submitted at redemption time. Empty state messaging clarifies whether the reward collects delivery details and shows “No one has redeemed this reward yet” if there are no redemptions
- Better reward copying — When copying a reward, all redemption codes are now properly reset so the new reward starts with fresh codes
- Improved clarity on community duplication — The “Copy existing community” flow UI is now clearer about what gets copied
- Image picker overflow fixed — The AI image generator in the image picker no longer overflows its container in the admin form
- Win-rate display precision — Scratch game win-rate display now rounds to avoid floating-point noise (e.g., 66.666666% now displays as 67%)
- Removed broken Dark Mode section — Deleted the non-functional “Custom Dark Mode Images” section from the post studio
User App
User App
Bug Fixes
- Correct reward allocation display — Unallocated rewards no longer incorrectly show as “Missed Out”. The reward state logic now properly distinguishes between allocations awaiting completion, completed allocations, and truly missed opportunities
- Emoji avatar preservation — User avatars using emoji characters now display correctly without truncating multi-byte Unicode code points
- Cleaner post creation UX — The “compose prompt” copy in the no-image state has been replaced with a subtle Nudj brand mark, creating a cleaner visual experience
API
API
New Features
- Game score clamping — Game scores are now strictly bounded at the API route handler and enforced within the game scoring engine to prevent out-of-bounds values that could corrupt game state
- Reject disconnected setup challenges — The API now properly rejects challenge setup requests when the underlying setup challenge is not properly connected to the action
- Setup writes observability — Setup mutations now emit structured logs for better debugging and monitoring when setup flows encounter issues
MCP Server
MCP Server
Observability
- Setup operation logging — Setup write operations now generate structured observability data for tracing and debugging agent-driven setup flows
Design System
Design System
Improvements
- Banner image rendering — Enhanced the
get-banner-src.tsutility with more robust image source resolution and fallback handling
Reward Fulfilment Analytics
The new Fulfilment feature gives admins complete visibility into reward redemption outcomes:What admins see
Each reward’s stats page now includes a “Fulfilment” card showing:- Member profile — Name, email, and avatar of who redeemed
- Redemption timestamp — Exact date and time of redemption
- Delivery details — All custom fields the member provided (e.g., shipping address, t-shirt size, delivery instructions)
Member context
The delivery details shown are exactly what members entered at redemption time. If a reward doesn’t collect delivery details, the UI clarifies that (“This reward doesn’t collect delivery details”). If no one has redeemed yet, a helpful empty state guides admins to share the reward.Use cases
- Physical rewards — Admins can track shipping addresses and see fulfilment status in one place
- Contest entries — View all participant details (phone, email, preferences) submitted with entries
- Survey campaigns — See all responses members provided during redemption
- Personalized rewards — Track which variants members selected at redemption
Game Score Boundaries
Games now prevent invalid score states:- Route-level clamping — The game completion endpoint (
/admin/game/[gameConfigId]/complete) validates and bounds scores before processing - Engine-level enforcement — The game scoring engine enforces the same caps internally to catch any edge cases
- Prevention of data corruption — Out-of-bounds scores that previously could corrupt leaderboards are now impossible
Contributors
Release Stats
v2.454.0 deployed on July 21, 2026




