Skip to main content

🟠 Release v2.454.0

⭐⭐ Moderate Complexity • 17 commits • 87 files changed
Reward 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

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
Bug Fixes
  • 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
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
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
Bug Fixes
  • 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
Observability
  • Setup operation logging — Setup write operations now generate structured observability data for tracing and debugging agent-driven setup flows
Improvements
  • Banner image rendering — Enhanced the get-banner-src.ts utility 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

dch@wenudj.comdch@wenudj.com8 commits • +2,296/-321 lines

solicshop@gmail.comsolicshop@gmail.com5 commits • +1,771/-273 lines

erek_d@me.comerek_d@me.com3 commits • +4,011/-9 lines

Release Stats


v2.454.0 deployed on July 21, 2026