Struggles Adapting to the AT Protocol

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

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.

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!