What this module is for
Use Bonus Map to build a retention campaign that gives players a daily prize across a fixed period. Each map covers a start-to-end date range, and the system later turns that range into one row per day. Players work through the days like a calendar and claim each day's prize.
A Bonus Map is built draft-first. Creating a map only saves a draft. Operators then configure rewards, generate and review the day rows, translate the card content, confirm every period, and publish the map. The intended player-facing placement must still be checked after launch preparation.
This is a standalone, top-level module. It lives on its own route and is not part of the Bonuses module, even though it produces bonuses behind the scenes.
Included units
List: the grid of all Bonus Maps with status, period, generated-day progress, and deleteForm: the shared create-and-edit wizard where operators name the map, set claim copy and URLs, choose visuals, tune render layout, configure reward generation, generate days, translate/review cards, confirm periods, and publish
When operators usually open this module
- start a new daily-prize campaign
- check which maps are live, scheduled, finished, or still draft
- continue editing a draft map that was started earlier
- remove a map that is no longer needed
- retry generated bonus/card preparation for a partially failed period
Common confusion
- Creating a map does not launch it. A new map is always a draft; period confirmation and map publication are separate required steps.
- The create page only saves the first step. The edit page is the full six-step wizard and contains visuals, render layout, tracking, bonus configuration, day generation, card translation, period confirmation, and publish.
- The status shown in the list is worked out from the publish flag and the period dates, not stored as a single field. A draft always reads
DRAFTregardless of its dates. - The internal key must be unique. Reusing a key that already exists is rejected when saving.
- Once days are generated, the period and bonus configuration are locked because generated day rows and generated bonuses already depend on them.
- Card translation and preview behavior depends on the platform translation service. If translation fails, operators can retry card translation or confirm a period with source-language fallback.
- A
0%prize weight disables that prize type. Missing weights start at33% / 33% / 34%.