Skip to content

Streaks & rewards

Streaks and rewards are the primary retention lever. The reward_configs table stores the current tunable values, edited from Engagement → Streaks & rewards.

A user gets a daily streak by opening the app at least once every day (their local timezone). Each streak day grants a small coin reward. Longer streaks grant progressively more.

Default curve:

Streak dayCoins granted
15
25
310
4–610
730 (weekly bonus)
8–1315
1460 (fortnight)
15+20
30100 (monthly)

Curve is stored as an ordered array in reward_configs.streak_curve.

Users can watch a rewarded video ad to earn coins: capped at 3 per day (per CONSTANTS). Configurable:

  • rewarded_ads_daily_cap: default 3. Do not exceed 3 without a discussion with product.
  • rewarded_ads_coin_reward: default 5 coins per ad view.
  • rewarded_ads_blackout_at_cliffhanger: bool, default true. Enforces the no-ad-at-cliffhanger rule.

If a user misses a day, their streak resets to 0. Optional recovery:

  • streak_recovery_cost_coins: default 30. Users can pay coins to restore a broken streak (once per week max).
  • streak_recovery_max_gap_days: default 1. Only 1-day gaps are recoverable.

Every save of the reward config writes to AuditLog with the full before/after JSON. Roll back by reading the audit entry and pasting the before payload.

ActionEndpoint
Get configGET /v1/admin/rewards-config
Update configPUT /v1/admin/rewards-config

Full details in API: Engagement.