The green halftone dot pattern used as the FOLK PDS background
← News

The floppy disk you like is going to come back in style

FOLK

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.

The FOLK PDS welcome screen at at.folk.lol, dark green halftone dots behind a Create a new account / Sign in card
at.folk.lol - FOLK's personal data server.

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.

A whole repo, game records first. Every collection here is public and readable by anything that speaks atproto.

Individual records get the diff treatment, with a custom yurei theme ported over from our nvim config.

One 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.

The same data as above, just simpler.

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!