I left Twitter in the winter of 2022 after about 15 years as a power user. During the intervening years I’ve learned a lot about myself and social media. I’ve tried a number of potential online homes, and even attempted to build replacements for what I was missing, like an open-source tool aimed at satisfying my need for a newsfeed. This is the story of how I’ve come to find social media I enjoy, a showcase of some content I think you might like, and an invitation (along with some instruction) for you to take control of your media consumption by building your own tools.

TL;DR: Be intentional. Find your community, and control your algorithm(s).

If you want to jump to the part where I suggest things to try (e.g., join this site, follow this account, etc.) jump to Suggestions, and if you’re worried by Bluesky in the title and that it might not deliver what you want, I built some tools to showcase what you can find there. Check out the catalog of daily digests at icymilaw.org or @icymilaw.org‘s timeline on Bluesky. If you see stuff you like, come back here, and we’ll get you set up. Also, much of this piece is relevant even if you never visit Bluesky.

On this page

Why use social media?

To orient ourselves, I’ll start by identifying what it is I want social media to do for me. This will give us some goals to shoot for. Your goals may differ from mine, but if you find some overlap, there’s a good chance you’ll like at least some of my suggestions. For me, at its best, social media serves four main roles. 

1. Diary/memex

Having access to an annotated searchable photo album/journal is really useful. I used to live tweet conferences as a way to take notes, and because I downloaded my data before I left Twitter, I know that my youngest’s astronaut phase (which is still going strong) started on the night of November 18th 2021. 

A tweet by David Colarusso, posted on November 18, 2021. The tweet reads: “3yo was transfixed by the Moon. I ask, ‘Did you know people have been to the Moon?’ 3yo thinks about it a moment and says, ‘No.’ Waits a beat and exclaims, ‘I'm going to the Moon!’” The tweet ends with two emojis: a rocket and a full moon. The post has 0 retweets and 13 likes.
Screenshot of an archived tweet. The account no longer exists.

There’s nothing particularly social about this use case except that the urge to share is leveraged to make me write down stuff I will appreciate at some point in the future. This rationale is similar to why I keep so many to-do lists. Write this down; it will be useful later.

Consider the ability to search through those items you liked well enough to share with others. What was that website that let folks do X? This really is the dream of the memex, and every year when I have to write up an annual report for work, listing where I spoke and the like, I am thankful for this resource. Consider this search, “slides from:me” (note, me is you if you’re logged in).

A diary also acts as a vehicle for getting things out of your head. Often writing something down on social media is just a way for me to free up headspace so I can move on to the next thing, or as my online friend Sarah Glassmeyer is fond of noting, “this was in my head and now I’m going to make it everybody’s problem.”

To see why I don’t just keep a paper journal, it’s important to understand some of the other roles social media plays for me. See below.

It’s also worth noting that social media need not replace other activities that work like journaling. It’s more of a, “yes, and” situation, and I’m not saying you should stream your inner monologue to the whole world. For more than 30 years, even after leaving the Church, I’ve been doing something that looks like a Daily Examen. And let’s be clear, there are no posts memorializing these (I’m pretty sure this is the first time I’ve mentioned it in writing). Also, I don’t share my kid’s names or identifiable pictures despite talking a good deal about them. They get input on images of stuff they made, etc. You can journal in the open and still set boundaries. Deciding what I do and don’t share has a lot to do with the second role on my list, that of water cooler.  

2. Water cooler

Ten years ago, I had just started working as, arguably, the first ever data scientist employed by a public defender agency, and let’s just say, as an attorney working in data science, I didn’t have a lot of professional company. Tech folks saw me as “a lawyer,” and lawyers saw me as just a “tech person.” It could be lonely. 

Social media became a place where I could meet and interact with folks who shared my interests—a virtual water cooler—allowing for a mix of small-talk and serendipity. I’d share things because I thought they were interesting, engage with folks who were sharing things I found interesting, and in so doing, I found my people. I built and maintained a lot of really strong bonds thanks to these interactions.

A tweet by David Colarusso from June 3, 2015, includes a photo taken on the High Line in New York City. The caption notes he's there in his role as a CPCS data scientist, reading computer science papers ahead of PDF15. The image shows a pleasant urban park scene with people walking and sitting along a path lined with grass and benches. Modern buildings with large windows surround the area. In the foreground, a computer science diagram on paper is visible, suggesting the reader is studying while enjoying the outdoor setting. The tweet includes the hashtags #PDF15 and #livingthedream.
Screenshot of an archived tweet. The account no longer exists.

I often think of this role as the most social part of social media, and I think a large part of why it has worked so well for me is because one of the ways I use social media is as a diary. It means I’m out there talking about my life, finding common ground with others. If all I did was post about work, I suspect my conversations and connections would be pretty shallow and one-dimensional. It’s the difference between going to a conference and just attending sessions vs. having some really great hallway conversations. Speaking of which, it’s always fun at a conference when you recognize folks from their social media handles or pick up some new handles to follow from a slide deck. And yes, this has happened to me even after leaving Twitter.

3. Newsstand 

As someone who still gets a Sunday paper and several magazines, I used to respond with horror at surveys reporting that most folks get their news from social media. Then I realized that my first interaction with articles not found in one of those periodicals was often thanks to my feed. Somehow, with the death of Google Reader, social media had become my primary digital news aggregator. 

A Bluesky post by **David Colarusso** (@davidcolarusso.com) 
### **Top post caption**:
> *Sunday comics spark the best conversations. 6yo was like, aren’t these those stairs from before?*
**Attached image**:
A **Foxtrot** comic strip by Bill Amend depicting characters on an Escher-style infinite staircase. One character says, *“It’s our low-tech stairmaster!”* while another responds, *“Mind handing me that water bottle?”*
---
### **Quoted post (being referenced by the above)**:
> *Sunday mornings are the best. Reading today’s Bizarro w/ 6yo lead us to pull out a book of MC Escher prints, and Metamorphosis lead her to suggest a game of chess. 👌*
**Attached images**:
1. A **Bizarro** comic strip title Fall of the House of Escher with an Escher-style infinite staircase falling apart.
2. A print of Escher’s **“Ascending and Descending”** with an impossible staircase.
3. Escher’s **“Metamorphosis”** series, laid open next to a chessboard.
---
### **Details**:
* Posted on **Jan 5, 2025 at 10:26 AM**
* Engagement: 2 likes, 1 reply (with a link: *Read 1 reply on Bluesky*)
* The Bluesky butterfly logo appears in the top right.
See original post on Bluesky

Because I had carefully curated my social media follows my feed was full of stuff I found interesting. My ability to control the output wasn’t as fine grained as an RSS reader, but the ability of my friends, and with varying degrees of success the algorithm, to filter out what I didn’t like and surface what I did was genuinely valuable. Between Twitter and finding my current social media home, the need for this role drove me to create a custom RSS reader that allowed users to build their own algorithms, and it really did satisfy the newsstand role, but it wasn’t social, and so it only helped me to consume content. Seriously, if the role of newsstand is what you’re looking for, consider an RSS reader. I still use mine a great deal.

It’s worth noting for those folks who might not remember what a newsstand is, that they aren’t stocked entirely with newspapers and dry periodicals. So, don’t mistake this role for something fixated on “practical utility.” I for one, enjoy the comics. Generally speaking, it’s the role of media provider, think of it as the place where you can always find something new.

