Rewards Logic

How presence turns into a living world. Dev reference — the app itself never shows these numbers; the user sees state words and blooms.

The loop

Phone-down session minutes Flow Current brightness ↑ cumulative minutes Bloom unlocks world grows

Flow Current — one session

brightness = min(1, 0.25 + minutes / 90)
brightness vs session minutes

Decay — while idle

brightness × 0.985 / min · floor 0.08
brightness settling over idle minutes (from 1.0)

State words (the only feedback the user sees)

BrightnessWordMeaning
≤ 0.25Restingthe grove is quiet (fresh world default)
0.25 – 0.50Stirringwaking up
0.50 – 0.80Brightalive and glowing
> 0.80Radiantfully lit
✓ Reconciled 2026-07-14: client and API (services/api words.js) now share one threshold set — ≤0.25 / ≤0.5 / ≤0.8.

Bloom unlock schedule

No pull mechanic — blooms unlock automatically at cumulative-minute thresholds (source of truth: the Bunny media manifest; default schedule below).