02 / 07
How it works.
From a search to a share.
Every rewardable action becomes a ledger event. The event is split across your Earn Portfolio at record time and lands in your ready-to-claim pool. Nothing moves until you hit Claim — then the whole pool is sent to your wallet as tokenized stocks.
browser action → extension detector (URL pattern / query)
→ POST /api/rewards/events
→ RewardEngine: validate · cooldown · daily cap · split
→ reward_events + reward_balances (ready to claim)
→ live update (SSE) → popup + dashboard
→ you hit Claim (no minimum) → POST /api/claims { address }
→ SettlementProvider: dollars → tokenized-stock units
→ settlements + balances (claimed, units delivered)Reward sources
| Source | Trigger | Per action | Daily cap |
|---|---|---|---|
| Search | A query on Google, Bing, DuckDuckGo, Brave, Yahoo, Ecosia | $0.05 | $6.00 |
| Browsing | Active browsing heartbeat, once a minute | $0.03 | $4.00 |
| Affiliate shopping | Order confirmed on a partner store | $1.00 | $25.00 |
| Partner offer | Completed partner offer | $2.00 | $25.00 |
| Referral | A friend joins through your code | $5.00 | $50.00 |
| Sponsored link | Click on a paid result or partner landing | $0.10 | $2.00 |
| Partner action | Sign-up or action on a partner | $1.00 | $10.00 |
Rates are sized to what partner revenue can cover and live in one registry (`packages/core/src/rewards/sources.ts`). Live partners report real amounts through the same endpoint; caps and cooldowns still apply.
Money
Everything is tracked in integer micro-dollars (1,000,000 = $1.00). Splits use largest-remainder rounding, so $1.00 across 50/30/20 is exactly $0.50 / $0.30 / $0.20 and lines always sum to the event.