Slopfest: how I tried to fix my Twitter feed

Twitter has started to really suck the past few years, so I tried to take matters into my own hands and fix my feed. I’ve put together some reflections on my experience.

The pre-slop era

Back in the pre-Elon days, Twitter was the most used app on my phone. I would primarily get a lot of tech-adjacent content, news, people posting unique / informed opinions on things, job / career stuff, etc. I’d say that I was engaged to some extent with a majority of the content in my “For you” feed, and I also used it to find new people to follow.

It felt like the algorithmic feed was primarily “graph-based”, content was being served to me because it was posted by someone who was somehow connected to the social graph of the people I was following. I’d say this is a pretty good metric for determining what content I might be interested in; I like the people I’m following and in general I’m interested in content from their networks too.

Where are we now

In the past few years, Twitter has turned into a total nightmare. A platform I used to love is now something I open hoping that I’ll read something interesting, but realizing that I’m more likely to just be stuck doom scrolling through slop for a 10 minutes before coming across one interesting tidbit.

A majority of my “For you” feed at this point is slop: tweets that are click / rage bait, weird inspirational advice, generic recreations of the same meme / joke, etc. This content elicits a reaction (and drives engagement?), but it’s usually a negative one, and after a minute of scroll you leave thinking, “what the fuck am I looking at?!”

How did we get here

Somewhere along the way, I assume a decision was made to prioritize engagement metrics over alignment to one’s preferences. The emphasis on your social graph is lowered to prioritize random posts that are performing well on the platform, further boosting them. So called “viral” content, visually engaging posts, or emotionally charged narratives win here because they drive users to keep scrolling. Even if you aren’t seeing anything you like, the reward mechanism in your brain tells you to keep going because you never know what might come next; it’s like playing a slot machine.

From a business perspective I can see why boosting engagement is a priority here, although it’s not clear to me why this isn’t possible in a way that gives users more control over the type of content they’re being served. Sure I’m scrolling more, but I HATE most of what I’m seeing, and if that doesn’t change I’m probably pretty likely to just leave the platform entirely (something that I’m seeing more and more of my friends doing with Twitter, Instagram, etc.)

The nitty gritty of how I tried to fix my feed

In an ideal world, I’d be able to leverage Twitter’s API to create a filtered timeline for myself, optimizing for the types of things I find interesting. Twitter has locked down their API since the acquisition, and it’s impossible to get access without spending a lot of $$$.

Technically you could leverage the public API with user authorization, but based on what I’ve found online this is a really great way to get banned.

Given this limitation, I decided to go with an approach that acted on data that was already being fetched by my browser through the standard web feed. I started trying to do this with an iOS app because I primarily browse on my phone, but ended up running into a lot of issues trying to get around Twitter’s content security policy, so I switched to a Chrome extension that runs on desktop.

Effectively the extension is just grabbing the tweets being rendered on my timeline and sending them to a local server, which then uses an LLM to classify them as slop or non-slop. I tried using a local model for this, which didn’t end up being super performant, so I shifted to using gpt-4o-mini. The slop tweets get hidden from the DOM in the browser, which triggers more tweets to populate the timeline. I also found that tweets that are just media tend to be annoying memes, so I automatically remove anything that doesn’t have accompanying text.

Even without doing a lot of optimization on the prompt I found this to work shockingly well, and the LLM classification matched mine in a majority of cases. The biggest surprise here was the sheer proportion of slop tweets. Obviously I knew this anecdotally from just scrolling on my own, but looking at the number makes you feel like garbage for consuming that much slop content.

From a small sampling of ~1k tweets, the LLM determined 78.5% of them were slop. This came at a cost of around $0.03.

Something funny that started happening when I got to using the extension is that I was actually running into Twitter rate limits because so many new tweets were being fetched. So much garbage content was being removed from my timeline that it was just refetching more content all the time, and would eventually fail.

A better approach that I haven’t quite figured out

While the LLM-based filtering is somewhat effective at getting rid of the slop content, it doesn’t really get you back to the graph-driven feed that I was describing earlier. I’ve found it challenging to try to get at this based on limitations that Twitter has introduced in how you can access this data.

If you even just try to look at the list of who someone is following you get capped at around 100 people. I used to manually look at these sometimes to try to expand my network, but you can only go so far with this limitation, plus the fact that it’s somehow sorted by popularity so you see the same people all the time.

Ideally I would be able to figure out if someone is adjacent to my social graph so I could rank their content accordingly. The data that Twitter returns in the timeline is not sufficient to accomplish this. There is no relationship data returned in the timeline API call itself, but if you hover over someone’s profile picture you do then get mutual followers fetched as part of a separate call. You could presumably start triggering this programmatically, but I imagine you would get rate limited pretty quickly.

What now

I don’t know. I hate my feed and I find that every day I seem to find less and less interesting content, and more of the people that I actually follow abandon Twitter. The algorithmic feed brings me pure pain. Probably time to log off soon.

Want to chat about slop? Hit me up at hari (dot) demirev (at) gmail