4. Printing press

In March 2020, the Massachusetts courts closed due to COVID, and the LIT Lab hosted a massive distributed project to provide access to the courts through online guided interviews. At its peak, the project had over 200 volunteers on 5 continents across 11 time zones. How did we get all those people to help? A large number of them came from—you guessed it—social media. This is why I can’t just quit social media, because I’ve seen how it can be used to build and serve communities in ways that could not have happened otherwise. 

A video from my Coding the Law course, taught at the peak of the COVID lock down. It introduces the Document Assembly Line Project, the Lab’s response to MA court closures.

Most of the time I expect my posts won’t go much further than the water cooler, but occasionally, I want to share something with a larger audience, and as a private citizen there is no better way to do this than social media. Maybe a few of you got here from our newsletter, but I bet most of the folks reading this blog found it because someone shared a link on, wait for it … social media. I find this prospect amusing, because if you’re already using social media, what is it you’re looking for in this post? What do I have to offer?

Two things come to mind: (1) the above taxonomy of roles; and (2) my experience seeking out and customizing services that embody them. That being said, one thing stands out as central to social media…

Community & culture

People. People are what’s important. It is social media after all. Knowing this truth, and with the above roles in mind (diary, water cooler, newsstand, and printing press), we can try to figure out how to get what we’re looking for. I say, “we” because if you’ve made it this far I’m guessing you share at least one of my goals for roles. The important thing is that we can actively seek out those aspects of social media we find worthwhile. This offers us the choice to use social media for something we want, to be active users, not passive doomscrollers (unless you’re into that sort of thing). We can work to avoid “junk food” in our media diet because we know what we find worthwhile. So, is there a community that can deliver on all the roles above?

Between the three, it occupies that Goldilocks zone.

Since one can keep a diary on paper without sharing it, it’s tempting to think community can be decoupled from the role of a social media diary, only coming into play when the incidental discovery of one’s musings spark water cooler talk. The urge to share, however, is something I use to motivate actually writing stuff down. Consequently, I’m often writing for an audience larger than myself. Your online community shapes not only what you see, but what you share. These are the folks I’m trying to impress with my meme game.

A Mastodon post from **David Colarusso** (@Colarusso@mastodon.social), featuring a humorous caption and a scene from *Star Trek: The Next Generation*.
**Caption**:
*Pictured: The first vibe coder, Geordi La Forge, about to discover the dangers of natural language programing.*
**Image**:
A still from the *Star Trek: The Next Generation* episode **"Elementary, Dear Data"** (Season 2, Episode 3). In the scene, Geordi La Forge—dressed in Sherlock Holmes-era clothing—uses the holodeck computer. The subtitle reads:
*“Create an adversary capable of defeating Data.”*
This line is a pivotal moment in the episode, where vague wording leads the computer to generate a sentient and dangerously powerful version of Professor Moriarty.
**Post details**:
* Posted on **April 22, 2025, at 09:51 AM**
* Viewable on the web
* **419 boosts** and **708 favorites**
* The Mastodon logo appears in the top right corner, and the profile includes a headshot of David Colarusso.
See original post on Mastodon

To help get a sense of how things play on different platforms, consider this meme of which I am quite proud—Geordi the vibe coder. To be fair, I’m less proud of the typo. “Programing.”

via GIPHY

Too bad the edit button isn’t a universal feature. Anyhow, for science, I shared the same post on Bluesky, Mastodon, and LinkedIn. As of this writing Mastodon ❤️s = 708, Bluesky ❤️s = 69, and LinkedIn ❤️s = 18. Yes, I have more followers on Mastodon, but not 10 times as many, and if you count “followers” and “connections,” my LinkedIn audience is a bit bigger than it is on Bluesky. It seems only one of these sites really gets me.

A **Bluesky** post from **David Colarusso** (@davidcolarusso.com), featuring a humorous caption and image referencing the TV show *Star Trek: The Next Generation*.
**Caption**:
*Pictured: The first vibe coder, Geordi La Forge, about to discover the dangers of natural language programing.*
**Image**:
A scene from Star Trek shows **Geordi La Forge** in period attire (a suit and fedora) using a wall console. The screen subtitle reads:
*“Create an adversary capable of defeating Data.”*
**Post details**:
* Posted on **April 22, 2025, at 9:52 AM**
* **69 likes**, **14 reposts**, and a **Reply** option
* A link at the bottom says **“Read 1 reply on Bluesky”**
* The Bluesky logo (blue butterfly) is in the top right corner.
See original post on Bluesky

Back in August when I posted this meme, it didn’t occur to me that I could post it on LinkedIn, but as I started to think about this blog post, I realized I needed to see how it would perform there, for SCIENCE! Turns out I was right about how it would land. Also, I had no idea you could embed a LinkedIn post until I wrote this and ended up checking. In the end we opted for using screenshots so we could add alt text and avoid them breaking in the future, but now you know.

A LinkedIn post by **David Colarusso**, Co-director of the Legal Innovation & Technology Lab, featuring a humorous take on coding and AI. The caption reads:
*“Pictured: The first vibe coder, Geordi La Forge, about to discover the dangers of natural language programing.”*
The post includes a screenshot from **Star Trek: The Next Generation**, showing the character **Geordi La Forge** dressed in a vintage-style suit and hat, facing a wall panel and speaking. The scene includes a subtitle that reads:
*“Create an adversary capable of defeating Data.”*
This is a reference to a famous episode in which vague programming instructions to the ship's computer result in the creation of a dangerous holodeck character.
The LinkedIn post shows **18 reactions**, **1 comment**, and options to **Like**, **Comment**, or **Share**.
See original post on LinkedIn

You might think that given how my meme performed this blog post would be all about how everyone should join me on Mastodon. Though I would love this, because philosophically I’m a big proponent of what the Fediverse is trying to do. I don’t think it’s the right fit for most folks. I’ll continue to crosspost there and donate $ to my server admins, because these are communities I cherish, but Bluesky is a better overall fit. The majority of folks I followed on both Mastodon and Twitter are now on Bluesky, and I suspect this is true for most folks. See e.g., ABA’s Best of Law Twitter (Where are they now?).

Here’s the post from Sarah Fackrell that triggered my “move” to Bluesky from Mastodon. As a very active member of the LawFedi community on Mastodon, Sarah’s articulation was the writing on the wall.

A social media post from **Sarah Fackrell** (@design_law@mastodon.social) on Mastodon. In the message, she addresses her followers to explain that while she still values and enjoys being on Mastodon (referred to as "the fedi"), many legal professionals have moved to Bluesky. As a result, she has been posting more frequently there.
She clarifies that she is keeping her Mastodon account but has received requests for a way to connect between platforms. She provides her Bluesky handle: **@design-law\.bsky.social** for those who want to follow her updates there.
The post is dated **November 10, 2024, at 08:54 AM**, accessed via web, and shows **2 boosts** and **11 favorites** at the bottom. Her profile picture is a headshot, and the Mastodon logo is displayed in the top right corner.
See original post on Mastodon. To set up automatic posting between Bluesky and Mastodon or vice versa, check out https://fed.brid.gy/

