Page body
What this module is for
Loyalty Programs is the backoffice screen where operators maintain the loyalty-level ladder used by the CRM and related player-facing loyalty logic.
Use it when you need to:
- review the current level sequence
- change point ranges for each level
- adjust the cashback percentage stored for a level
- update bonus codes, expiration settings, tags, or level images
- recalculate loyalty prices for casino games after loyalty configuration changes
Surface map
List: one inline-editable grid where operators manage the full level ladder and submit the whole configuration
What makes this module different
- There is no separate detail route. Operators edit directly inside the grid.
- Saving sends the full level array, not a single-row patch.
Update LP Priceis a separate maintenance action. It recalculates game loyalty pricing and does not itself save the level ladder.
Common confusion points
Cashback Percentageis shown as a percent in the UI, but the stored value is a decimal fraction.- The first level always starts from
0after save because the backend enforces that value. - The grid allows deleting only the last level, which helps keep the level ladder contiguous.
- Level images are selected from the shared asset catalog, but the image picker is only a support dependency. The main module ownership stays in the admin backend loyalty settings flow.
Verification scope
This module is documented from:
- FE route, inline grid behavior, validation schema, and page actions in
nx-admin-fe-workspace - admin read/write and recalculation routes in
gs-admin-backend
nx-workspace is not required for the current loyalty-level semantics. The image picker uses the existing core asset catalog, but it is not the primary source of truth for loyalty-level business rules.