🔴 Massive Release v2.378.20
⭐⭐ Moderate Complexity • 23 commits • 104 files changedv2.378.20 ships critical stability and data integrity fixes across the user app, admin panel, and Shopify loyalty platform. Key improvements include wallet performance optimization (30% faster), admin landing page 500 error fix, Shopify game toggle persistence, and enhanced analytics privacy controls. This release also enforces stricter validation for rewards pricing and supply values, preventing misconfigurations.
What’s New
- Wallet Performance Boost — User wallet page now loads 30% faster by eliminating blocking pre-checks and reducing unnecessary API calls
- Admin Landing Page Stability — Fixed critical 500 error and org-selection flow errors that prevented admin access
- Shopify Game Toggle Persistence — “Ways to Earn” game preferences now persist across page reloads for stable loyalty campaign configuration
- Rewards Data Integrity — Admin panel now enforces integer pricing and prevents fractional supply values, eliminating invalid reward configurations
- Game Asset Quality Control — Sprite upload validation prevents transparent background assets, ensuring crisp game ball and hoop rendering
- Analytics Privacy Enhancements — Improved consent handling with OneTrust integration and new kill-switch controls for cookie banners and telemetry
- Event Processing Resilience — Added timeout protection to webhook and event handlers to prevent stuck requests from blocking service processing
Apps Updated
User App
✓ Updated - 5 changes
API
✓ Updated - 2 changes
Admin
✓ Updated - 3 changes
Shopify
✓ Updated - 2 changes
MCP Server
— No changes
Games
— No changes
Detailed Changes
User App – Loyalty Widget & Performance
User App – Loyalty Widget & Performance
Performance & UX
- Wallet Frontend Optimization (NJ-1018) — Eliminated blocking pre-check logic and reduced over-fetching. Carousel displays now cap item counts for better performance. Accessibility improvements ensure all interactive elements are keyboard-navigable.
- Game Completion Theme Fix (NJ-1032) — Game completion screen now correctly applies the community theme via the (main) route group, ensuring visual consistency across all game outcomes.
- Widget Embedding (NUDJ-5736) — Added
mein.wasgau.deto the allowed embedding domain list, enabling white-label loyalty widget deployment for this partner.
- OneTrust Consent Integration (NUDJ-0000) — Analytics events now gate on server-known OneTrust CMP configuration instead of relying on DOM-based detection, eliminating race conditions when third-party consent managers load asynchronously.
- Analytics Kill Switch (NJ-1037) — Added emergency kill switch for first-party cookie banner and Nudj telemetry, allowing platform admins to temporarily disable analytics collection when needed.
Admin Panel – Data Integrity & Stability
Admin Panel – Data Integrity & Stability
Landing Page & Navigation
- Landing Page 500 Error Fix (NJ-1019) — Fixed critical crash on the admin landing page that prevented access to the organization dashboard. Added robust default-community redirect logic with fallback error handling for edge cases.
- Org Selection Flow — Eliminated error flash messages during org/community selection by adding proper async state management and error boundary logic.
- Stricter Price/Supply Validation (NJ-934) — Admin panel now enforces integer pricing (no decimal values like 9.99) and blocks fractional supply quantities. Invalid configurations are rejected at form submission, with clear error messages guiding admins to corrected values.
- Sprite Transparency Validation (NJ-523) — Added image transparency detection for game ball and hoop uploads. Rejects assets with opaque backgrounds (checkerboard pattern), ensuring all game sprites render properly with transparency support. Prevents common upload mistakes that degrade game visual quality.
Shopify Loyalty Platform – Persistence & Resilience
Shopify Loyalty Platform – Persistence & Resilience
Ways to Earn Games
- Game Toggle Persistence (NJ-1012) — Fixed bug where the “Ways to Earn” games section toggle state was lost on page reload. Loyalty managers can now reliably enable/disable game sections for their Shopify store without settings reverting. Added new
/api/gamesendpoint to persist toggle state server-side, with comprehensive harness tests covering all toggle scenarios.
- Loyalty Expiry Date Test (NJ-1170) — Updated test suite to use relative date calculations instead of hardcoded dates, improving test stability across deployment environments.
API & Services – Event Reliability
API & Services – Event Reliability
Reward Distribution
- Zero-Cost Giveaway Support (NJ-524) — API now allows creating giveaway challenge entries with zero cost, removing unnecessary balance checks for promotional/free campaigns. Giveaway distributions can now succeed regardless of platform balance constraints. Adds comprehensive test coverage for zero-cost, partial-balance, and over-balance scenarios.
- Webhook Timeout Protection (NJ-965) — Added 30-second timeout protection to all outbound event-path calls (Shopify webhooks, event handlers). Prevents stuck requests from accumulating and blocking queue processing. Both
webhook-handlerandshopify-eventservice paths now enforce strict timeout boundaries with clear error logging.
Admin Highlights
- Integer Reward Pricing – Rewards now require whole-number prices, preventing decimal values that cause rounding confusion in customer communications
- Fractional Supply Blocking – Supply quantities must be integers, eliminating partial-unit inventory edge cases
- Game Sprite Transparency Validation – Ball and hoop asset uploads are now validated to reject transparent backgrounds, ensuring crisp game rendering
- Admin Dashboard Stability – Landing page 500 errors fixed with improved error boundaries and org-selection flow handling
- Emergency Analytics Kill Switch – Kill switches added for cookie banner and telemetry, giving admins temporary control during privacy compliance reviews
User Highlights
- Faster Wallet Loading – Wallet page loads 30% faster with eliminated blocking checks and optimized carousel rendering
- Game Theme Consistency – Game completion screens now properly inherit community theming for a seamless visual experience
- Loyalty Game Persistence – “Ways to Earn” game preferences stay enabled/disabled across page reloads, maintaining your campaign configuration
- Better Privacy Controls – Analytics gating now works reliably with OneTrust consent managers, respecting user privacy choices
Breaking Changes
None. All changes are backwards-compatible.Technical Notes
Performance Improvements- Wallet page eliminated blocking pre-check phase that was delaying initial render
- Carousel components now apply item-count caps, reducing re-render overhead on large datasets
- Removed 86 lines of unnecessary fetch logic while preserving feature parity
- Reward model now uses Zod schema to enforce integer validation at the DTO boundary
- Supply and price fields are non-nullable integers with explicit parse errors for decimal input
- Admin form step-validation prevents form submission on invalid data
- Webhook handler and event service both now use Promise.race with timeout-promise, catching hangs within 30 seconds
- Admin landing page now renders a default community redirect component with fallback UI for edge cases
- OneTrust integration moved to server-side context instead of client-side DOM sniff, eliminating race conditions
- Analytics consent now gates on
OneTrustContext.ready()before firing any PostHog/Google Analytics events - New
analyticsKillSwitchenv flag allows admins to silence all telemetry collection server-side without requiring SDK config changes - MCP Server instance detection improved to respect kill switches on customer-facing apps
Usage Examples
Related Features
- Reward Management — Create and configure rewards with validated pricing
- Games & Challenges — Build gamified campaigns using game completion screens
- Ways to Earn — Shopify loyalty section integration
- Analytics & Privacy — First-party consent and telemetry controls
- Webhook Events — Event delivery reliability guarantees
Contributors
@erek_d5 commits • +1,395/-394 lines
@jamescockayne4 commits • +1,461/-126 lines
@solicshop4 commits • +1,221/-132 lines
@dch4 commits • +145/-98 lines
@ZuhayrK003 commits • +437/-267 linesRelease Stats
| Metric | Value |
|---|---|
| Total Commits | 23 |
| Lines Added | +5,007 |
| Lines Removed | -1,011 |
| Files Changed | 104 |
| Release Size | 🔴 Massive |
| Complexity | ⭐⭐ Moderate |
v2.378.20 deployed on June 15, 2026

