Badger Badger Badger

In a stroke of genius @brookie.blog created my favorite atproto app to use irl, youandme.at . And she solved a problem for me, finding a cool way to show off physical hardware using atproto in a fun, interactive way. For those who don't know what youandme.at is. It's a fun atproto app that when you meet someone, you each scan the QR code. It then makes a "connection" showing the person's handle and pfp from Bluesky, which is a great icebreaker if you know someone online, but may not irl.

Meet the Badger 2350

The Badger 2350 is a little hardware device that is an eink badge meant to be taken to conferences, sit on your desk, or whatever made by the great folks at @pimoroni.com . The brains behind the badger is a Raspberry Pi 2350 , or sometimes known by the dev board, the Raspberry Pi Pico . This little $7 computer is called a microcontroller; it does not technically run a full operating system, but just a single program you put on it. And in this case, MicroPython , a subset/version of Python created to run on resource constrained devices and interact with low level hardware APIs. This firmware controls all the hardware. Pimoroni has also abstracted a lot of the hard stuff already and given it a sort of framework that handles the RTC, button presses, writing to the screen, LEDs, Wifi/Bluetooth, and the i2C port. I usually like to write my firmware for these kind of boards in rust, but I have to give it to Pimoroni. They know how to make something easy, fun, and educational. That's hard to beat. To add an app to the Badger 2350 it's as easy as connecting the badger to your computer, clicking a button on the back twice, and it shows up as an external drive, allowing you to edit the code on the device with your favorite editor.

Adding a new app is as easy as adding a new folder, an icon, and a __init__.py. Can see the exact directions here . Once you do that, it should show up on the home page app selector.

What's the atproto part?

So, like I said @brookie.blog really nailed the IRL social aspect of youandme.at . Before I wanted to find some kind of fun "guest book" where folks could log in, write a lexicon to their repo, and it shows up on my badge. It was halfway done, overly complicated, and I had decided to focus on my at://advent workshop instead, which was the better choice' cause Brook knocked it out of the ballpark with youandme.at . Every single person used it at Atmosphere Conf 2026.

So we ended up with this little guest book on my badge that showed who all scanned my youandme.at qr code, as an added bonus, it showed them in order with the newest at the top. Thanks to my previous badger guest book app I had made, it was very easy to adapt it to work with youandme.at and could hack that together pretty quickly.

The up and down buttons let me scroll the guest book by advancing or going back with the cursors to constellation. Then, when I pressed the B button, it showed the QR code, which is a URL with your did like https://youandme.at/connect?did=did:plc:rnpkyqnmsw4ipey6eotbdnnf. All the ✨atproto magic✨ of writing records happens on the person's phone who scans the qr code like it does on the web app.

The details

The at.youandme.connection lexicon has a nice subject field in it which makes it super easy to get a list of dids that have scanned my badge via constellation . That lexicon looks like this:

{
"$type": "at.youandme.connection",
"subject": "did:plc:dfkjiu36xs6ogt7pux7i7o2b",
"createdAt": "2026-03-25T21:41:10.235Z"
}

And the constellation URL that returns the total count of how many people have scanned my badge and who it was

https://constellation.microcosm.blue/xrpc/blue.microcosm.links.getBacklinks?subject=did:plc:rnpkyqnmsw4ipey6eotbdnnf&source=at.youandme.connection:subject

To break that down:

subject - What you are looking for inside the records. In this case, someone's did. But this can be any at-uri, or even uri like.

source

at.youandme.connection - The lexicon to search for the subject in.

subject - The field to check for the subject. You can also check against child fields with something like this app.bsky.feed.like:subject.uri which is used to show who all liked a bluesky post

This returns JSON with how many records have my did as the subject matching the above criteria, along with which records that is.

{
"total": 66,
"records": [
{
"did": "did:plc:lrphxvv25aibthe7xoc2eeyy",
"collection": "at.youandme.connection",
"rkey": "3miak7y64az2k"
},
],
"cursor": null
}

From here it was just using slingshot (everybody tell @bad-example.com thank you) to grab something called a minidoc which is just a mini version of your did document that has your handle in it, making it an easy single web request to go did -> handle on a little resource constrained device. That URL is https://slingshot.microcosm.blue/xrpc/blue.microcosm.identity.resolveMiniDoc?identifier=did:plc:rnpkyqnmsw4ipey6eotbdnnf

and the mini did looks like this

{
"did": "did:plc:rnpkyqnmsw4ipey6eotbdnnf",
"handle": "baileytownsend.dev",
"pds": "https://selfhosted.social",
"signing_key": "zQ3shVDFvzBZvw4mhzEQo593bhBGus4TKQcahCaGi9YE7Cyqb"
}

The whole thing ended up being about 215 loc since the Badger has a nice framework for the logic of the display, wifi, and web requests. Can see the whole program for it on this tangled string .

Then to connect to the wifi I just cheated and ran a hotspot off my phone anytime I showed it off. Here's a picture of me cheeseing showing it off to fig.

I also was not the only one there with a cool Raspberry Pi eink badge, @jimray.locket.computer rolled up with a PDS in his shirt pocket 🤯. I even heard he migrated his account mid workshop.

Yeah that's it

Thanks for reading! I hope y'all enjoyed this quick write up about it, and it was so great to meet everyone last week. Already can't wait for the next Atmosphere conf when we all get to hang out again. I will also keep my 👀 out for y'all to outdo me on a badge next year.