A game can have several leaderboards, each a ranking of its players on what the game cares about, from holding its token to bringing friends, posting about it, coming back and playing it well. The one marked Whitelist hands out places in a raise's whitelist period and boosts tournament prizes.
Where it lives
A game's leaderboard is atindie.fun/leaderboard/your-game. A developer turns it on, and changes what it measures, from the Leaderboard section of their game. Dated competitions with prizes are tournaments, a separate thing.The leaderboard ranks every player on a total out of 100, made of the columns below. It runs for as long as the game has it on: there are no seasons to restart, and joining is one press with nothing else to set up.
Activity counts over the last 90 days: invites, posts and attendance from three months ago fade out, so somebody who joined last week can climb past somebody who was busy a year ago. Tokens, other leaderboards, your best game score and RunHQ count over all time, because holding is the column that is about loyalty, a game only keeps your best score ever, and RunHQ keeps one running total.
The developer picks any of these. Every one is something the platform measures, never a number a player types.
Each column is a percentile of this board, 1 to 100, never a raw number. A game score can be nine or nine million, a token balance depends on the supply, and an X score on somebody's audience; adding those directly would let whichever column shouted loudest own the ranking. A percentile says how you did against the people you are competing with, which is the same unit everywhere. A raw of zero scores zero, so the people who have done nothing yet do not take the median place.
A small field counts for less. In a game where three people have ever posted, one post with one like would be the top of the X column. So each column is scaled by how many people scored in it: with twenty it keeps half its value, with a thousand nearly all of it. The order never changes; what a quiet column cannot do is hand somebody the top of the board for one action nobody else took.
The total is the sum of the columns' points. Each column scores a player out of 100 against the board, and adds that score times its share of the weights: on a board of two columns weighted 1 and 3, the first adds up to 25 points and the second up to 75. Every weight starts at 1, which is an even split; a developer raises one to say it counts more. The board prints each column's points, so a row's columns add up to its total out of 100.
The game score is weighted toward the top of its ladder: the median player collects about an eighth of the column and the 90th percentile nearly three quarters. That is the “top players should shine” rule written as a slope rather than as a cliff, which would be a line people learn to sit exactly on top of.
A raise needs people who have already heard of the game, and the one thing a developer has to spend before the money opens is a head start: for the whitelist period at the start of a raise, two days by default, only wallets on the whitelist and the players the Whitelist leaderboard placed can back. A game's other leaderboards rank its players and place nobody. Everybody else backs with the public once that period ends.
Until then the places are a projection, so you can watch yourself cross the line. Two hours before backing opens every live post is read once more and the places are written down for good. The leaderboard itself keeps running afterwards. The board's places are its own list: it never adds anybody to the whitelist the developer keeps, and a wallet on both backs on whichever place can take the amount.
The top of the board is placed, and nobody else: by default the top 25% of everybody who scored, and the developer can set anything from 1% to 100%. It is a share rather than a number of places because nobody can know in advance whether twelve people will enter or four thousand: “top 100” of a field of forty is everybody who turned up, and of a field of ten thousand it is a lottery ticket. So the cut-off moves as people enter, and both the board and the developer's panel print where the line falls today beside the rule behind it. Below the line is not a missed raise: it is the public period, which anybody can back in.
The developer can also set the most places there will be, so a crowd cannot widen the list past what they are willing to take. The share decides while few have scored and the limit once many have: at 20% and at most 50, a board where 100 scored places 20, and one where 1,000 scored places 50. Players are told both numbers wherever the places are described. A limit does not shrink the money the places share, so each place is worth more.
Placed players back in the whitelist period, in two halves. Refundable places start in the first half, on phase 1. Phase 2 places join in the second half, which offers what phase 1 did not sell first and then phase 2. Each phase is first come, first served. Rank decides which half a place starts in and how much it may back. For example, 100 players who scored on a board placing 25% is 25 places: 7 refundable and 18 phase 2.
A place belongs to the account, and is spent from the wallet that account has linked. Somebody placed without a linked wallet keeps their place rather than being skipped. Promoting the next person would shuffle the cut-off under everybody below it each time a wallet was linked, so the place waits for the wallet, and the first wallet it backs from is the one it keeps.
Join the board, then do whatever its columns reward: the total adds up everything you did.
Once, on the board's page. All it needs is an account. Everything you have already done in the game counts straight away. On a board with a token column you may already be on it: an account whose linked wallet holds the token is added within the hour. A holder with no account shows as their wallet address, and becomes their account's row once they link that wallet on their profile.
The board lists its columns with each one's share of the total and how far along you are. Link a wallet for a token column (your Solana wallet, or your EVM wallet for a Robinhood Chain token), copy your invite link for Invites, play for Attendance, the game score and play points, climb the other board for a leaderboard column, and file tickets through the game's feedback widget for RunHQ.
Connect your X account, post about the game mentioning the account the board names (and, if the developer pinned an announcement, quote it or paste its link), then paste your post's link on the board. The free X endpoints answer about one post by its id and will not list what an account has written, so nothing discovers your posts for you. We read the post from X to check it is yours; nothing your browser says about it is scored. On a game with several boards, paste it on each board you are climbing: it counts on every board whose rules it meets.
A board can also name accounts to follow. Follow them before you paste the link: we ask X whether your linked account follows each one, and a post is refused until it does. We ask again every few hours while your posts are being re-read, so unfollowing afterwards stops them counting, and following again (then pressing refresh) brings them back. If X does not answer, nothing changes either way.
Engagement is the whole of it, weighted the way X weights it. X publishes what each action does to a post's ranking, and this copies the ratios rather than inventing its own. A board is buying reach on X, so posting to score here should be the same act as posting to rank there.
A post is then worth the square root of that total, capped, so one viral post cannot win a board outright. And each account's posts are ranked against each other with the weaker ones counting for less: ten posts are worth under four of your best one. That is deliberately a slope rather than a cap like “your best three a day”, which is a number people count up to.
Nothing is paid for turning up. There is no base score for entering a post, and there is no follower minimum, account-age minimum or engagement floor, and the four go together. A gate at the door turns away the person with forty followers who tells all forty about the game, and never turned away a farm, which ages its accounts. A thousand empty accounts posting into the void collect a thousand times nothing.
A score is a live reading rather than a receipt. Posts are re-read on a cadence that slows as they age (every fifteen minutes for the first six hours, hourly to two days, then more slowly still), and every total is recomputed from scratch rather than added to. So a post that keeps travelling is worth more tomorrow, and a deleted post is worth nothing. Points that could only rise would make deleting a counted post a free move.
A post nobody can read is not the same as a post that is gone. X throttles, and a read that failed is not evidence about anybody's post: only a post confirmed missing by two independent readings scores nothing, and everything else leaves the score where it was.
There is a refresh button on the board for the case the slowing cadence gets wrong: somebody who has just watched a post take off. It re-reads your own posts and nobody else's, skips anything read in the last minute, and is rate limited.
Turn it on in the Leaderboard section of your game: the defaults (invites, attendance and game score, evenly weighted, plus X promo once your game's Settings name its X account) are right for most games. Everything else (what a post is worth, what a place is worth, the absence of floors) is the same on every board and is not settable, because each of those dials was a way to get a board wrong.
The game score needs your game to report scores (Scores), play points need it to report plays (Plays), and Invites and Attendance need the indie SDK running in the game. RunHQ needs your RunHQ project's API secret, pasted once beside the column, and players are matched by the account id your widget tokens already carry. A column whose source has nothing yet simply reads zero for everybody until it does.