The truth is, I want my social media to feed all of me, from Gen X TNG fan to law school instructor. I named my second social media role water cooler because I wanted it to be something that could live in the office but not be entirely of the office. I’m sorry LinkedIn, I can take you in small doses, but you only really check the boxes for 2 of my roles.

A balanced approach to social media (one that considers all of the above roles) doesn’t prize “engagement” over all else. It’s not just a printing press! I keep talking about Bluesky, not because it is perfect, and not because it has every feature I like in other platforms (it doesn’t), but because I think a combination of its user base and feature set makes it the option best able to meaningfully occupy my four social media roles. There’s even a chance that Bluesky through the AT Protocol might end up spurring decentralized social media in the spirit of the Fediverse.

There was a time when it looked like my social media life would have to straddle Mastodon and LinkedIn. Bluesky, however, offers something more holistic. Between the three, it occupies that Goldilocks zone. I can find folks who are willing to laugh at bad Gen X jokes and talk tech and law. And despite what you may have heard, it can welcome genuine discussion, even about AI.

Bluesky has the critical mass necessary to support a good social media experience for most folks. You may have heard its a left-wing echo chamber, and I’d suggest against giving that too much credence because, as I will show you, to a large extent, Bluesky is what you make of it. The tools that make this possible are actually why I used the term “pretty great” in the title. See Take control.

Importantly, its user base is large and diverse enough to support my need for a newsstand. See Build your own algo(s). And from what I can see, it seems to be a pretty good driver of real human traffic.

This is a **Bluesky** post from **Chris Geidner** (@chrisgeidner.bsky.social), commenting on traffic sources to his newsletter "Law Dork."
---
### **Main post**:
*Yeah. For me, the vast majority of the real people are now here. This is the top traffic — aside from the newsletter itself — for yesterday’s Law Dork post:*
He includes an image showing referral traffic sources, with **Bluesky** leading by a significant margin:
* **Bluesky**: 2.8K
* **Substack**: 1.8K
* **Direct**: 1.1K
* **X (formerly Twitter)**: 372
* **Google**: 242
* **Threads**: 121
* **Facebook**: 86
---
### **Quoted post by Tim Onion** (@bencollins.bsky.social):
*I don’t really care what this place is or isn’t. Alls I know is it’s been great for the business of The Onion and that both Zuck and Musk have experience cooking and/or hiding the books on their own traffic. Doesn’t really matter if there are more page views if they’re not real people.*
---
### **Post metrics**:
* 7 comments
* 52 reposts
* 551 likes
See original post on Bluesky

I don’t yet know if Bluesky could support another Document Assembly Line, but I know it feels more like the best of Twitter than anything since.

As for the worst of Twitter, trolls, and the like, as is often the case, much of that comes down to community as well. I won’t pretend that Bluesky is much better than any other sufficiently large social media site, except maybe X. Unlike X, the platform is trying, and as we’ll discuss below, there are technical options and norms to help you control how and with whom you interact.

By this point, you may have discovered that I’m an old. What gave it away, the Star Trek TNG memes or the physical newspapers? Either way, it’s worth noting there are many social media sites I haven’t mentioned. Lest you think I’m using social media as a synonym for micro blogging (that phrase really dates me), I’ve actually focused in on Bluesky because most of those other sites aren’t capable of ticking all my boxes. Photo-first and short form video sites haven’t traditionally served as great newsstands. Structurally, they tend to prefer in-app attention, and their feature sets show it. I suppose this betrays a bias towards thinking that a newsstand has to make it easy to link out to written articles, and I’m okay with that. As you know, I still get a Sunday paper. ¯\_(ツ)_/¯

I also recognize that more and more folks are going to long-form video for non-fiction content, but my accommodation to this fact is to claim that a newsstand needs to be able to foster the sharing of long-form text and video. Maybe this is me as an old insisting that the only real social media is the social media of my young adulthood and working back from that—let’s not go back as far as my youth and dial-up modems—but this piece is framed around how and why I use social media. That being said, I want to show you how I do it; so you can run with it and make it your own.

Take control

In this section I’m going to drown you in a bunch of examples from my own social media usage. By showing you how I’ve sliced and diced content from the same pool of users, I hope to convince you that, with the right tools, one can reliably mine the depths of social media for “premium content.” Fair warning, I overdo it. The amount of time and thought I’ve put into social media is way above the norm. Luckily, you don’t have to replicate my effort to reap its benefits. In Suggestions below, I share specific actions you can take or leave to help build a satisfying experience on Bluesky. And, yes, many of these have analogs on other platforms.

A note on algorithms

Something a lot of folks think they know about platforms like Bluesky and Mastodon are that they “don’t have an algorithm.” Unfortunately, this isn’t really true. What folks tend to mean when saying this is that these platforms display posts promoted or written by people you follow in reverse chronological order. This is an algorithm, albeit a rather straightforward one. Generally speaking an algorithm is a recipe, a set of rules for doing something. Reverse chronological might not look like much of a rule set, but consider that “no-algo” could have just as easily meant, “display unread posts in chronological order.” Reverse chronological is just one algo among many.

I point this out because the framing of social media algo v. no-algo removes an important consideration from the discussion. It presents a false binary. The push for “no algo” social media is really about who has the power to direct your attention. Do you have agency over what you see or does some opaque set of rules engineered to keep you on your phone? I’m looking at you, TikTok. The reality, however, is that there are more than two choices here. We can use rules/algorithms to help us take control of what we see. Algos aren’t a threat to user agency and autonomy. What matters is who controls them and for what ends.

To be fair, Bluesky doesn’t call itself the no-algo social network. They like to talk about how their platform fosters algorithmic choice, and that is exactly what I’m talking about above. So, you can see why I gravitate to their work. Let’s learn how you can use some tools to take control.

Curate lists

A reverse chronological list of posts promoted or made by people you follow is a pretty straightforward algo. It’s easy to see what you control. If you follow different folks their content and the content they promote starts showing up. Lists, collections of accounts with their own timelines, let you multiply your feed. You can create lists centered around different accounts to produce different streams of content. This means if you want to “follow” an account but don’t want it crowding up your home timeline, you can put it in a list that you only visit when you’re in the mood.

Below I share some of the lists I maintain. To be clear, many of my lists are dynamically maintained by code. This is a heavy lift, and I don’t expect most folks will do the same. However, even if you don’t want to make a bunch of lists, you can follow other people’s. Like the ones below. Just hit the “Pin to home” button at the top of the list’s timeline.

Would buy coffee

As I mentioned above, social media is a place for me to build and maintain bonds with a bunch of folks. This means I want to see content from loads of people, but I also what to make sure that I don’t miss content from folks I actually know. This can be tough when you follow a bunch of people. So, I make an A List of folks who I feel particularly close to, usually because I know them in the physical world, but sometimes they’re folks with whom I’ve had a good number of online interactions, or I love their books. The A List lets me check in periodically and make sure I don’t miss what’s going on with them.

Professionals

  • Attorneys, law profs, et al. Attorneys, law profs, et al. compiled roughly like this: I set a bot to follow a handful of law folks and every so often it follow some of their shared follows, if they seem to be law-type folks. New follows get added to this list. Yes, this is an algorithm!
  • Members of the press. Includes folks from @hunterw.bsky.social‘s verified press Starter Packs through No. 5 as of 2025-05-16. Plus some of my own additions. Not associated with Hunter in any way.

