Skip to main content

🟡 Release v2.378.5

⭐⭐ Moderate Complexity • 7 commits • 32 files changed
Stability & Usability Sprint — Fixed sprite upload validation to prevent in-game visual errors, resolved landing page crashes on org selection, and unlocked free giveaway entries for users with depleted point balances. Enhanced game theming and improved webhook processing reliability.

What’s New

For Platform Administrators

  • Game Asset Validation – Sprite uploads (game balls, hoops, logos) are now validated to ensure they have real transparent backgrounds. Prevents users from uploading images with baked-in checkerboard or solid backgrounds that would appear as opaque squares in-game.
  • Organization Dashboard Stability – Fixed 500 errors and error page flashing when switching between organizations. Dashboard now loads seamlessly without interrupting your workflow.
  • Free Giveaway Access – Users can now enter free giveaway campaigns regardless of their current point balance, eliminating unnecessary barriers to participation in zero-cost promotions.

For End Users

  • Proper Game Theming – Game completion screens now inherit the organization’s theme settings, ensuring visual consistency across the entire gamification experience.
  • Free Entry Eligibility – Community members can participate in free giveaway entries even if their point account is at zero or shows a negative balance (e.g., after points expiry).

Apps Updated

User App

✓ Updated - 1 change

API

✓ Updated - 1 change

Admin

✓ Updated - 2 changes

MCP Server

— No changes

Shopify App

✓ Updated - 1 change

Games

— No changes

Detailed Changes

NJ-1032: Game Completion Screen Theming
  • Moved game completion route from /game/[id]/ to /(main)/game/[id]/
  • Game completion screens now inherit organization theme settings
  • Ensures visual consistency with the rest of the user experience
  • Removed duplicate layout logic from isolated game route group
NJ-524: Zero-Cost Giveaway Entries
  • Allow users with zero or negative available balance to enter free giveaways
  • Balance validation now only gates paid entries (cost > 0)
  • Skip creating unnecessary zero-amount debit transactions for free entries
  • Maintains proper transaction tracking for paid purchases
  • Added comprehensive test coverage for zero-balance scenarios
NJ-1023: Sprite Upload Validation
  • Added transparency detection for game asset uploads (basketball, hoop, logos)
  • Automatically rejects fully-opaque images (baked checkerboard or solid backgrounds)
  • Prevents visual errors where sprite backgrounds show as opaque squares in-game
  • Provides clear user guidance: “This image needs a transparent background”
  • Configurable alpha threshold and minimum transparent pixel fraction
  • Enforces PNG output for transparency-required assets
NJ-1019: Landing Page Stability
  • Fixed 500 errors when accessing organization dashboard
  • Eliminated error page flashing during organization selection
  • Replaced server-side redirect() with client-side navigation component
  • Improved hydration compatibility with streamed layouts
  • Added comprehensive integration tests for default community detection
NJ-968: Webhook Processing Enhancement
  • Implemented dark QStash webhook processing route
  • Improved webhook reliability and processing architecture
  • Enhanced backend resilience for webhook-driven events

Admin Highlights

  • 🎨 Game Asset Validation – Sprite uploads now validate transparency to prevent in-game display issues where opaque backgrounds appear as gray/white squares
  • ⚡ Stable Organization Dashboard – Landing page no longer crashes or flashes errors when switching between organizations
  • 🎁 Free Giveaway Flexibility – Users can participate in zero-cost giveaways regardless of their current point balance

User Highlights

  • 🎮 Themed Game Completion – Game completion screens now automatically apply your community’s theme colors and branding
  • 🎁 Free Entry Eligibility – Join free giveaway campaigns even with zero or negative point balances

Technical Details

Landing Page Stability (NJ-1019)

The organization dashboard was experiencing a 500 crash when redirect() was called in a server component that streams data to the client. This conflicted with Next.js hydration, causing the “Rendered more hooks than during the previous render” error that prevented users from accessing their default communities. Fixed by moving the navigation to a DefaultCommunityRedirect client component that uses location.replace() after hydration completes, eliminating the streaming conflict.

Game Sprite Transparency Validation (NJ-523)

Added a new imageDataHasTransparency() utility that scans RGBA pixel data to detect meaningful transparency. Game sprites (basketball, hoop, logos) are composited over a scene background, so they must have a real transparent region. The common failure case is exporting a sprite from an image editor with the transparency checkerboard or a solid background baked into pixels — the result is fully opaque, which renders as an ugly gray/white square in-game. The validator is tunable (alpha threshold and minimum transparent pixel fraction) and fails open on CORS-tainted canvases to avoid blocking valid uploads.

Zero-Cost Giveaway Entries (NJ-524)

Updated the distribution management service to skip balance validation for zero-cost purchases (free giveaway entries). The original code checked availablePoints >= totalPurchasePrice for all purchases, which blocked users with zero or negative available balance from entering free drawings (particularly problematic after points expiry). Now balance validation only gates paid entries (totalPurchasePrice > 0). Also skips creating unnecessary zero-amount debit transactions for free entries, keeping the transaction history clean.

Release Stats

MetricValue
Total Commits7
Lines Added+1,896
Lines Removed-171
Files Changed32

Contributors

solicshop@gmail.comsolicshop@gmail.com2 commits • +445/-36 lines

dch@wenudj.comdch@wenudj.com2 commits • +137/-95 lines

jamescockaynejamescockayne1 commit • +850/-0 lines

ZuhayrK00ZuhayrK001 commit • +271/-39 lines

v2.378.5 deployed on June 12, 2026