Design for a shareable session
For a technical producer, this purchase recovery prototype should make every player action and result shown in the game easy to evaluate. Write how to handle reloads, interrupted delivery, duplicate clicks, and insufficient Koin without double granting. Map preview, confirmation, a cancelled choice, a Koin shortage, pending, success, delivery, owned, and reload. Give every failure a safe next action. Assume a player may open the game from a link in a new browser with limited prior context. Put item identity, Koin balance, and the return route inside the playable experience.
Handle tabs and navigation
Try refresh, back navigation, a second tab, and returning after the page was suspended. A browser interaction must not imply native-store ownership or silently repeat a delivery action.
Keep canvas and interface coordinated
If the game uses a canvas, make focus, keyboard input, scaling, and purchase overlays cooperate. Closing the choice should restore game controls without leaving hidden buttons or trapped focus.
Name every state and owner
Separate preview, confirmation, pending, success, delivery, owned, insufficient Koin, cancel, interrupted, and reopened states. Assign later production work for identity, persistence, native billing, security, refunds, policy, and monitoring.
Define idempotent recovery
Repeated confirmation, a slow response, navigation during delivery, and reopening must resolve to one result. Record which state is authoritative and how the player can safely retry without another grant or Koin deduction.
Turn the prototype into tickets
Capture the visible behavior first, then create implementation tasks with expected examples for each transition and platform boundary. Do not translate a working browser interaction into an unsupported claim that backend commerce is complete.
Keep pending understandable
If delivery is interrupted, explain whether the result is pending, safe to retry, or already complete. Do not show both failure and success. Test that behavior using HTML5 games. Browser delivery does not prove native store billing or platform approval.
Make retry idempotent
Repeated clicks and reloads should resolve to one purchase result. The player must never receive duplicate items or lose Koin twice. Test that behavior using HTML5 games. Browser delivery does not prove native store billing or platform approval.
Return to a safe game state
A cancelled choice, an insufficient balance, and recoverable errors should preserve progress and offer a clear return or retry action. Test that behavior using HTML5 games. Browser delivery does not prove native store billing or platform approval.