Groups

  • Newsstand. A collection of news organizations and periodicals. Instead of individual writers or personalities, this list is made up of accounts from their employers. This list is far from exhaustive, but you get the idea.
  • Organizations. Non-human entities that aren’t part of the Newsstand list.

Follower-based cohorts

If you’re dealing with a reverse chronological timeline, big accounts can tend to crowd out smaller ones since generally speaking the big accounts post more. To combat this, I place accounts into one of three buckets. I used to do this manually when I first followed an account, but recently I wrote some code to place folks on these lists automatically when I follow them. Keep in mind, that these are only accounts I found interesting and are probably not representative of the accounts you want to follow. I just want to get the concept across.

  • People. Interesting posters with fewer than 10K followers.
  • Personalities. Interesting posters with more than 10K followers but fewer than 100K.
  • Celebrities. Interesting posters with more than 100K followers.

Engagement-based lists

Some of my favorite lists start to look like custom feeds, introduced below in Build your own algo(s). Here are two that I maintain with some code.

  • Interesting. Accounts that have posted at least one thing I’ve found interesting. That means I hit like on something they posted. If you’re up for it, I’ll show you how to make one of these for your likes as part of the heavy lift how-to below.
  • High score. The 20 accounts most reposted by @icymilaw.org over the past week. It looks back 168 hours (7 days) and updates multiple times a day. High score, get it? One score = 20, as in, “four score and seven years ago.” ;)

Starter packs

At their heart, starter packs are lists, but instead of defaulting to showing you the posts of its members, they focus on letting you follow those members, either one at a time or all at once. They also allow custom feeds as “members.” Here are three packs I made/maintain.

You can find more under the Explore section of Bluesky. Just scroll down a bit. You can also browse this directory.

Labelers

I’m stretching the “list” moniker a bit, but there exist a set of “list” that you can subscribe to, but instead of showing you their own timelines, they add labels to posts that show up anywhere on Bluesky. For example, if you subscribe to Officially Verified by Hunter Walker, any time you see a post from someone he’s added to this list, it will tell you that they’re a member.

A Bluesky social media profile for a user named Mike Masnick (@mmasnick.bsky.social). His profile picture is a yellow cartoon avatar with glasses, resembling a character from The Simpsons. A blue verification checkmark appears next to his name. He has two badges: one indicating Bluesky verification and another labeled "Bluesky Elder." His bio states: "Techdirt guy. Writes about social media, copyright, free speech, content moderation, civil liberties and stuff like that. Once wrote a paper that may have helped inspire this service & now I'm on its board: bit.ly/protocolnotp…"
Screenshot of Mike’s profile as displayed in my Members of the Press list

If you click on the red check and globe icons, you will be shown the following explanation, “Reporters, media outlets, and media types Officially Verified on Bluesky by Hunter Walker.”

“Bluesky Elder” is from a different labeler, and is a bit of a joke. Here’s the explanation you get when you click the label, “This user has been here since before the media tab (August 2023). This label is not a label of honor—no highly esteemed deed is commemorated here. This label is meant in jest and dates to early experiments in labeling. It is applied to the first 800,000 Bluesky accounts. Appeals honored.” See also, This Place Is Not a Place of Honor.

We’ll be seeing labelers again when we talk about moderating interactions. So, stay tuned.

As with lists, there is a directory.

Build your own algo(s) 👈 this 🔥 feature makes all the difference!

This is it, the main event! This is why I’ve really come to ❤️ Bluesky. You can actually build your own algos. Bluesky calls them custom feeds. To show you what’s possible, here are some of my feeds.

  • AI & the law. This feed is sourced from my curated lists of lawyers, tech folks, et al. It pulls out posts that seem to be talking about AI & Law. I’ll show you how such a thing is possible below in the moderate lift section of Suggestions. It’s limited to about 100 posts at a time, and these are sorted by a mix of engagement and newness.
  • AI talk. A mix of artificial intelligence (AI) critics & boosters with a focus on law, ed, & civic tech. Again, this feed is sourced from my curated lists. It pulls out posts that seem to be talking about AI. It’s limited to about 100 posts at a time, and these are sorted by a mix of engagement and newness.
  • Law-like talk. A selection of posts from my list of law folks, filtered to favor law content, sorted by popularity and newness, with a 5% dash of content from the AI & the Law feed.
  • News-like Links (law). A collection of posts from my law folks list with links that look like they point to news articles.
  • Dangerous words. A feed of post including banned or censored words cited in either of the following articles: The List of Trump’s Forbidden Words That Will Get Your Paper Flagged at NSF or The NSA’s “Big Delete”. Again, these posts are sourced from a collection of my lists.

And here are some feeds I didn’t make.

What’s amazing is that all of the above source their content from very similar groups of users. What makes them unique is how they filter and sort their content.

Moderate interactions

Labelers

I promised Labelers would make another appearance, and so they have. When you subscribe to a labeler you can configure each label to trigger different actions. By default everyone is subscribed to the Bluesky Moderation Service. You can configure how labels behave by finding the labeler under “Settings” > “Moderation” > “Advanced” (scroll all the way down). Just click on the labeler, and scroll down. You’ll see a collection of toggles like these.

A screenshot of content filtering settings from Bluesky, showing moderation options for three categories: Scam, Engagement Farming, and Spam. Each category includes a description and three toggle options labeled "Off," "Warn," and "Hide."
* **Scam**: Described as "Scams, phishing & fraud." The "Hide" option is selected.
* **Engagement Farming**: Defined as "Insincere content or bulk actions aimed at gaining followers, including frequent follows, posts, and likes." The "Hide" option is selected.
* **Spam**: Described as "Unwanted, repeated, or unrelated actions that bother users." The "Hide" option is also selected.
All three categories are set to "Hide," indicating the user has chosen to automatically filter out these types of content. The interface has a dark background with light blue highlights on the selected options.

You can choose the level of intervention. The Bluesky Moderation Service has pretty standard Trust and Safety categories, but as you know, you can subscribe to other labelers. For example, @skywatch.blue‬ has some “interesting” labels.

A screenshot of a content filtering setting labeled **"Fully Automated Luxury Reply Guy."** The description explains that this filter targets accounts that post seemingly polite but disruptive reply spam, often phrased as “I wish to politely disagree.” These accounts are frequently automated and may use tools like ChatGPT to cause disruption without appearing overtly antagonistic or trolling.
Below the description are three toggle options: **Off**, **Warn**, and **Hide**. The **Hide** option is selected, indicating the user has chosen to automatically filter out this type of content. The interface uses a dark theme with light blue highlighting for the selected option.

Blocks & mutes

Bluesky has a strong block and move on culture. It also has a strong block. “Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours.”

A social media post from **John Scalzi** (@scalzi.com) on **Bluesky**, discussing his approach to online interaction. He shares that social media has improved for him since adopting the mindset of **"don't engage, just block."** He explains that instead of getting angry at trolls, he simply blocks them without emotional reaction and quickly forgets about them, leading to a calmer experience.
Below the post is a message box stating:
**"The author of the quoted post has requested their posts not be displayed on external sites,"** indicating that the quoted reply is hidden due to privacy settings.
The post is timestamped **June 9, 2025 at 9:58 AM**. Engagement metrics show:
* **2.7K likes**
* **319 reposts**
* **Reply** option
* A link to **"Read 74 replies on Bluesky"** in blue text.
 The Bluesky logo (a blue butterfly) appears in the top right corner.
