Skip to main content

🔴 Massive Release v2.378.20

⭐⭐ Moderate Complexity • 23 commits • 104 files changed
v2.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

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.de to the allowed embedding domain list, enabling white-label loyalty widget deployment for this partner.
Analytics & Privacy
  • 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.
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.
Reward Configuration
  • 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.
Game Asset Upload
  • 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.
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/games endpoint to persist toggle state server-side, with comprehensive harness tests covering all toggle scenarios.
Testing
  • Loyalty Expiry Date Test (NJ-1170) — Updated test suite to use relative date calculations instead of hardcoded dates, improving test stability across deployment environments.
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.
Event Processing
  • 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-handler and shopify-event service 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
Data Integrity Enforcement
  • 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
Reliability Hardening
  • 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
Privacy & Compliance
  • Analytics consent now gates on OneTrustContext.ready() before firing any PostHog/Google Analytics events
  • New analyticsKillSwitch env 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

// Creating a zero-cost giveaway entry (API v2)
POST /api/v2/admin/challenges/{challengeId}/giveaway-entries
{
  "cost": 0,
  "userId": "user-123",
  "quantity": 1
}
// Previously: would fail if user balance was below a threshold
// Now: succeeds regardless of balance, enabling true free promotions

Contributors

erek_d@me.com@erek_d5 commits • +1,395/-394 lines

jamescockayne@jamescockayne4 commits • +1,461/-126 lines

solicshop@gmail.com@solicshop4 commits • +1,221/-132 lines

dch@wenudj.com@dch4 commits • +145/-98 lines

ZuhayrK00@ZuhayrK003 commits • +437/-267 lines

Release Stats

MetricValue
Total Commits23
Lines Added+5,007
Lines Removed-1,011
Files Changed104
Release Size🔴 Massive
Complexity⭐⭐ Moderate

v2.378.20 deployed on June 15, 2026