1.9 KiB
Growth Milestone Pro Rewards Design
Goal
Reward active paid Pro members with additional membership time when PolyWeather reaches verified-user growth milestones.
Confirmed Rules
- Growth is measured using verified Supabase Auth users.
- The historical launch baseline is:
- 588 total registered users
- 573 verified users
- recorded on 2026-06-12
- Milestones and rewards:
- 600 verified users: +1 Pro day
- 750 verified users: +2 Pro days
- 1000 verified users: +3 Pro days
- every additional 100 verified users after 1000: +3 Pro days
- Each milestone settles at most once.
- Only users who currently have active membership access and have at least one confirmed real payment are eligible.
- Trial-only, manual-grant-only, and reward-only users are excluded.
Architecture
The Telegram Bot process already acts as the single background-job owner. A new growth milestone loop runs there on a low-frequency interval. It reads verified Auth-user counts, writes one daily growth snapshot, checks unsettled milestones, selects eligible paid members, and grants an append-only bonus subscription window.
SQLite stores daily snapshots, milestone settlement summaries, and per-user payout records. Supabase stores the actual bonus subscription. The bonus source contains the milestone number so a retry can detect an already-issued reward.
Failure Handling
- Supabase read failures do not advance or settle a milestone.
- Successful user payouts are recorded individually.
- Failed payouts are retried on the next loop run.
- A milestone is marked settled only when all eligible payouts succeed.
- Bonus subscription writes use a milestone-specific source as an additional idempotency guard.
Notification
After a milestone settles, the Bot posts one concise bilingual group announcement when announcements are enabled. It includes the milestone, reward days, and rewarded member count.