See original post on Bluesky

If you just want to remove someone from your timeline without letting them (or anyone know), you can use the mute feature. “Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private.”

Both blocks and mutes can be applied to an account by clicking on the “…” button next to “Follow/Following”.

A screenshot of a dropdown menu from Bluesky, showing user interaction options after clicking the three-dot (•••) menu next to the "Following" button. The options listed are:
1. **Copy link to profile** – represented by a link icon.
2. **Search posts** – represented by a magnifying glass icon.
3. **Add to lists** – represented by a filter/list icon.
4. **Mute account** – represented by a muted speaker icon.
5. **Block account** – highlighted in dark, with a person icon and a strike-through.
6. **Report account** – represented by a flag icon.
This menu allows users to manage their interaction with another account, including muting, blocking, or reporting it. The interface uses a dark mode color scheme.

There are things called block lists and by following them, you block everyone on them. They’re kind of like inverse starter packs. Sometimes they get weaponized (“innocent” folks intentionally included in a class they don’t actually belong to). So, be careful about what you follow.

If a conversation is getting to be too much, you can mute words for set amounts of time (Forever, 24 hours, 7 days, or 30 days). “Settings” > “Moderation” > “Muted words & tags”.

A screenshot of the "Add muted words and tags" settings panel from Bluesky. The panel allows users to mute posts based on specific words or tags.
At the top is an input field labeled “Enter a word or tag.” Below it are options for **Duration**, with choices: **Forever** (selected), **24 hours**, **7 days**, and **30 days**.
Next is the **Mute in** section, with options: **Text & tags** (selected) and **Tags only**.
Under **Options**, there’s a checkbox labeled **"Exclude users you follow"**, which is currently unchecked.
At the bottom, a large blue **Add +** button allows the user to confirm and apply the mute settings. The interface is in dark mode with blue highlights indicating selected choices.

Post interaction settings

For when you really don’t want folks jumping into your comments, there are interaction settings. You can change these on individual posts when writing them or after a post is written. Use these to allow or disallow quote posting and to define who can reply to a post.

A screenshot of the "Post interaction settings" panel from Bluesky. This panel allows users to customize who can interact with a specific post.
* **Quote settings**: A toggle switch labeled "Allow quote posts" is turned on, meaning others can quote the post.
* **Reply settings**: Under "Allow replies from," there are two main options: **Everybody** and **Nobody**, both currently unselected.
* Below that, two additional options allow combining settings:
 * **Mentioned users** (selected)
 * **Users you follow** (selected)
This means only users who are mentioned in the post and users the poster follows are allowed to reply. The interface uses a dark theme with blue highlights indicating selected options.

Just look for interaction links at the bottom of your draft or published post. In a draft it looks like a button where as published posts show a link next to a little pencil. You can also change your default settings under “Settings” > “Moderation” > “Interaction settings“.

A confession (how I really use social media)

I don’t use the default Following feed. Every post I see on Bluesky is mediated by a list or custom feed.

I’ve broken the infinite scroll.

Remember my follower-based cohorts? Well, here’s what I do with those lists. I create custom feeds. Short custom feeds. Each of these feeds is limited to 8 “popular” posts, but only after I filter out what looks like political talk, and remove posts from my A List, the Newsstand, and Organizations. So, here’s how I actually use social media.

I login and scroll through my A List (the folks for whom I would buy coffee). Then I look at the less-political feeds from my People, Personalities, and Celebrities lists, each limited to 8 posts. I follow this up by browsing the AI & the law, Law-like talk, and AI feeds, each limited to a hundred or 150 posts. If there’s a news story I want to follow up on, I’ll dip into News-like links, Members of the press, or Attorneys, law profs, et al. Also, that political talk I filtered out of some of the above feeds, I pack it all into a political-like talk feed that I can visit if I didn’t find enough in the news, press, and attorney feeds.

I’ve broken the infinite scroll. I come to the end of my social media feeds in roughly 20 or 30 mins. That’s the trick, using all of these tools to avoid FOMO by working to surface the content I want to see while limiting what is actually presented to me.

What do I do with all the time I save not doomscrolling? I read all those open tabs. It’s so nice, and yeah, I revisit my feeds, but because nothing much changes on short time scales, I’m not as obsessive about this as I once was.

Pro tip: I send all my open tabs to Matter. I used to use Pocket, but it’s closing down. I’ve also used Instapaper in the past.

Suggestions

The following is a menu of actions you can take to curate your social media experience on Bluesky. If you haven’t already, create a Bluesky account. Be warned. I’m going to make one big assumption. I’m going to assume that you are interested in law and technology. If you aren’t, some of the content suggestions may fall flat. I mean, look at the website you’re on. LIT stands for Legal Innovation & Technology.

Low lifts (follow these things, toggle these settings)

If you haven’t already, create a Bluesky account.

If you don’t know who or what to follow

Follow one or more.

  • Attorneys, law profs, et al. (a list) Attorneys, law profs, et al. compiled roughly like this: I set a bot to follow a handful of law folks and every so often it follow some of their shared follows, if they seem to be law-type folks. New follows get added to this list.
  • Law folks talk (a custom feed). This feed showcases posts from the above list. It’s limited to about 100 posts at a time, and these are sorted by a mix of engagement and newness.
  • Law-like talk (a custom feed). A selection of posts from the above list of law folks, filtered to favor law content, sorted by popularity and newness, with a 5% dash of content from the AI & the Law feed found below.
  • @icymilaw.org A law-themed discovery bot I built. It adds a dash of law talk to your timeline (~60 reposts/day). Approximate algo: follow law folks; share new & popular posts. Under the hood, it’s a more filtered version of the Law-like Talk feed. I’m really proud of this bot. You really should give it follow, then tell all your friends. ;)
This meme uses the "expanding brain" format to illustrate increasingly advanced methods of accessing legal content on Bluesky. Each level features a progressively more glowing and complex image of a human brain, paired with text:
"Bluesky list of folks working in law" – simple brain.
"Feed surfacing their 'best' posts" – slightly more active brain.
"Feed surfacing the 'best' posts but showing only law content" – brightly lit brain.
"A bot that injects the best law content directly into my home feed" – fully illuminated brain with beams of light.
  • @sufflitlab.org The Legal Innovation & Technology Lab is part of the clinics at Suffolk University Law School. We build things that help folks navigate and understand legal systems. Learn more at: suffolklitlab.org
  • @news.bot.suffolklitlab.org‬ An RSS feed wrapped in an LLM, pushing text to social media with Python & a CRON job.
  • AI & the law (a custom feed). This feed is sourced from my curated lists of lawyers, tech folks, et al. It pulls out posts that seem to be talking about AI & Law. It’s limited to about 100 posts at a time, and these are sorted by a mix of engagement and newness.

If you want to follow the feeds and individual accounts (sorry no lists), you can do so in one fell swoop by following the LIT Lab’s starter pack (you’ll also follow the accounts of the LIT Lab staff and three surprise accounts ;).

If you know some folks to follow

These follows will build upon your existing network. Follow one or more of them.

