A guestbook and welcome message for my atproto PDS
May 8, 2025 1:00pm EST
We all know by now that I believe in the lexicon black market and thus enjoy illegal atproto records. It's not my fault that Bluesky PBC allowed for such shenanigans! If the good lord had intended for us to walk, she wouldn't have invented roller skates.
My latest lexicon experiment is geared towards the real atproto nerds, so if you're not familiar with how this stuff works, you might want to read my previous blog post where I explained lexicons. Ok, let's jump in.
If you spend time browsing PDS tools like pdsls.dev or atp.tools, then you've probably picked up on the fact that by default they sort lexicon collections alphabetically. This means that 99.99% of PDSes currently begin with app.bsky records at the top. This got me thinking... what if I made some "welcome" records that would go at the top of my PDS so that nerds browsing it would get a friendly hello?
So, I created a.welcome.message.for.my.pds. At the moment it contains a little greeting + a list of links where people can find me and my projects.
{
"text": "Hi there ATmosphere explorer! My name is Dame, and this is my PDS. Glad to see you here!",
"$type": "a.welcome.message.for.my.pds",
"follow me on bsky": "https://bsky.app/profile/dame.is",
"check out my links": "at://did:plc:gq4fo3u6tqzzdkjlwzpb23tj/a.welcome.message.for.my.pds/links-to-check-out"
}
I couldn't stop there though. Thanks to the fact that pdsls.dev and atp.tools support @bad-example.com's project called Constellation, I realized I could create another lexicon at the top of my PDS that took advantage of backlinks.
So, I created a.guestbook.for.my.pds. You can sign my guestbook by simply creating a record in your own PDS under any arbitrary lexicon such as a.guestbook.i.signed
that points to the at:// URI of my guestbook. Then, thanks to the power of Constellation, it will automatically appear as a backlink when viewing my guestbook via a tool like pdsls.dev.
{
"$type": "a.guestbook.for.my.pds",
"readme": "Sign my guestbook by creating a record in your PDS that points to my guestbook's URI. It will then appear as a backlink via constellation. You can view all of the guestbook messages on an atproto explorer like pdsls.dev that supports constellation backlinks.",
"uri-to-link-to": "at://did:plc:gq4fo3u6tqzzdkjlwzpb23tj/a.guestbook.for.my.pds/guestbook"
}
Because of the technical nature of this setup, it's not exactly a guestbook that anyone can enjoy. It's geared specifically towards developers and freaks like me who aren't engineers but who know enough to get in trouble. What if there was an atproto-based guestbook that more people could enjoy?
Well, there might soon be one... Ms Boba is working on an atproto guestbook AppView and Lexicon that is worth checking out.
In the meantime, here's a step-by-step guide to making your own nerd version.
How to create your own PDS guestbook and welcome message
Guestbook Instructions
- Go to pdsls.dev and sign in with your ATmosphere account.
- Tap the "Create record" icon in the top right that looks like a pencil/pen.
- In the
Collection
field, typea.guestbook.for.my.pds
. - In the
Record key
field, typeguestbook
. Validate
can stay asUnset
.- In the code editor, paste the following code and hit
Create
.
{
"$type": "a.guestbook.for.my.pds",
"readme": "Sign my guestbook by creating a record in your PDS under the Collection 'a.guestbook.i.signed' and include a link to my guestbook's at:// URI that's listed below. It will then appear as a backlink via Constellation. You can view all of the guestbook messages on an atproto explorer like pdsls.dev that supports Constellation backlinks.",
"guestbook": "REPLACE WITH URI after record creation by editing the record via recreation",
"more-info": "https://dame.is/writing/blogs/a-guestbook-and-welcome-message-for-my-pds/"
}
- Navigate to the record you just created and tap the
Edit
button. - In your browser's URL bar, copy the part of the pdsls.dev link that looks like this:
at://did:plc:gq4fo3u6tqzzdkjlwzpb23tj/a.welcome.message.for.my.pds/start-here
- Paste this into the
guestbook
value that says "REPLACE WITH URI". - Check the
Recreate record
box and then tap theEdit
button.
Welcome Message Instructions
- Go to pdsls.dev and sign in with your ATmosphere account.
- Tap the "Create record" icon in the top right that looks like a pencil/pen.
- In the
Collection
field, typea.welcome.message.for.my.pds
. - In the
Record key
field, type a name likestart-here
. Validate
can stay asUnset
.- In the code editor, paste the following code or something similar:
{
"text": "Hi there ATmosphere explorer! This is my PDS. Glad to see you here!",
"$type": "a.welcome.message.for.my.pds",
"follow me on bsky": "https://bsky.app/profile/USERNAME",
"sign my guestbook": "REPLACE WITH URI of your guestbook",
}
How to sign someone's guestbook
- Go to pdsls.dev and sign in with your ATmosphere account.
- Tap the "Create record" icon in the top right that looks like a pencil/pen.
- In the
Collection
field, typea.guestbook.i.signed
. - Leave the
Record key
field blank or type a name (no spaces). Validate
can stay asUnset
.- In the code editor, paste the following code or something similar and hit
Create
:
{
"$type": "a.guestbook.i.signed",
"message": "hi there",
"guestbook": "REPLACE WITH URI of the guestbook you want to sign"
}
The interesting thing about lexicons and at:// URIs is that you can even create a record that points to someone's guestbook that doesn't even exist (yet). All you'd have to do is swap out the account's DID in the URI like this:
at://did:plc:fnhrjbkwjiw6iyxxg2o3rljw/a.guestbook.for.my.pds/guestbook
Then, theoretically, if that person ever creates a guestbook down the line using this lexicon schema, the backlink would work.
The guestbook record generator
To cut down on some of the time that it takes to put together the data for guestbook signing, I've created a little tool below to simplify things. Type in the username of the account whose guestbook you want to sign, write your message, and then it will output the JSON for you to copy to your clipboard. Then you can just paste that into pdsls.dev.
Comments