Bluesky feed terminal output

Social Media Exodus

I was on TikTok for years before eventually leaving, along with a few other social media platforms. The thing that hooked me on TikTok was its recommendation algorithm. It consistently surfaced content I genuinely cared about.

Bluesky is intentionally different. Its philosophy is to let people choose their own feeds instead of relying on one opaque algorithm.

I wanted to understand how recommendation algorithms actually work.

Why not try to build one myself?

AT Protocol

The AT Protocol (atproto) is the decentralized protocol that powers Bluesky. One of its most interesting features is that anyone can build their own custom feed algorithm.

Learning the Plumbing

Before experimenting with algorithms, I needed a pipeline.

Version 1 of the project:

  1. Connects to the public Jetstream firehose
  2. Ingests posts and likes into DuckDB
  3. Stores roughly 20,000 events per minute
  4. Exposes a custom feed through the AT Protocol

Version 1 of the ranking algorithm:

score =
likes_in_last_two_hours
------------------------
(age + 2)^gravity

It’s intentionally simple — just enough to get the entire pipeline working before experimenting with more ranking signals.

Why DuckDB?

I’ve used warehouses like Snowflake professionally for years, but I wanted something that could live entirely on my laptop.

DuckDB ended up being a great fit.

Since everything lives in a single .duckdb file, I can inspect the data with SQL at any point during development. It’s a surprisingly pleasant workflow for experimenting with event streams without needing to set up a database server.

What’s Next?

The current algorithm only ranks posts by recent like velocity.

The questions I’m most interested in exploring are:

  • What signals besides likes matter?
  • Can I recommend new people to follow?
  • Can I build something that consistently surfaces interesting content instead of just the most popular content?

I’m treating this as an ongoing experiment. As the project evolves, I’ll share what I learn and hopefully build a feed that’s genuinely useful.


Tools & Skills

  • Environment setup
  • Local development
  • Workflow optimization