It all starts somewhere.
A few weeks ago we started integrating the game with AT Protocol, the open network Bluesky is built on - the Atmosphere, if you have heard people call it that. You have been able to log in with your Atmosphere account for a while now, but login is the boring half. What logging in actually gives us is the player's DID: a permanent identifier that points at them and belongs to them, not to us. Once a player has a DID, there is a lot more you can do with it.
All of a DID's data lives in a repository on a PDS - a Personal Data Server, the piece of the network that stores your records and hands them out to anyone who asks. A repo is the closest thing the web has had in a long time to a floppy disk: a small labelled object that holds your stuff, that you can pick up and carry to another machine when you get bored of this one. Anyone can run the machine, so the first thing I did was host my own and give it a face. A recent PDS release turned the branding into a small, documented set of variables. The defaults are deliberately neutral, so an untouched PDS looks like nothing in particular. Ours is green dots.

Looking at other people's repos
Then I started poking around other people's repositories, first with atproto.at and pdsls.dev. Both are good. Neither showed me what I wanted for a game, so I built my own: folk.observer.
It has two modes: one shows you the records, the other shows you the player.
Nerd mode
In nerd mode you get the whole repository. Game collections at the top, everything else underneath, all of it rendered with Pierre's trees component.
Individual records get the diff treatment, with a custom yurei theme ported over from our nvim config.
lol.folk.profile record. The nickname and the portrait live in the player's repository, not ours.Artist mode
In artist mode you skip all of that and just see the player: avatar, nickname, badges. Everything that happened to get mirrored out of the game and into their PDS, with no DIDs or collection names anywhere on screen.
About those badges
The badges are signed with the FOLK key, and artist mode only displays the verified ones. An award is a record sitting in the player's own repository, and a player can write anything they like there - so an award with no valid signature is a claim, not an achievement. Nerd mode still shows those, labelled as unsigned.
I wrote our own badge lexicon first. Then I read some of Dan Abramov's posts about lexicon design and threw mine away in favour of the existing community.lexicon.badge.award. That seems to be the way to go, and there was a concrete reason beyond going with the crowd: an award has to reference a badge by URI and hash, and you cannot point that kind of reference at one item inside a list. Every badge has to be its own record no matter what you do. Once that is true, a homemade lexicon is just a less-known spelling of one that already exists.
I guess that's it for now.
Enter here with your Atmosphere account to play the game!

