Streaks & rewards
Streaks and rewards are the primary retention lever. The reward_configs table stores the current tunable values, edited from Engagement → Streaks & rewards.
What the streak does
Section titled “What the streak does”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 day | Coins granted |
|---|---|
| 1 | 5 |
| 2 | 5 |
| 3 | 10 |
| 4–6 | 10 |
| 7 | 30 (weekly bonus) |
| 8–13 | 15 |
| 14 | 60 (fortnight) |
| 15+ | 20 |
| 30 | 100 (monthly) |
Curve is stored as an ordered array in reward_configs.streak_curve.
Rewarded ads
Section titled “Rewarded ads”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.
Streak recovery
Section titled “Streak recovery”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.
Auditing changes
Section titled “Auditing changes”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.
API calls
Section titled “API calls”| Action | Endpoint |
|---|---|
| Get config | GET /v1/admin/rewards-config |
| Update config | PUT /v1/admin/rewards-config |
Full details in API: Engagement.