🔴 Release v2.473.4
⭐⭐ Moderate Complexity • 8 commits • 114 files changedThis release delivers a critical widget reliability fix that prevents customer experiences from disappearing when identity tokens expire, plus significant admin workflow improvements for game content management and theme customization. Admins can now bulk-manage game text across languages with a safety-gated diff preview, and define custom card border styles to match brand aesthetics.
What’s New
- Widget Recovery from Expired Identity Tokens – Loyalty widgets now gracefully recover when merchant-supplied identity JWTs expire (10-minute lifetime), instead of silently disappearing for cached page loads
- Game Text Export/Import with Diff Preview – Download game text as JSON, translate across languages, and upload with a per-field diff preview before applying changes—eliminating manual Postman workflows
- Custom Card Border Radius Presets – Define brand-specific border styles for cards in theme settings; admins can choose preset radii or apply custom values to match design systems
- Theme-Aware Loading Feedback – Preview mode switcher now shows a loading indicator when transitioning between Widget and Hub previews, eliminating ambiguity during preview loads
- Controlled Community Branding Visibility – Detail page surfaces now respect community identity visibility settings, giving admins finer control over brand presence on secondary pages
Apps Updated
User App
✓ Updated — 2 fixes
API
✓ Updated — Schema & data model changes
Admin
✓ Updated — 3 features & improvements
MCP Server
— No changes
Games
— No changes
Packages
✓ Updated — Models & database
Detailed Changes
User App
User App
Widget JWT Recovery (NJ-1908) — The embedded widget now survives expired identity tokens. When a merchant page is cached or CDN-served longer than 10 minutes, the widget previously showed nothing. Now it re-resolves callback tokens once, then boots in guest/sign-in mode if needed. 373 new test cases ensure recovery works across static tokens, callback tokens, and origin rejections.Community Identity Visibility (WS-611) — Detail page surfaces (post details, parallax layouts) now respect the community branding visibility setting, preventing unwanted brand exposure on secondary pages. Includes 145 new test cases covering layout combinations.
API
API
- Updated admin schema to support custom card border radius presets
- Extended integration schema with new border-radius configuration fields
- Added database models for style platform configuration with border-radius storage
- New DTOs to represent custom border styles in community theme configurations
Admin
Admin
Game Text JSON Export/Import (NJ-1871) — A new admin workflow for managing game text across languages. Download current game text as JSON, send to translators, and upload back. Before applying changes, a per-field diff preview shows exactly what will change — field-by-field comparison with a safety gate. Eliminates building JSON bodies in Postman and prevents silent overwrites.Custom Card Border Radius (WS-614) — Theme settings now expose border-radius presets for styled cards. Admins select from preset options (rounded, pill, sharp) or define custom pixel values. The setting cascades through the widget’s card components via CSS variables, instantly visible in the live preview panel. 26 new test cases ensure presets render consistently across light/dark modes and different card types.Preview Loading Indicator (NJ-1910) — The Widget/Hub preview switcher now displays a loading indicator while the preview reloads, providing clear visual feedback that the system is responding.
For Platform Admins
Game Content Management at Scale
If you manage game text across multiple languages, the new JSON export/import workflow saves hours of manual setup:- Open a game’s config form
- Click Download Game Text to get a JSON file with all translatable fields
- Send to a translator or translation service
- Upload the translated file back
- Review the side-by-side diff showing every changed field
- Confirm to apply (or cancel to discard)
Brand-Consistent Card Styling
Customize card appearance in Branding & Appearance settings:- Go to Control Room → Settings → Branding & Appearance
- Under Visual Style, choose a Border Style preset (Rounded / Pill / Sharp)
- Or define a custom border radius in pixels
- Watch the live widget preview update instantly
- Save, and the style rolls out to all widgets in the community
For End Users
The loyalty widget is now more reliable when accessed from cached or CDN-served pages. If an identity token expires mid-session, the widget recovers gracefully instead of disappearing—you’ll see a sign-in prompt or guest mode, and engagement continues without interruption.Technical Notes
-
Widget Recovery Strategy: When a merchant-supplied identity JWT fails verification (401), the embed script now:
- For callback tokens: re-resolves once (merchants can refresh stale tokens this way)
- If re-resolved token still rejected: falls back to no-JWT boot (guest/sign-in mode)
- For static tokens: skips pointless replay, goes straight to no-JWT fallback
- For origin rejections (no JWT sent): renders nothing (intended behavior preserved)
- Game Text Serialization: JSON export/import uses a canonical field-mapping schema to ensure round-trip fidelity. The diff engine is field-aware, not line-based, so multi-line field changes render cleanly.
-
Border Radius Inheritance: Border styles cascade through CSS custom properties (
--border-radius-preset) on the widget root, so all nested card elements inherit consistently without individual overrides.
Contributors
@dch4 commits • +4127/-314 lines
@solicshop2 commits • +2359/-34 lines
@HienH1 commit • +18/-4 linesRelease Stats
v2.473.4 deployed on August 5, 2026

