Energy
A living system exchanges information and energy.
Every month you get a fresh pool of energy. Casting votes spends it. Receiving votes on your content earns it back. The pool resets on the 1st of each UTC month — unused energy does not carry over.
Energy is separate from rank. A high rank does not add energy. A user with GOAT rank still gets the same 31 base energy as everyone else.
Relevance vote: Cast. Rank: Rank. Profile plate: User profile.
How it works
Monthly pool
The base pool is 31 energy per month. On the 1st of each UTC month the balance resets to 31. Any remaining energy from the previous month is discarded.
Income
| Event | Energy | When |
|---|---|---|
| Monthly reset | +31 | 1st of UTC month |
| Topic created | +13 | Publishing a topic (topic_created) |
| Vote received | +1 | A new vote row is inserted on your topic (first insert only, not a weight change) |
| Hot bonus | +130 | Your topic hits 100 community votes within 48 hours |
The +1 vote_received goes to the topic author only. A branch author on someone else's topic does not receive it. A weight change on an existing vote row does not trigger it again.
Spend
The cost of a vote is abs(next) − abs(previous). A heavier vote costs more. A lighter vote refunds the difference. Flipping the sign at the same absolute value costs 0.
| Change | Cost |
|---|---|
| First vote at +3 | 3 |
| Change +3 to +10 | 7 |
| Change +10 to +3 | 7 (refund) |
| +3 → −3 | 0 |
| Change +10 to +10 | 0 (no-op) |
Decay
Each idle UTC day — no vote cast — reduces the balance by floor(balance × 0.99^idleDays). This is not a flat 1% per day on a round number; it compounds on the current balance. The lastActiveAt stamp is updated by casting a vote (spend or refund). Creating a topic or proposing a branch does not update it.
Reset
On the 1st of each UTC month the balance is set to 31. The previous month's remaining balance is discarded.
Profile plate
The Voting Power plate on your profile shows the current balance, a bar splitting the month into used and remaining, and a footer: {used} used / {votes} votes and Reset in {n}d.
Title tooltip: Energy to vote. Resets on the 1st of each UTC month. The link explore more... goes to /community.
The bar tooltip lists remaining, earned, used this month, idle decay, the monthly grant, and the max for this month.
Code
| Piece | Path |
|---|---|
| Schema | packages/shared/src/schema/voting-power.ts |
| Monthly grant | apps/frontend/src/server/lib/apply-monthly-energy.ts |
| Balance read | apps/frontend/src/server/routers/users.ts (getVotingPower) |
| Plate | apps/frontend/src/components/profile/VotingPower.tsx |