Leaderboard

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 at indie.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.

One total

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.

What the score is made of

The developer picks any of these. Every one is something the platform measures, never a number a player types.

A token (supporter score)
What your linked wallet has earned by holding a token the developer names, on Solana or on Robinhood Chain. A Solana token counts your Solana wallet and a Robinhood Chain token counts the EVM wallet you link on Profile. The score climbs while you hold: ten times the tokens earns twice as fast, so time counts more than size, and nothing under a small floor earns at all. Selling takes away the share you sold, twice over, and slows your earning for good; moving tokens to another wallet costs the same as selling, and a deposit into a staking or liquidity venue the site has named counts as still held. The developer may count only a date window, and counting stops on its end date. A board can name as many tokens as it likes, one column each.
Another leaderboard
Your total on another leaderboard, as it stood a minute ago. A developer can make a board of supporters out of the boards of their earlier games this way. A board cannot read a board that reads it back.
Invites
New players who arrived on your invite link (the same link a game hands out through the SDK) in the last 90 days and went on to play at least ten minutes in a day. Somebody who already played the game before they clicked was not brought by your link. A board can also ask that a friend signs in to an indie.fun account, and that the account has X connected, before they count; then each account counts once, however many browsers it uses.
X promo
Engagement on posts about the game you entered from X, written in the last 90 days. See what a post is worth, below.
Attendance
Days in the last 90 you came back and actively played for at least the game’s number of minutes (10 by default). Active means the game was visible and you were playing, not a tab left open.
Game score
The best score the game has ever reported for you, through the SDK. It means whatever the game means by it.
A score type
The same for one of the game's own named scores, like XP or gold, under the heading the game gave it. A game can keep several, and a board can rank on each in a column of its own (Scores).
Play points
The points the game gave you for each play it reported, a match or a run, in the last 90 days, through the SDK. Press a player's name on the board to open their profile: their plays, with the day, how long, and the points each earned.
RunHQ
Points you earn by reporting bugs and ideas through the game’s feedback widget: when a ticket you filed is approved, merged or shipped, and a smaller amount for upvoting one that is. Points are never taken back. All time, counted by the game’s RunHQ project.

How the columns become one ranking

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.

Places in the whitelist period

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.

Who gets a place, and what it is

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 refundable place
Starts in the first half, on phase 1, which carries a 100% refund right, and goes on into phase 2. For the top 25% of the placed players, rounded up, and never fewer than 2 (or all of them, when fewer are placed).
A phase 2 place
Starts in the second half: whatever phase 1 did not sell, with its refund, and then phase 2, which carries none. For every other placed player.
How much a place may back
The whitelist period’s own money, which is every phase but the last, divided among the placed players only. A refundable place gets twice the share of a phase 2 place, and the shares are oversold three times, because a period whose winners are asleep should still be fillable by the ones who are awake. Nobody types it, so it fits however many are placed: a wider share does not give away more of the raise, it divides the same money among more people.

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.

A place is a head start, not a discount. Every phase of a raise sells at the same price; what the first phase carries is a refund right. Winning a place does not give anybody money, tokens, or an obligation to back anything.

How to climb

Join the board, then do whatever its columns reward: the total adds up everything you did.

1

Join the board

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.

2

Do what the columns ask

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.

3

For X promo, post and paste the link

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.

What a post is worth

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 reply or a quote
Worth ten likes each.
A repost
Worth two likes.
A like
One.
A view
A hundredth of a like, below every action, because X reports views for some posts and not others, and a number that is present for one account and missing for another must not decide a ranking.

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.

Scores move, and can go down

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.

Running it, as a developer

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.

Columns and weights
Press Add column and pick what it ranks on; the table above the button is the board’s columns. A column asks for the one thing it needs: minutes for Attendance, the required @mentions (and, if you like, accounts to follow) for X promo, the token’s chain (Solana or Robinhood Chain), its address and, if you like, a date window for a token, and for a leaderboard one of your other boards or any board’s pasted link. Invites can require a friend to sign in, and to have X connected: a guest is an id the browser makes up, so an invite from a guest costs a script nothing. An account is cheap to make as well (any new wallet signs in as one), so sign-in alone slows a farm and X is what stops one. A weight of 1 is the default and an even split. Everything stays editable while it runs.
Exporting the top wallets
Each board has an Export wallets control: the top N rows as a CSV, in the board’s own order, with each row’s wallet, name, total and every column. A row with no wallet linked is kept with an empty cell rather than skipped, so the top hundred is the same hundred the board shows. Once a raise has frozen places from the whitelist board, the frozen table can be exported too.
Who gets a place
On the Token section, in the Whitelist part: what share of everyone who scores takes a place (25% by default), and optionally the most places there will be. The places themselves are listed under it, read-only: a projection until two hours before backing opens, and the result after.

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.

Leaderboard · indie.fun