Configure these settings

Visit the Bluesky moderation service, scroll through the labels and decide if you want to change any of the default behavior (e.g., hiding stuff that was only set to warn, or moving to warning from hiding).

If you’ve followed some custom feeds, consider spicing up your Following feed by going to “Settings” > “Content and media” > “Following feed preferences” and checking the box for the experimental feature “Show samples of your saved feeds in your Following feed.” As you may know, I don’t use the Following feed, but I hear this is nice.

Moderate lift (copy or build lists and custom feeds)

Before we get started with lists and custom feeds, I want you to know a bit about app passwords. An app password is a way for you to let some third-party login to your account without giving them your “real” password. The idea is you make the app password, use the service, then delete the password.

Here’s how you Create an app password in Bluesky
A screenshot of the "App Passwords" settings page from the Bluesky social media platform. At the top, a description explains the purpose: *"Use app passwords to sign in to other Bluesky clients without giving full access to your account or password."* The message is accompanied by a small blue sprout icon on the left. Below the message is a large blue button labeled **"+ Add App Password"**, which allows users to generate a new app-specific password. The interface is in dark mode with light text and bright blue highlights.
  • Provide a name for the app password
  • Copy the app password to your clipboard and use it right away as you won’t be shown this password again
Make a list

Build a list by hand (no app password needed) or, if you already have a bunch of follows, you can turn them into a list with this Create a list from all the people you follow tool from Seth Miller.

