Resolution Roulette

FAQ

How does it work?

You submit a list of candidates and pick a goal date. Starting the day after you create the game, one candidate is eliminated at random each day. When the goal date arrives, the last surviving candidate is announced as a post on your Bluesky feed.

All game data is stored in your own Bluesky PDS as AT Protocol records — Resolution Roulette never stores your game content on its own servers.

Creating a game via URL

You can share a link that pre-populates an entire game. This is useful for letting a group vote on candidates before the game starts, or for building integrations. Send someone to:

/dashboard/new/candidates
  ?title=Next+book+to+read
  &goal_date=+14
  &start_date=-3
  &reveal_hour=9
  &resolution_0=Project+Hail+Mary
  &resolution_1=Piranesi
  &resolution_2=Klara+and+the+Sun

Query parameters:

Parameter Format Example
title Any text Next+book+to+read
goal_date +N days from today, or YYYY-MM-DD +14
start_date -N days before goal (sets number of candidates) -3
reveal_hour UTC hour 0–23 for the announcement 9
resolution_0 … resolution_N Pre-filled candidate text Piranesi
announce_prefix Text before the winner's name in the announcement 🎉
tag_users Comma-separated @handles to mention in the announcement alice.bsky.social
tags Comma-separated hashtags (without #) books,reading

The person clicking the link still signs in with their own Bluesky account before saving — the URL only pre-fills the form, it does not create the game on anyone's behalf.

Weighting candidates

Adding the same candidate more than once gives it a higher chance of surviving. Because each duplicate is an independent entry in the elimination pool, it has to be eliminated separately — so a candidate listed twice is roughly twice as likely to reach the final.

For example, if you enter Tokyo three times and Paris once across a 4-candidate game, Tokyo has a 3-in-4 chance of surviving any given day's elimination. The announcement post will show whichever specific duplicate entry wins — so naming them Tokyo (1), Tokyo (2), etc. can make the result clearer.

Where does my data live?

Resolution Roulette stores everything in your Bluesky Personal Data Server (PDS) using three custom AT Protocol record types:

  • entry The game itself — title, candidates, goal date, and reveal hour.
  • elimination One record per day per game, written by the worker when it eliminates a candidate.
  • promotion Written on the goal date when a winner is chosen and the announcement post is made.

Deleting a game from the dashboard removes all three record types from your PDS. Because the records are yours, you can also inspect or delete them directly with any AT Protocol client.

Connecting Claude Desktop (MCP)

Resolution Roulette exposes an MCP server at /mcp that lets Claude (or any MCP-capable client) list your games, add candidates, create new games, and post completion updates on your behalf.

  1. Go to Settings → API Tokens and create a token.
  2. Copy the claude_desktop_config.json snippet shown after creation.
  3. Paste it into your Claude Desktop config and restart Claude.

The delete game tool is disabled by default — enable it at token creation time only if you want Claude to be able to permanently remove games.

Public share link

Every game has a public URL at /r/{did}/{rkey} that anyone can visit without signing in. By default, surviving candidates are hidden until the goal date — only eliminated candidates (and their elimination dates) are shown, which preserves the suspense without spoiling who is still in the running.

If you want to share live standings, toggle Allow public reveal on the game page. This makes surviving candidates visible on the public view immediately.

Customising the announcement

The winner announcement post starts with an announce prefix, which defaults to 🎉. You can change it to anything — a sentence, an emoji, or a category label — during game setup or by editing the game before it starts.

The post budget is 300 graphemes. The prefix, winner text, and any tags or @mentions are all drawn from that budget; items that don't fit are silently dropped (tags first, then mentions, then the winner text is truncated). Keep your prefix short if you have many tags or long candidate names.