Skip to main content

🔴 Massive Release v2.387.5

⭐⭐ Moderate Complexity • 51 commits • 466 files changed
v2.387.5 is a comprehensive platform update delivering major UX improvements, new gamification features, and significant Shopify integration enhancements. Key highlights include a rebuilt admin command palette with faster search, a new Runway 3D plane-landing game, per-step achievement insights for better engagement tracking, Shopify multi-language support, and a suite of stability and safety improvements. This release strengthens the core Nudj platform while expanding customization options for Shopify partners.

What’s New

  • Rebuilt Admin Command Palette — ⌘K navigation now features canonical sidebar integration, expanded search results, and significantly faster queries for instant platform access
  • Runway 3D Game Launch — New immersive plane-landing game adds visual variety to challenge libraries with 3D graphics, dynamic difficulty levels, and brand-customizable aircraft
  • Achievement Insights Breakdown — Per-step progress charts pinpoint exactly where users drop off in multi-step achievements, enabling data-driven challenge refinement
  • Shopify Multi-Language Support — Loyalty platform now supports French and additional languages via react-i18next, enabling international Shopify storefronts
  • Shopify Storefront Widget Verification — Comprehensive end-to-end harness testing verifies loyalty account, FAB, checkout drawers, and referral widgets across all storefronts
  • Destructive Action Safety — Type-to-confirm guards prevent accidental deletion of loyalty settings, rewards, and customer configurations
  • Optimized Cache Invalidation — API now supports array-valued cache tags for efficient batch operation invalidation and improved performance
  • Shopify Data Synchronization — Loyalty state now writes back to Shopify customer metafields for unified customer data across platforms
  • Enhanced Observability — Shopify money-path logging now includes detailed error context with structured traces for faster incident response

Apps Updated

User App

✓ Updated - 5 changes

API

✓ Updated - 6 changes

Admin

✓ Updated - 2 changes

Shopify

✓ Updated - 19 changes

Games

✓ Updated - 5 changes

MCP Server

— No changes

Detailed Changes

Performance Enhancements
  • Community Prefetch Optimization (NJ-1169) — Stopped eagerly prefetching every suggested community on page load. User app now performs lazy, on-demand prefetching, reducing initial payload and improving perceived navigation speed.
  • Theme Fetch Optimization (NUDJ-0000) — Eliminated unnecessary nav theme fetch during layout rendering, reducing layout thrashing and improving First Contentful Paint times.
Stability & SSR
  • Missing Detail Content Handling (NUDJ-0000) — Fixed SSR crashes when challenge or reward detail content is unexpectedly missing. Graceful fallback rendering prevents 500 errors and improves resilience.
  • Prediction Dropdown Stability (NJ-1177) — Fixed crash in community prediction dropdown by keeping cmdk CommandList mounted. Resolves race conditions in command palette unmount lifecycle.
Authentication
  • Email Normalization (NJ-1174) — Email addresses are now lowercased before OTP token lookup, preventing authentication failures from case mismatches (e.g., User@Example.com vs user@example.com).
Command Palette Rebuild
  • ⌘K Canonical Navigation (NJ-955) — Completely rebuilt command palette integrates with the canonical sidebar navigation. Expanded search now includes pages, sections, and actions with faster relevance ranking. Enhanced keyboard navigation and recents tracking provide power-user shortcuts.
Achievement Analytics
  • Per-Step Progress Breakdown (NJ-1003) — Achievement Insights now display step-by-step completion rates in a visual chart, showing exactly where users complete or abandon multi-step challenges. Enables data-driven challenge optimization.
Authentication
  • Email Case-Insensitive Lookup (NJ-1174) — OTP token verification now handles email case variations, ensuring admins can log in regardless of email capitalization.
Runway 3D Game
  • Runway Game Launch (NJ-999) — New immersive plane-landing game featuring 3D graphics, dynamic difficulty progression, brand-customizable aircraft colors/patterns, and variable scoring multipliers. Harness-tested for all game variants with comprehensive coverage.
Game Customization
  • Editable Game Brand Colors (WS-566) — Game brand colors now map from theme.accent with per-game overrides, allowing admins to customize game appearance without modifying theme settings.
Game Stability
  • Memory Game Score Transfer Fix (NJ-1169) — Fixed hang when memory game scores transfer at the end of gameplay. No longer blocks subsequent challenge progression.
  • Replay/Retry Removal (NJ-1169) — Removed non-functional “Replay” and “Retry” buttons from memory game-over modal, eliminating confusion about unavailable features.
  • Sound Storage Permission Handling (NUDJ-0000) — Gracefully handle denied browser sound storage permissions without crashing game initialization.
