Features and changes
Big improvements to finding and adding people to follow, including from Mastodon:
- bulk follow of people, using a CSV file exported from Mastodon
- improve layout of people list info cards
- add people navigation elements to Explore menu
- search for people in the main search tool
Go to https://piefed.social/instance/people/interesting to check it out. Sorting is based on average number of upvotes received per post or comment.
Option to manually approve followers rather than just automatically accept all. You can turn this on in your user settings and then look for ‘Follow requests’ on the Account menu.
RSS feeds which automatically create posts in communities, with flair to distinguish multiple feeds in same community. Admins need to set the RSS_FEEDS environment variable to enable this. Currently testing this in these communities !bbc_rss@crust.piefed.social and !aljazeera_rss@crust.piefed.social. When there are multiple feeds in a community, each gets it’s own flair which people can subscribe to independently by clicking ‘Membership’ in the community sidebar (recent v1.7.x versions only).
Admins can see a list of unmoderated communities, so they know where the liabilities are. Go to Admin -> Communities -> Unmoderated.
Misc features
Fix removepaywall link.
Stop spammers from sharing links in their bio.
‘Mark as read’ icon on post teasers, which does not waste vote quota the way upvoting-to-hide did.
API: filter post/list endpoint for user languages - thanks to wjs018
API: add unread comment counts to postview result.
Remove annoying blogspot.com url filter.
Better instance chooser search that finds more things.
Updated translations. Filipino languages coming along well.
To upgrade from earlier 1.7.x
./deploy.sh or ./deploy-docker.sh
Donations
PieFed is free and open-source software while operating without any advertising, monetization, or reliance on venture capital. Your donations are vital in supporting the PieFed development effort, allowing us to expand and enhance PieFed with new features.



Yeah it’s pretty exciting!
So far it doesn’t look like any of the mastodon content is showing up in the Subscribed feed when set to ‘Hot’, only ‘New’. Not sure if this is because Mastodon content gets so much less likes/upvotes or something deeper.
There is still work to do so PieFed can accept boosted Mastodon posts. I was intending to make the bulk follow code after the boost processing code but it got hard so I didn’t.
If early results are disappointing, don’t worry I’m looking into it.
Mastodon tends to re-share and boost. Sometimes its more resharing than boosting. I created a python script that adds them both together a while ago and turns mastodon into a sort of threadiverse kind of experience. Ive found if you give give a user 1 vote and both a boost and a re-share gives them that score, you get the best results. Hope im explaining it right. That way the account only votes once even if it boosts and likes a post.
Hmm isn’t boosting the same as sharing? Or by “share”, do you mean quote?
Oops i may have ment staring or favoriting. Ill have to look at the code when i get home.
Heres the old code. I think I need to fix a couple things in the fast API code that contains it but you can see the initial work. I added more comments in there so hopfully its clear.
The idea of it is using recency, favorites, and boosts to indicate where the post should be on a scale. It looks just like a old reddit page…if I can get that part working. I think I gave up after making an RSS from all mastodon sources and calling it a day. But it was an interesting experiment.
Every weekend-ish I try something new and a long while ago this was my attempt.
def post_sort_key(post: Post): """ Sorting function that combines recency (50%), boosts (25%), and favorites (25%). Returns a weighted score for each post. """ # Normalize recency: Newer posts get a higher score # Recency score is based on the negative timestamp (so newer posts get higher values) recency_score = -post.created_at.timestamp() # Normalize boosts and favorites: # We'll scale the boost/favorite count to a 0-1 range based on the max values in the dataset. max_boosts = 50 # Or use the maximum value of boosts from the dataset max_favorites = 100 # Or use the maximum value of favorites from the dataset normalized_boosts = post.boosts_count / max_boosts if max_boosts > 0 else 0 normalized_favorites = post.favorites_count / max_favorites if max_favorites > 0 else 0 # Compute final score by combining weights # Weight: Recency (50%), Boosts (25%), Favorites (25%) final_score = (0.5 * recency_score) + (0.25 * normalized_boosts) + (0.25 * normalized_favorites) return final_score