As I am making various strides in using the AT Protocol, I have needed to adapt to a very foreign API structure from what i'm used to.
It is a great protocol, don't get me wrong, but the confusing documentation makes it hard to understand. I'm just a hobbyist. I do this stuff for fun, else I'd probably be writing poetry or playing some games.
Projects
I have made a few projects so far with the AT Protocol:
Python
I am much more used to Python as I started my programming journey proper with it. I find it easy to work with. That said, the ATProto Python SDK is undiscovered territory for me. I've managed to do this with it though.
- Bluesky Markov (an adaptation of Mastodon Markov.)
TypeScript
I am very new to TypeScript, but I have some basic knowledge and have been able to adapt my knowledge of JavaScript for it. As such, I've been able to do some projects using it.
I also am brand new to React but I haven't needed to use it too much so far.
-
Bluesky Awoo Bot (a bot that posts wolf noises.)
-
ATP Web (the currently inactive/developmental version of my website built on the AT Protocol which was forked from Blug by Hailey of the Bluesky team.)
-
This one isn't on GitHub but it's an automated
com.whtwnd.blog.entry
record deletion/creation tool. I'm writing this in VSCodium rather than on the Whitewind website, and will be publishing this entry using the creation script. It's not perfect (it doesn't upload images, for example) but it works for my usage.
My Current Struggles
All that being said and done, I have particular issues understanding a few things about ATProto.
Collections and Records
I won't go into what collections are, you may read about them here, but what I will say is that records are... strange. To my understanding, they are like objects inside boxes (the collections) with specific details unique to them.
What I particularly find hard to understand is record structure. For example, I couldn't understand the structure of the com.whtwnd.blog.entry
record type. I looked online but couldn't find any documentation other than looking at existing records on this ATProto Browser tool. I've managed to wrap my head around it now, and it's apparently to the effect of this:
// Constructing the record
const record: any = {
theme: "github-light", // Static value
title: data.title || "Untitled", // Fallback for title
content: cleanedContent,
createdAt: new Date(data.date).toISOString(), // Ensure proper date format (in example, "2024-10-13 16:24:36+01:00")
visibility: "public", // Static value
};
I know that it may seem trivial to some people, such as those used to ATProto, but I haven't really been coding as often or for so many usecases.
Plans for the Future
I am planning on a few things for myself to do in regards to ATProto.
-
Set up ATP Web: If I am to learn ATProto, I may as well advocate for its usage! If I can get my website running atop the protocol, it could bring more awareness to it.
-
Maybe help out with its development: Since its open-source, I am able to help out with its development and give suggestions. Right now, I am fine with its functionality.
-
Build more stuff!