Internationalization & Localization
  • React-i18next Integration (NJ-1028) — Wired react-i18next across Shopify app. Community Profile page, loyalty settings, and onboarding flows now fully support French and additional languages with locale detection.
Storefront Verification & Testing
  • Widget Verification Matrix (NJ-909) — Comprehensive end-to-end harness test suite verifies all storefront widgets: loyalty account page, floating action button (FAB), points-at-checkout drawer, referral nudge, points-earning product cards, and ways-to-earn sections. Blocks regressions with matrix-based coverage.
  • App Proxy Authentication Fix (NJ-909) — Fixed App Proxy authentication on widget endpoints, ensuring storefront widgets load securely behind Shopify’s auth layer.
Data Synchronization
  • Shopify Metafield Sync (NJ-830) — Loyalty state now writes back to Shopify customer metafields, enabling unified customer data across Nudj and Shopify admin. Customers see their points, tier, and activity in Shopify’s native admin.
  • Deduped Loyalty Settings (NJ-828) — Collapsed duplicate loyalty settings screens and consolidated referral program configuration into a single, streamlined admin experience. Theme-editor pointer nudges guide admins to customize appearance.
Concurrent Safety & Data Integrity
  • Optimistic Concurrency on Points Config (NJ-1026) — Points-config write paths now include optimistic concurrency guards, preventing race conditions when multiple managers edit settings simultaneously.
  • Type-to-Confirm Destructive Actions (NJ-1024) — Deleting loyalty settings, rewards, or access rules now requires admin to type a confirmation phrase, preventing accidental data loss.
  • Scoped Reward Unlink (NJ-1023) — Unlink-all-rewards operation now scopes to individual rewards, applies pagination, and offers archival instead of deletion for safer bulk operations.
  • Community Settings Mass-Assignment Guard (NJ-1020) — Fixed mass-assignment vulnerability in update-community-settings endpoint. ID field cannot be overridden by attacker input.
Configuration Resilience
  • Collapse Referral Config Screens (NJ-1027) — Merged duplicate referral config screens, unharness setup, and surface previously swallowed validation errors with clear messaging.
  • Access & Scheduling Navigation (NJ-1016) — Wired Access & Scheduling features into the main settings navigation, removing orphaned coming-soon stub routes.
  • Checkout Redeem Unification (NJ-1006) — Unified checkout redeem context wire contract so the points-redemption slider renders reliably on all checkout variants.
Feature Completeness
  • Loyalty Settings Wire Real APIs (NJ-1008, NJ-1009) — Both loyalty settings pages now wire their fake save operations to real backend APIs, removing stub behavior and enabling full admin configuration persistence.
  • Points Earned Card Integration (NJ-1010) — Loyalty Activity “Points Earned” card now wires to the real aggregate data source instead of mock data.
  • Mock Data Local-Dev Only (NJ-1011) — Mock Data toggle and demo analytics are now gated to local dev mode only, preventing accidental staging/production use.
Logo & Banner Persistence
  • Community Profile Logo/Banner Removal (NJ-1184) — Logo and banner removal on Community Profile page now persists correctly instead of reverting on refresh.
Onboarding Routing
  • Layout-Based Onboarding Routes (NJ-1173) — Onboarding step routes now render via layout <Outlet/> pattern, fixing navigation and state management during setup flows.
Sign-Up Event Toggle Disable (NJ-1013) — Disabled non-functional “Sign up” earning-event toggle in earning-events configuration. Users still see the option marked “Coming soon” to avoid confusion.Observability
  • Money-Path Error Logging (NJ-1025) — Enhanced observability on money-path catches with markSpanErrored() and structured logs, enabling faster incident response when Shopify integrations fail.
Cache Optimization
  • Array-Valued Cache Tags (NJ-1000) — API now supports array-valued cache tags for efficient batch operation invalidation. When a single operation affects multiple entities (e.g., $in queries), all affected entries invalidate in one call instead of individual tag operations.
Integration & Validation
  • Integration Path-ID + Input Validation (NJ-1067) — Added strict path-ID validation and input schema checking to integration endpoints. Converts 500 server errors to 4xx client errors when invalid paths or payloads are supplied, improving error clarity for API consumers.
  • Skip Orphaned Integration Communities (NJ-1036) — Analytics and query endpoints now skip communities with broken integration links instead of failing the entire operation, improving resilience.
