Wallet & treasury
What it is
The value surfaces: a wallet with balances and transaction history, a points balance (contribution rewards), subscription/membership management, and purchase history. Some flows involve EVM wallet integration; thanks-tokens carry a demurrage (decay) mechanic.
Where it lives
/wallet— wallet ·src/app/(main)/wallet/page.tsx/points— points balance ·src/app/(main)/points/page.tsx/subscribe— memberships ·src/app/(main)/subscribe/page.tsx/profile/purchases— purchase history ·src/app/(main)/profile/purchases/page.tsx
Every interaction
- View balances & transactions — wallet balance and transaction history.
- View points — points balance sums active
earnledger rows credited to the actor; balance equals lifetime (no spend surface yet). - Manage subscription — subscribe/upgrade membership tiers (Collaborator,
Host, Seller, Provider, Organization) at
/subscribe; open the Stripe billing portal. Tiers are capability-based and parallel (Host ∥ Seller), not a single ladder — see Membership & capabilities for what each unlocks. Steward/Worker are hidden, org-granted roles and never appear here. Checkout adds a separate Connect settlement line ($2/mo or $24/yr). Activating a paid tier (active/trialing) automatically provisions a Stripe Connect payment account for the member, so they can receive payouts without a separate setup step. - Send thanks tokens — gift thanks (see Marketplace & gifts); balances decay via demurrage.
- Deposit / transfer — wallet deposit/transfer flows where enabled. TODO(verify): confirm live EVM deposit/transfer affordances.
Permissions / gating
- All wallet/points/subscription surfaces require a session.
- Billing actions derive the subject from the session; membership capabilities gate certain create/sell actions — paid tickets (Host/Provider/Organization), paid offerings (Seller/Provider/Organization), organization-group creation (Organization). See Membership & capabilities.
Group membership dues pricing
A group's own paid membership plans (dues) are priced with a gross-up: the member's recurring charge is the plan price plus RIVR's 5% platform fee plus card-processing costs, so the group always nets the full plan price it set. The exact total is shown at Stripe Checkout before paying. (Previously the 5% was taken out of the plan price itself, which under-collected on small dues.)
Each dues charge (and every renewal) is recorded as a Membership dues line in the member's own transaction history, so a member always has an in-app record of what they paid and when — not only the group treasury's incoming side.
Federated members — people whose home account lives on another RIVR instance — can pay dues, subscribe to tiers, deposit to their wallet, and buy from the marketplace here with their verified identity; their purchases and memberships bind to the same recognized principal everywhere.
Payment accounts for subscribing members
Every SUBSCRIBING member (an active/trialing membership subscription, any
tier) gets a Stripe Connect payment account — provisioned automatically the
moment the Stripe webhook marks the subscription active/trialing, or
interactively during the post-checkout onboarding redirect. Platform admins
(siteRole: admin) can also run a one-off backfill for members who
subscribed before this wiring existed, or to retry any activation-time
failures — idempotent and safe to re-run.
Share classes (org equity)
Shares live in the group's Stake tab → Shares view. A share class is a hidden org-grade subgroup allocated a total share count and a percentage of the org's net (shown as %); members hold shares via ledger holdings that admins grant, adjust, or retire in place. The Shares view models the whole pie: every DIRECT subgroup of the group can hold a percentage of the group's net, and a subgroup that has shares (on itself or on a share class nested under it) splits its percentage among holders pro-rata by shares — subgroups without shares split equally among their members. Every member sees a "Your shares" panel; group admins author the per-subgroup percentages and each holder's share count inline. The RIVR org's steward-share subclasses (Founders / Class R / Class D) live under Stewards, and holding shares in any of them automatically confers Stewards membership via the org-structure sync.
Distributing net across the pie
The Shares view also carries an admin Distribute net control that wires the pie to real money: an admin enters an amount to pay out of the group treasury wallet, previews the exact per-recipient plan (a dry run that moves no money), then confirms to execute. Each direct subgroup's slice is split to its holders pro-rata by shares (or equally among members when it has no shares); the undistributed remainder (sibling pie under 100%, or empty subgroups) stays in the group wallet. Every recipient credit lands in that member's settlement wallet as an immediately payout-eligible lot. The run is admin-gated, never auto-triggered, and idempotent per run — a retry of the same confirmed distribution replays the original transactions instead of paying twice.
Crypto treasury (USDC on Base)
A group can hold a digital-dollar treasury in a Safe multisig its officers control — the platform never holds a key. From the Treasury tab, admins bind an existing Safe or deploy a new one (officer wallet addresses, 2-of-N); officers approve treasury actions by signing in the app with their own browser wallets; execution is submitted by the platform (no gas needed from officers). Budgets follow the board model: officers approve a per-lead spending limit once, and the lead then pays recipients within it with a single signature — no per-payment officer involvement, with the remaining budget enforced and visible on-chain. USDC marketplace sales settle to the treasury atomically via the one-signature checkout. The current fleet runs on Base Sepolia (testnet), matching the Stripe test-keys posture.
Group treasury banking (flag-gated, not yet live)
Group admins will find a Banking area in the group Treasury tab once the
platform's Stripe Treasury/Issuing programs are enabled. Built and shipped
dormant; until the STRIPE_TREASURY_ENABLED / STRIPE_ISSUING_ENABLED flags
are on, the tab explains the state instead of showing dead controls.
- Group payment account — a group can hold its own Stripe Connect account (set up from the Treasury tab's payments card by an admin).
- Per-subgroup financial accounts — each subgroup treasury can get its own Stripe Treasury financial account, hosted on the parent group's payment account, with its own balance.
- Subgroup cards — a spending-limited virtual card can be issued per subgroup, funded only by that subgroup's financial account (default cap $500/month; admins set the limit).
- Connected bank balances — a group can link its real-world bank account (Financial Connections) and see its live external balance alongside the Stripe balances in the Treasury tab.