A webpage titled **"Create a list from all the people you follow"** provides instructions for Bluesky users to generate a list using their account. A large red warning near the top reads: **"DO NOT USE YOUR REGULAR PASSWORD HERE."**
The steps instruct users to create a new [App Password](https://bsky.app/settings/app-passwords) via Bluesky:
* Click the link to the App Password page.
* Click “Add App Password.”
* Name it something identifiable like “list converter.”
* Click “Create App Password.”
* Copy the generated string and use it as the password on this form.
* Delete the App Password when finished for safety.
Below the instructions are two form fields:
* **Your BSky Handle:** (example input: `user.bsky.social`)
* **Your BSky App Password:** (example input: `abcd-1234-fghi-5678`)
A **Submit** button is at the bottom. The design is minimal and utilitarian, with black text on a white background and purple hyperlinks.
Screenshot of https://nws-bot.us/bskyListMyFollows.php

It doesn’t matter who’s on your list, but it will end up being useful below if you have a largish list. If you want to make your list manually:

  • Go to “Lists” page on Bluesky, then click the “+ New” button at the top of the page
  • Give your list a name, and hit “Save”
Make a custom feed from your list

For the moment, you have to use an outside service to make custom feeds though I hear Bluesky is working on native support sometime soon. Until then, SkyFeed is a great little tool from redsolver for making custom feeds, and since it’s an outside service, you’ll need an app password (see above). Once you’ve made an new app password, visit https://skyfeed.app/, enter your handle and app password, then click “Continue.”

A login interface for **SkyFeed**, a third-party Bluesky client. The design features a dark background with white and green accents. At the top is the SkyFeed logo, which includes a cloud icon and bold black text.
Below are three input fields:
1. **Service** – preset to “bsky.social” with a cloud icon.
2. **Username or email address** – labeled in green, with a green outline and @ symbol icon indicating where the user should enter their Bluesky handle or email.
3. **App Password** – a password input field with a lock icon, prompting the user to enter an app-specific password (not their main account password). A small external link icon beside the field suggests help or instructions.
The **Continue** button at the bottom is grayed out, indicating it is disabled until the required fields are filled.

After logging in, click “Feed Builder” in the left-most column, and start playing around. Below is a screenshot of a simple feed I put together based on my list of lawyers and the like. Use “+ Add Block” to add new behaviors. In the feed below, the first block pulls in data from my list, the next block uses regular expressions (RegEx) to filter posts based on whether or not their text matches as set of keywords. You don’t need to understand the syntax, but if you’re curious, I have a longer introduction below. For now, here’s a simple example: \b(trump|elon)\b. The \b looks for a word boundary, and | means or. So \b(trump|elon)\b looks for the word “trump” or the word “elon.” Subsequent blocks rank the posts by a mix of shares and likes (HN Ranking). Duplicates are removed; the list is truncated to 100, and then sorted again so that the posts are reverse chronological. In this way, I’m able to construct a feed of something that looks a bit like the most-popular “political” posts made in my list. This assumes that posts matching my RegEx are political in nature, which is sometimes true and sometimes not. The terms are both over and under inclusive as they were added piecemeal by responding to the loudest posts, an evolving list of words to be muted.

I’ve drawn an arrow pointing to the “Switch to JSON Editor” link. You should see this link after clicking on once you’ve started to make your own feed. click on it. This will move you away from the block view. If you want to play around, I suggest staying in the block view, but below I’ve provided JSON (it’s a structured data format) you can use to recreate my feed.

A screenshot of the **SkyFeed Builder** interface, a tool used to create custom feeds on the Bluesky social platform. The interface is in dark mode with a green and purple color theme labeled “Dracula.”
Key elements include:
* **Top Left**: Sidebar with navigation options such as Skyline, Notifications, Profile, Lists, Feed Builder (highlighted), and more.
* **Top Center**: The feed being built is titled “Political -like Talk.” A green button labeled **“Publish Feed”** and a blue link **“Switch to JSON Editor”** are visible.
* **Main Panel**:
 * An **Input List** section with a URI to a user’s list.
 * Multiple **RegEx** blocks filled with keyword patterns related to politics, politicians, conspiracy terms, and ideologies.
 * Filtering options include targeting **Post Text, Image Alt Text, and Links**, case sensitivity, and sorting by **HN Ranking** and **Creation Date**.
 * Controls for removing duplicates and setting result limits.
* **Right Panel**: A **Feed Preview** showing live posts from Bluesky users containing matched keywords (e.g., “Trump,” “Musk”). Posts are displayed with usernames, timestamps, text, images, and interaction counts.
An orange arrow is pointing at the “Switch to JSON Editor” link, indicating an alternate method for editing the feed logic.

Here’s what things look like with the JSON Editor enabled.

A screenshot of the **SkyFeed Builder** interface in **JSON Editor** mode on the Bluesky platform. The screen is divided into three panels:
* **Left Sidebar**: Navigation menu with options like Skyline, Notifications, Profile, Lists, Feed Builder (highlighted), and Discover Feeds. The user theme is set to “Dracula,” and the sidebar shows user info (e.g., @suffolklitlab).
* **Center Panel (JSON Editor)**: Displays the JSON configuration for a feed titled **“Political -like Talk.”** The feed includes multiple blocks:
 * An `input` block pulling data from a list using a `listUri`.
 * A `regex` block matching terms like “trump,” “elon,” “musk,” and others across `text`, `alt_text`, and `link`.
 * Sorting by “hn” (Hacker News) ranking and by “created\_at.”
 * Settings to remove duplicates and limit results to 100 posts.
 * The license is specified as “MIT.”
* **Right Panel (Feed Preview)**: Shows a live preview of posts matched by the feed. Several Bluesky posts are visible, including mentions of political figures (e.g., Trump, RFK Jr., Musk) and comments on public policy and science. Each post includes a username, timestamp, post content, interaction buttons (reply, repost, like), and some include links or images.
The interface is in dark mode with color-coded syntax in the JSON editor for better readability.

Place your cursor in the editor, select all, and delete. Then take the JSON I’ve provided, the text between and including the outer-most curly brackets { } below, and paste it in the editor.

{
    "displayName": "Political-like Talk",
    "blocks": [
        {
            "type": "input",
            "inputType": "list",
            "id": "aaabqg67prw2e",
            "listUri": "at://did:plc:tf3cuutfe2ukjvmimfljzptd/app.bsky.graph.list/3lok5i2h6mr2o",
            "historySeconds": 259200
        },
        {
            "id": "aaagh4rop7tao",
            "type": "regex",
            "value": "\\b(trump|elon|musk|melania|rfk\\Wjr|don\\Wjr|giuliani|vance|kushner|speaker\\Wjohnson|gabbard|(marco\\W)rubio|(pete\\W)?hegseth|\\bdesantis|\\bnoem|bezos|zuck(erberg)?|eric\\Wadams|cuomo|(ag\\W|pam\\W)bondi|(linda\\W)mcmahon|kash\\Wpatel|(aileen|judge)\\Wcannon|merrick\\Wgarland|jack\\Wsmith|potus|presiden(t|cy)|\\bdem(s)?|republican|democrat|speaker\\Wof\\Wthe\\Whouse|(majority|minority)\\W(wip|leader))|\n\n(gaza|israel|ukrain|DC|white\\Whouse|u\\.?s\\.\\Wcapitol|greenland|panama|mar-a-lago)|\n\n(gop|\\bdnc\\b|congress|house\\Wof\\Wrepresentatives|senate|election|vote|democracy|politics|jan(uary|\\.)\\W6|j6|1/6|project\\W2025|magas?|mahas?|meta|\\bfacebook\\b|\\bd\\.?o\\.?j\\b|fbi|ice|dei|gsa|omb|immigration|woke(ness)?|homeland|fox\\w(news|and\\wfriends)|climate\\W(change|crisis)|executive\\Worder|EOs|qanon|birthright|fasc(ist|ism)|dictator|oligarchy|hitler|nazi|gulag|tyrannical|partisan)\\b",
            "caseSensitive": false,
            "target": "text|alt_text|link",
            "invert": false
        },
        {
            "id": "aaagh4rop6nou",
            "type": "sort",
            "sortType": "hn",
            "gravity": "4.0"
        },
        {
            "type": "remove",
            "subject": "duplicates",
            "value": null,
            "id": "aaah3lsrnwcby"
        },
        {
            "type": "limit",
            "count": 100,
            "id": "aaah2z524hx2g"
        },
        {
            "type": "sort",
            "sortType": "created_at",
            "id": "aaah3po7a7pfg"
        }
    ],
    "license": "MIT"
}

Once you’ve done this, click on “Switch to Visual Editor.” This will bring you back to the block editor. If you want to tweak things, you can replace my RegEx with your own (e.g., \bAI\b). When you’re ready to go live, click “Publish Feed.” Just follow the instructions when prompted. Your feed will show up on your profile under feeds.

Now here’s a neat trick, by clicking the “Invert” box in the RegEx block, you can turn your feed from one where the posts must have one of the keywords to one where none of the words can be present.

A screenshot of a filtering settings section from the SkyFeed Builder interface on Bluesky. It shows options for targeting specific content fields in posts:
* **Target**: Three buttons are highlighted in green, indicating they are active:
 * **Post Text**
 * **Image Alt Text**
 * **Link**
* Below the target options:
 * A link labeled **"What is this?"** appears in green.
 * A checkbox labeled **Invert** is checked, meaning the filter will exclude posts that match the criteria.
 * A checkbox labeled **Case Sensitive** is unchecked, meaning the filter is not case-sensitive.
The background is dark, and active elements are shown in bright green, consistent with the interface’s dark mode theme.

You can use the same copy paste trick above to duplicate your feeds. Coupled with the invert checkbox, this means you can make two posts from your list, one very “political,” and one less so. I’ll leave it to you to come up with other uses. If you’re keen on dreaming up some, I suggest the supplemental reading below on regular expressions, or you can just play with the RegEx block. If that doesn’t sound interesting, just skip to the API how-to.

Supplemental Materials

Again, if you’re not up for learning more about regular expressions, you can always jump to the next section—on accessing the Bluesky API. This is going to be a bit of a detour.

I’m pretty vocal about custom feeds on Bluesky. So much so, that a while back Rev. JWrath, a former student of mine—from back when I taught high school astronomy, not law school—reached out asking if I could point them in the direction of making one. After a very short exchange which was pretty much, “Here’s the tool I use. skyfeed.app . . . Good luck” they responded that it looked workable and I joked about regular expressions being addictive to which they responded, “XKCD warned me about this”. Here’s what they were referencing.

This is a comic from **xkcd** titled *"Regular Expressions."* It humorously illustrates how people imagine themselves as heroes after learning a powerful technical skill.
**Description:**
The comic is drawn in xkcd’s signature stick-figure style. In the first panel, the narrator explains in a yellow text box: *“Whenever I learn a new skill I concoct elaborate fantasy scenarios where it lets me save the day.”*
Subsequent panels show a crime-solving scenario where characters are trying to locate a killer using clues hidden in 200MB of emails. One character says it’s hopeless to search for something formatted like an address. Dramatically, another character says: *“Everybody stand back… I know regular expressions.”*
The last few panels show the character descending from above like a superhero, typing furiously on the computer (with a "PERL!" sound effect), and the others watching in awe as the day is presumably saved.
XKCD comic 208: Regular Expressions

The point being I figured I should have a better stock answer for folks asking about regular expressions, and this is now part of that answer. Regular expressions are really powerful. So much so that back when I made this video pre ChatGPT, I said they stood somewhere between ctrl-f and the computer on Star Trek. Anywho, this video will give you a short introduction and maybe some good ideas for how to make your custom feeds sing.

Another video from my 2020 class. If you’re following along with the above, open up Regular Expressions 101: https://regex101.com. Afterward, cut and paste the following text into the TEST STRING field found at regex101, and follow along with the exercise above.

01110100 555.867.5309 01101000 1.4142135623 01101001 987-01-6661 01110011 202.555.9355 00100000 01101001 3.1415926535897932384626433832795 01110011 00100000 666-12-4895 01100001 202-555-9355 00100000 01101000 (555) 867-5309 01101001 01100100 2.718281828459 01100100 01100101 01101110 00100000 01101101 555-867-5309 01100101 01110011 01110011 555/867-5309 01100001 01100111 01100101

Heavy lift (run a script to update a list via an API)

When I introduced lists above, I mentioned a list I call Interesting. It’s a list of accounts that have posted at least one thing I’ve liked. If you’re not scared off by a little code, I’ve put together a Colab Notebook you can use to populate your own such list. Colab notebooks are like Google Docs for code. Sign in to a Google account, and open this notebook: Add Bluesky users to a list if I liked a post of theirs.

Once you’re on that page, select “File” from the menu at the top of the page then “Save a copy in Drive.” This will open your own copy of the notebook for you to edit and run. Once the copy has been opened, close the original. Go back to the copy and follow these instructions.

Before you can run the code, you’ll need to set up a few things. You will, however, only need to do this once. After you are set up, you can rerun the code in the notebook to update your list whenever you like.

Create a Bluesky app password & save It as a “secret”

Make a new secret
  • Click the key icon in the column to the left of the notebook. This will open the “Secrets” panel
  • Click “+ Add new secret”
A screenshot of a Google Colab notebook titled **“Copy of Add Bluesky users to a list if I liked a post of theirs.”** It guides users through securely adding a Bluesky app password as a secret key to use within the Colab environment.
### Key elements:
* **Left panel ("Secrets")**:
 * Contains instructions and a warning: *“Secret name cannot contain spaces.”*
 * An orange key icon indicates the section for managing secrets.
 * A blue button labeled **“+ Add new secret”** is highlighted with a red arrow.
 * A code snippet shows how to access the secret in Python:
 ```python
 from google.colab import userdata
 userdata.get('secretName')
 ```
* **Right panel ("Instructions")**:
 * Step-by-step instructions on how to create a Bluesky app password and store it:
 * Click the key icon in the left sidebar.
 * Click **“+ Add new secret.”**
 * Enter **“Bluesky\_app\_pass”** as the secret name.
 * Generate an app password via Bluesky settings and save it here.
  • Type “Bluesky_app_pass” into the newly created blank “Name” field
This is a screenshot from the **Secrets** manager in Google Colab. It shows the interface for adding or managing a secret (such as an API key or app password) that can be used securely within a notebook.
### Key elements:
* **Notebook access toggle** (left): A gray switch with an “X” indicates that access to this secret is currently **disabled** for the notebook.
* **Name field**: An empty text box outlined in blue where the user can enter the name of the secret.
* **Value field**: A gray, password-style input field where the secret’s value (e.g. a token or app password) will be entered. The content is hidden for security.
* **Actions column**: Contains icons to:
 * Toggle visibility (eye with slash icon, currently disabled)
 * Copy the secret value (clipboard icon)
 * Delete the secret (trash bin icon)
Create an app password in Bluesky
A webpage titled **"Create a list from all the people you follow"** provides instructions for Bluesky users to generate a list using their account. A large red warning near the top reads: **"DO NOT USE YOUR REGULAR PASSWORD HERE."**
The steps instruct users to create a new [App Password](https://bsky.app/settings/app-passwords) via Bluesky:
* Click the link to the App Password page.
* Click “Add App Password.”
* Name it something identifiable like “list converter.”
* Click “Create App Password.”
* Copy the generated string and use it as the password on this form.
* Delete the App Password when finished for safety.
Below the instructions are two form fields:
* **Your BSky Handle:** (example input: `user.bsky.social`)
* **Your BSky App Password:** (example input: `abcd-1234-fghi-5678`)
A **Submit** button is at the bottom. The design is minimal and utilitarian, with black text on a white background and purple hyperlinks.
  • Provide a name for the app password, anything will do, maybe “ListUpdate”
  • Copy the app password to your clipboard
Save your app password as a secret
  • Paste the app password in the “Value” field next to “Bluesky_app_pass” in the secrets panel
  • Click the “Notebook access” toggle such that it shows a checkmark for this notebook
This image shows a filled-out secret entry in the **Google Colab secrets manager**, used to store private values like API keys or passwords securely.
### Key elements:
* **Notebook access toggle (left)**: A blue switch with a checkmark indicates that the notebook **has access** to this secret.
* **Name**: The secret is labeled `Bluesky_app_pa`, likely short for `Bluesky_app_pass`.
* **Value**: The secret value is hidden behind bullet dots (••••••••).
* **Actions (right)**:
 * Eye icon: Lets you reveal or hide the secret value (currently set to hidden).
 * Clipboard icon: Copies the secret value to the clipboard.
 * Trash icon: Deletes the secret.
  • Replace “davidcolarusso.com” in the first cell under the instructions with your Bluesky handle (e.g. example.bsky.social)
This image shows a code snippet from a Python cell in a Google Colab notebook. It defines three variables, likely for use with a Bluesky automation script.
### Description of the code:
```python
handle = 'davidcolarusso.com'
interesting_list_id = "3lomnpzd7i62m"
users_to_ignore = ["example.bsky.social"]
```
Create a list of folks whose posts you’ve liked
  • In Bluesky, go to “Lists” then click the “+ New” button at the top of the screen
  • Give your list a name, maybe “Interesting,” and hit “Save”
Find and enter you list’s id into the code below

When you created your list, you should have been redirected to its page.

  • Copy the list’s id from its url. It will be the string of letters and numbers following the last /, e.g., the 3lomnpzd7i62m in https://bsky.app/profile/davidcolarusso.com/lists/3lomnpzd7i62m.
  • Enter this value in the cell as your handle. That is, you should change interesting_list_id = "3lomnpzd7i62m" to use your list’s id.
Run the code
  • Click “Runtime” in the menu at the top of this page, then click “Run all”
  • Scroll down to the bottom of this page to follow the code’s progress
Notes on updating your list & removing accounts

You can rerun this code whenever you would like to update your list. However, if you have too many likes between runs (over 500) you will miss some accounts. Also, if you manually remove an account from your list it will get added again if it’s associated with your last 500 likes. To avoid having an account added, edit users_to_ignore = ["example.bsky.social"] in the same cell as your handle and include the handle(s) you want to ignore. Just add new handles to the list like this users_to_ignore = ["example.bsky.social", "newhandle.bsky.social"].

AI Disclosure: I didn’t use an LLM to write this!

I did use a small language model, otherwise known as spell check to review my text, but I didn’t use an LLM to brainstorm or outline. Nor did I use it to produce or review the body of this post. I’m not against LLM-asissted writing. The article summaries penned by @news.bot.suffolklitlab.org are written by an LLM. Heck, I wrote a 50-post series where I invited folks to play with LLM-powered workflows using a browser extension I wrote. Also, I said, “body of this post,” because I DID use a custom GPT I made to create a first draft of the alt text for the images, a practice I follow religiously when posting images to the web. It’s much better at writing alt text than I am. What I’m against is using the wrong tool for the job, and I had a particular job in mind for this piece.

A lot of folks don’t want to admit it, but not all writing is the same, and the definition/value of “authorship” changes based on context. Writing a shopping list isn’t the same as writing a novel. They serve different purposes. In the legal field I like to point out that a lot of folks write motions based on a bank of previously written ones, and quite a few briefs include large chunks of text written by someone in the firm other than the attorney signing them. That signature means, “I take responsibility for the arguments made here,” not “I typed each of these words.”

A lot of folks feel that writing is thinking, and I agree in part. Sometimes writing is thinking. I didn’t use an LLM here because I wanted to use this piece to help me figure out what I thought about my social media use, but I leave open the possibility that sometimes I’m not writing to figure things out. Sometimes I’m just writing a shopping list, and more to the point, LLMs have uses other than “writing.” See e.g., 50-Days of LIT Prompts. Anyhow, I didn’t use an LLM to write this, and for some reason at this moment, it felt important for me to share that, just as it felt important to share what I do use them for. If you want to talk about this or any of the above, I hope to see you over on Bluesky.

–

Social media card image: Put collage by David Colaursso, making us of this portrait of Mark Twain and this Blue Morpho by Renee.