Analytics Accuracy
  • CLAIMED Tile Counts Progress, Not Assets (NJ-1002) — Fixed analytics dashboard CLAIMED tile to count claims from UserProgress records instead of reward asset distribution. Eliminates inflation from draft/expired rewards and provides accurate engagement metrics.
Security & Queue Reliability
  • QStash Signature Verification (NJ-970) — Implemented cryptographic signature verification for QStash queue and schedule callbacks. Prevents spoofed webhook attacks and ensures only authorized Upstash workers trigger queue handlers.
Coverage & Testing
  • Integration API Spec-Driven Coverage (NJ-1140) — Built spec-driven integration test suite that enforces coverage invariants against the OpenAPI spec. Tests discover and validate every integration endpoint, catching drift and spec violations early.

Admin Highlights

  • ⌘K Command Palette – Rebuilt with canonical sidebar integration, expanded search, and fast relevance ranking for instant platform discovery
  • Per-Step Progress Charts – Achievement Insights show completion rates at each step to pinpoint user drop-off points and optimize challenge design
  • Shopify Multi-Language Support – Loyalty platform now works in French and supports additional locales via react-i18next
  • Editable Game Brand Colors – Override theme.accent per-game for custom aircraft/ball colors and visual branding
  • Destructive Action Confirmation – Type-to-confirm guards prevent accidental deletion of loyalty settings, rewards, and customer data
  • Scoped Reward Unlink – Safe bulk-unlink with pagination and archival option instead of permanent deletion
  • Optimistic Concurrency Guards – Points-config writes protected against race conditions from simultaneous admin edits
  • Loyalty Settings Wire Real APIs – Both settings screens now persist changes server-side, removing stub behavior
  • Community Metafield Sync – Loyalty state writes to Shopify customer metafields for unified data across platforms
  • App Proxy Security – Storefront widgets now authenticate securely through Shopify’s App Proxy auth layer
  • Access & Scheduling Navigation – Main settings nav now includes access control and scheduling features
  • Money-Path Observability – Enhanced error logging with structured traces for faster incident response

User Highlights

  • Faster Command Palette – Navigation is significantly quicker with expanded search and canonical integration
  • Runway 3D Game – New immersive plane-landing game adds visual variety with brand-customizable aircraft
  • Better Game Performance – Memory game no longer hangs during score transfer for seamless gameplay
  • Stable Game Branding – Game colors now inherit community theme and persist across sessions
  • Multi-Language Loyalty – Shopify stores can now configure loyalty features in French and other languages
  • Community Prefetch Efficiency – Faster app startup and navigation from optimized prefetching

Breaking Changes

None. All changes are backwards-compatible.

Technical Notes

Performance Gains
  • Community prefetch elimination reduces initial user app payload and improves perceived navigation speed
  • Array-valued cache tags reduce batch operation invalidation from O(n) tag operations to O(1)
  • Theme fetch optimization eliminates layout thrashing and improves FCP
Stability Hardening
  • SSR missing-content fallback prevents 500 errors from incomplete detail pages
  • Email case-insensitive OTP lookup prevents auth failures from case mismatches
  • Optimistic concurrency guards on points-config prevent race-condition data corruption
Security Enhancements
  • QStash signature verification prevents spoofed webhook attacks on queue handlers
  • Mass-assignment guard on community-settings prevents ID field override attacks
  • Type-to-confirm destructive actions require explicit admin intent
Data Integrity
  • CLAIMED analytics tile now counts user progress claims, not reward distribution assets, for accurate engagement metrics
  • Shopify metafield sync enables unified customer records across platforms
  • Integration path-ID validation converts 500 errors to 4xx client errors for better observability

Usage Examples

// Array-valued cache tags for batch invalidation (API)
// Instead of invalidating n tags individually:
await Promise.all(
  communityIds.map(id => cache.invalidate(CacheTag.Community.Keyed(id)))
);

// Now invalidate all at once:
await cache.invalidate({
  tags: [CacheTag.Community.Multiple.Keyed(communityIds)]
});

Contributors

erek_d@me.com@erek_d16 commits • +170,216/-4,056 lines

solicshop@gmail.com@solicshop15 commits • +9,497/-2,298 lines

dch@wenudj.com@dch11 commits • +2,758/-2,166 lines

ZuhayrK00@ZuhayrK005 commits • +13,892/-1,623 lines

jamescockayne@jamescockayne1 commit • +477/-33 lines

Release Stats

MetricValue
Total Commits51
Lines Added+196,629
Lines Removed-9,718
Files Changed466
Release Size🔴 Massive
Complexity⭐⭐ Moderate

v2.387.5 deployed on June 17, 2026