# Introducing Shrubgrazer

Since starting using Mastodon a month ago, a few different things haven't been a good fit for how I like to use social media:

*   I'm relatively free with following people, but there are some people whose posts I don't want to miss. I'd like these to go [at the top of my feed](https://www.jefftk.com/p/user-controlled-algorithmic-feeds).
    
*   Fediverse replies logically form a tree, but Mastodon just shows you a list. This isn't good for reading complex branching discussions. When I set up replies on my blog [as comments](https://www.jefftk.com/p/mastodon-replies-as-comments) I made them be a tree, and I like this a lot better.
    

I decided to write a custom client that does both of these the way I'd prefer, and also fixes some other problems I've had with social media historically:

*   On Facebook, it's reasonably common that you saw something but [can't find it again](https://www.jefftk.com/p/cleaning-a-spoon-is-complex). In my client there's a history page that shows you everything you've looked at in reverse chronological order.
    
*   Traditional algorithmic feeds have weights but you can't interact with them directly. Instead you just notice that it's showing you a lot of posts by someone you happened to have a few interactions with, while never showing you posts by many other people. The weights for this feed are directly exposed in the UI, and there is a page where you can make any changes you want.
    
*   Your behavior only changes weights when you make a conscious choice to change them. There are various things that I will interact with (TikTok style shorts, angry discussions) that, on reflection, aren't how I would like to spend my time. When interacting with an opaque algorithm there's no way to say "I know I just spent a while looking at that distracting flashy thing, but it isn't actually what I want you to show me more of".
    

If you were to visit you'd be asked to log in:

[![](https://www.jefftk.com/screenshot-shrubgrazer-welcome.png)](https://www.jefftk.com/screenshot-shrubgrazer-welcome-big.png)

It won't actually let you log in because the list of allowed users is currently just me, but let's imagine you're me. On logging in you'd see a feed, which is a series of posts sorted first by the weight I've assigned to the author and then in reverse chronological order.

[![](https://www.jefftk.com/screenshot-shrubgrazer-mobile-feed.png)](https://www.jefftk.com/screenshot-shrubgrazer-mobile-feed-big.png)

If you click on a post you get a forum-style threaded view:

[![](https://www.jefftk.com/screenshot-shrubgrazer-mobile-discussion.jpg)](https://www.jefftk.com/screenshot-shrubgrazer-mobile-discussion-big.jpg)

It also works on desktop, where you have a bit more space:

[![](https://www.jefftk.com/screenshot-shrubgrazer-showing-children.png)](https://www.jefftk.com/screenshot-shrubgrazer-showing-children-big.png)

If you open a post that has both children and parents it shows the parents above and then threads the children below. This means even when exploring a large discussion you can still see your context.

[![](https://www.jefftk.com/screenshot-shrubgrazer-showing-post-with-children-and-parents.png)](https://www.jefftk.com/screenshot-shrubgrazer-showing-post-with-children-and-parents-big.png)

You can favorite posts by clicking the star. You can also reply to them inline by clicking the "up and then left" reply icon:

[![](https://www.jefftk.com/screenshot-shrubgrazer-example-reply.png)](https://www.jefftk.com/screenshot-shrubgrazer-example-reply-big.png)

The hamburger menu in the upper left gives additional options:

[![](https://www.jefftk.com/screenshot-shrubgrazer-hambuger-menu.png)](https://www.jefftk.com/screenshot-shrubgrazer-hambuger-menu-big.png)

The client has only just gotten to where it's usable, and there are still several key features where you need to fall back to the standard UI (notifications, following, boosting). Still, if it's something you'd like to play with, the client is open source ([github](https://github.com/jeffkaufman/shrubgrazer)) and is a python wsgi app with no dependencies. I could also temporarily add you as a guest on my instance if you wanted to try it without running code.

There are a lot of other things I'd like to do with this, like [integrating notifications into the feed](https://github.com/jeffkaufman/shrubgrazer/issues/2), [threading related posts in the feed](https://github.com/jeffkaufman/shrubgrazer/issues/6), and [showing context on recent entries](https://github.com/jeffkaufman/shrubgrazer/issues/8). You can see the [full list](https://github.com/jeffkaufman/shrubgrazer/issues?q=is%3Aopen+is%3Aissue+label%3Aenhancement) on GitHub, and feel free to suggest more either in a comment or as a [new issue](https://github.com/jeffkaufman/shrubgrazer/issues/new).