My 2025 review & plans for 2026

It's that time of the year when it feels appropriate to look back at the past 12 months and make some kind of summary of how I spent them and what I achieved. I think it makes sense if only because after looking through my projects, I see there's been quite a lot more of that than I had thought. I think we often quickly forget what we spent time on and it might feel like a lot of it was wasted on nothing, but it turns out there's a lot of that nothing 😅

It's also a good time to look a bit forward on the new year and think about what I want to do during that time, to not lose sight of some things.

For comparison, see my 2024 review from a year ago ( imported from micro.blog ).

Just to quickly look at the last section there:

What's next, in 2025? I… I really think I need to work a bit more on work-life balance (sideproject-life balance?) this year. I feel like I'm doing way too many things. But I have no idea if that's going to happen. I think at least I should try to do a bit more project finishing and a bit less project starting.

Narrator: he did not improve his work-life balance after all 🫠

First of all, I can't wait to get out of this transitional state with that main service running on three different databases in parallel. I think I'm really close now (though I've been saying this for weeks).

I did finish that one, around March.

Then, I have all of the above to maintain, OAuth to add to Minisky & Skythread, things like better documentation and tests to add to the open source projects. I have a few ideas for longer blog posts to write, e.g. some kind of architectural introduction to ATProto.

And also… I'd really love to write an AppView one day (but yes, I know, less project starting 😛).

I didn't add OAuth anywhere yet, but I did start working on tests and documentation, I wrote a bunch of blog posts, and I managed to resist starting to build an AppView…

Feed service

finished the migration to Postgres and testing MySQL , as mentioned above

spent some time working on speeding up the firehose processing , which also resulted in a PR to the Faye library I'm using that greatly improves the speed of binary websocket streams like this one (by avoiding converting the event data unnecessarily from string to array and back)

added new feeds: Atmosphere Buddies , ATProto Top Threads , Hailey's Kittens , Only Posts , Team Watch

ongoing updates to feeds like ATProto , Linux , Star Wars or Mac/iOS Dev

Handle Directory

added a page tracking verifications

ongoing maintenance of the list of independent PDSes

Blog(s)

10 posts on the micro.blog / leaflet.pub "journal" blog

4 posts on the main blog , including a long technical introduction to ATProto:

Introduction to AT Protocol

Walkthrough of the various parts and concepts in Bluesky's AT Protocol (ATProto), the types of servers involved and how it all fits together

some updates to my user-focused Bluesky Guide

Ruby gems

2 releases of Skyfall (including that binary websocket speedup)

4 releases of BlueFactory (added support for interactions API, post reasons & context, and video feeds)

2 releases of DIDKit

refreshed my feed generator project template , previously last touched long ago

launched a new gem " Tapfall ", building on Skyfall to connect to Tap , which lets you build things like a page that imports, indexes and lists all labellers on the network in a single 200-line Ruby file

Another thing that I started doing on that front is that I've been trying to turn this loose set of gems into a bit more of a single "SDK", even though it isn't and won't really be a single whole like e.g. Marshal's Python SDK is. I've built a new shared documentation site for all gems (using Vitepress ), which includes each gem's readme & changelog in one place, and where I moved all the code samples from existing repos' example folders (+ refreshed some of them and added a few new ones). I'm also working on adding YARD/RDoc-generated API documentation there, and I slowly started improving the currently abysmal test coverage in the gems (with some help from Codex).

ATProto Ruby SDK

A set of libraries for building and accessing AT Protocol services in Ruby

SDK.blue

added over 50 new projects

added tags like xrpc client / firehose / identity / pds impl. etc.

support for importing project info from Tangled (or from both Tangled + GitHub and merging data)

support for importing release info for Rust 🦀 projects from crates.io

I also made a Bluesky account @sdk.blue , on which I'm occasionally posting links to new projects that I add to the list

sdk.blue

A curated list of libraries, SDKs and tools for the Bluesky API and AT Protocol

Skythread

made a bunch of smaller updates and added some new separate tools like timeline stats around the middle of the year

then, rewrote the whole thing in Svelte, TypeScript and ES Modules with Bun as the bundler in the autumn

Lycan

I launched this small Ruby service in October – it's a "search engine" for your Bluesky likes (and reposts, quotes, and old-style pin bookmarks). It lets you search for keywords in any post you've liked, shared or saved previously, which is really helpful for finding that thing you've seen a week/month/year ago that someone built or posted but you really can't find right now.

The code is open source , and my instance runs at lycan.feeds.blue. The service is API-only, and the UI is built as a separate page in Skythread, see " Archive search " in the menu in the top-right (note, the first time you want to use it, you need to tell it to start an import and wait a bit for it to finish).

Tootify (Mastodon cross-poster)

added support for Mastodon OAuth (but not for Bluesky yet 🙃)

cross-posting of threads/chains of own posts

preventing duplicate cross-posts

support for Mastodon 4.5 quote posts (currently not very useful until Bridgy adds support for them too)

support for cross-posting video embeds

Other random things

At the beginning of last year I moved my main account to my own PDS lab.martianbase.net; it's been running mostly problem-free and with almost no maintenance since then. In order to change that 🙃, I started messing with it again recently, switching to a setup without Docker (I'll make a small write-up about this) and with the addition of @baileytownsend.dev 's excellent Gatekeeper service , which restores support for email-based 2FA, which is missing in self-hosted PDSes (seriously though guys, how is it still not implemented in bluesky-social/pds in 2026… 🫣)

I've also been running a small ATProto relay at relay.feeds.blue for the past few months – it covers only the "independent Atmosphere", excluding Bluesky's mushroom PDSes, so the traffic is pretty small, but still large enough for testing some things. Note, currently it doesn't automatically add connections to newly discovered PDSes yet, but I'm hoping to change this soon!

I've been gradually moving my git repos from GitHub to Tangled , a git hosting service based on ATProto. My newest repos are only on Tangled, and older but active ones have Tangled mirrors (I didn't want to lose the previously collected stars 😏).

I finally got into a habit of using ChatGPT much more regularly, in a question-reply mode in the (very nice) native Mac app, and it's been a great help in debugging weird problems or using some technologies I'm not as familiar with, like Bash scripts, Nginx configs, Svelte, or Postgres. I've also started using Codex for some "implement this thing for me" kind of tasks, but for now only occasionally, when I have something simple but boilerplatey to do – e.g. recently I've been using it to generate unit tests and now documentation comments (which I later review and tweak to my taste before committing, but I have some starting point that saves me some time).

I got an ATProto grant from Bluesky ☺️

Plans for 2026

So, what's next? Probably more of the same ;)

I want to continue my work on making my "ATProto Ruby SDK" look more polished and serious – add inline documentation, add/improve the unit tests, finish some missing things. My evil secret plan is to try to Ruby-pill some existing or future ATProto developers, and to do that, I need my libraries to be easier to use, easier to find, to look more complete, and to save you as much work as possible.

The SDK.blue site needs a few small QoL improvements, like a sticky language nav bar or filtering by tags

I need to finally bite the bullet and properly learn OAuth, and add it to some of my projects

There's a whole list of small things I want to add to the newly "sveltified" Skythread, although this will require some UI thinking around where to put what and how it should look

I have some long overdue design work to do on the Labellers list and the Label Scanner too

I've got a few next ATProto-themed blog posts on my todo list

… and I need to work on my work-life balance 🫣

Looking forward to a very " Atmospheric " 2026! 🌤️