Introducing New Fediverse Software, Goofed v0.0.1, Minimum Viable Shitpost Edition
from admin@scrapetacular.ydns.eu to selfhosted@lemmy.world on 10 Mar 09:13
https://scrapetacular.ydns.eu/activities/50114ac8-fd26-47cd-8fe0-ad97f0027c5e

I’m building a new activitypub/threadiverse software focused on the needs of self hosters who want a single user instance.

I’ve been posting with it semi-regularly for the last month, and I think it’s ready for an open demo.

One of my objectives is to have the lightest resource usage for memory and CPU constrained hardware, as well as the fastest loading web interface for older phones and limited data plans. I ran out of data on my phone last week and having a 41kb front page came in very handy.

You can try the web UI at scrapetacular.ydns.eu/latest You can also POST AS A GUEST TO THE FEDIVERSE without signing up. I’m not sure you can do this anywhere else, I’m manually approving posts on the backend because … well you know. If it asks for a user and pass, use guest and guest, your post will appear with a username like guest4269.

Ideally, open this post scrapetacular.ydns.eu/post/10127 and reply to it.

My other plan for mobile is to target the Sync for Lemmy app, as it’s dead, meaning it’s no longer a moving target.

I’ve made a few technical choices aimed at keeping things fast

These include:

No ORMs

No Javascript

No nested comments in the web UI

No front page images

No upvotes/downvotes

ROADMAP

Tech Stack

I’m using the pure Go sqlite library, Bluemonday for html sanitisation, Blackfriday for Markdown and Migrate for auto db migrations.

End

Thanks to Snoopy and the Cool Froges at jlai.lu for allowing me to test on their channel.

Is this project of interest to you? Have I missed anything obvious? Is there anything else you would like to know?

#selfhosted

threaded - newest

linuxguy@piefed.ca on 10 Mar 09:25 next collapse

Wow, bold decisions for what it’ll support and not. I like that it’s laser focused on a specific use case. What do you think about the impact to instances’ federation queue when a bunch of single user instances follow a community? 10x the traffic and queue for 10 single user instances than one instance with 10 users.

I ask this as someone that ran a full single user lemmy instance right up until recently and switch to a public piefed due to the traffic multiplication and other concerns.

admin@scrapetacular.ydns.eu on 10 Mar 09:45 collapse

I don’t know if it will scale tbh, but also I don’t expect many people to actually self host, and I’m sort of hoping the fediverse stays a bit … ghettoized. The current threadiverse is like 50000 people and works fine, I’m hoping there will just be more loose communities of 50000 that don’t really federate with the main one.

linuxguy@piefed.ca on 10 Mar 11:33 collapse

Let us both hope for those kind of scaling problems due to popularity 🤞

admin@scrapetacular.ydns.eu on 11 Mar 00:27 collapse

Another thing that won’t scale is large personal blocklists, say you’re on an instance with a million people, each activity coming in has to be compared with a 1000 person blocklist, PER LOCAL USER

Shortstack@reddthat.com on 10 Mar 09:25 next collapse

Oh yeah super interested in this

I briefly entertained doing a self hosted instance but that turned out to be a tall order for a newbie

admin@scrapetacular.ydns.eu on 10 Mar 09:49 collapse

Maybe, maybe not. I scoped it to the smallest useful thing I could build and get feedback, which turned out to be about 5k LOC, do you use Go at all?

ptz@dubvee.org on 10 Mar 09:32 next collapse

You can also POST AS A GUEST TO THE FEDIVERSE without signing up.

Oh, dear lord. As if we don’t have enough spam and drive-by trolls as it is.

admin@scrapetacular.ydns.eu on 10 Mar 09:53 next collapse

I like interactive demos, especially ones that worry people :) But I don’t want my instance to get banned so I have to manually approve messages.

Also, to reply to this thread as a guest use this link https://scrapetacular.ydns.eu/post/10170

admin@scrapetacular.ydns.eu on 10 Mar 13:06 collapse

🚨🚨🚨 WE HAVE OUR FIRST GUEST SHITPOSTER 🚨🚨🚨 WE HAVE OUR FIRST GUEST SHITPOSTER

https://scrapetacular.ydns.eu/post/10127#10243

admin@scrapetacular.ydns.eu on 10 Mar 16:35 collapse

🚨🚨🚨 DEAR MR PTZIDENT, A SECOND GUEST SHITPOST HAS HIT THE FEDIVERSE 🚨🚨🚨

https://scrapetacular.ydns.eu/post/10127#10330

schnurrito@discuss.tchncs.de on 10 Mar 09:48 next collapse

Is the source code already available?

admin@scrapetacular.ydns.eu on 10 Mar 09:56 collapse

No not yet, probably this weekend, this is just a demo post to see if my VPS catches fire or something. I haven’t picked a licence yet either

jay@mbin.zerojay.com on 10 Mar 10:08 next collapse

Is it vibes coded?
Nevermind!

Triumph@fedia.io on 10 Mar 10:22 next collapse

Thoughts on increasing from single user to, say, ten? So that I could selfhost something and have my less technical friends/family on it?

admin@scrapetacular.ydns.eu on 10 Mar 11:56 collapse

I don’t even HAVE a user table :D

(I might do something screwy with oauth2 to allow authenticated guestposting)

normis@infosec.pub on 10 Mar 10:41 next collapse

For anyone that’s interested in something like that, sounds exactly like Snac2 - works very nicely

admin@scrapetacular.ydns.eu on 10 Mar 12:02 collapse

Yes, I like snac, it’s the first codebase where everything clicked for me. It’s also a bit like a Gotosocial for the threadiverse instead of the twittercloneiverse, because the stack makes a lot of choices for you.

TheOneCurly@feddit.online on 10 Mar 10:54 next collapse

This is exactly the kind of insanity we need around here. I think some of these choices are bonkers and that’s great.

admin@scrapetacular.ydns.eu on 10 Mar 12:04 next collapse

I’m glad someone gets The Vision, I don’t want to just build Lemmy but in a better language :D

There’s more where that came from

eutampieri@feddit.it on 12 Mar 01:44 collapse

Cool project, but Rust is a cool language :)

admin@scrapetacular.ydns.eu on 12 Mar 03:51 collapse

I left so much bait in this thread that everyone missed this :)

admin@scrapetacular.ydns.eu on 10 Mar 12:15 collapse

You may notice that some threads have a word count for certain words, I’m working on a feature that I’m calling the Godwin Factor, you pass in a list of words to look for that will tell you if the thread is already a dumpsterfire before you go in.

Say you’re on /c/baking and you see an innocuous thread about apple pie, then you see that it has 274 comments, and 8 people have been called nazis, just look at the picture and move on with your day.

Hippy@piefed.social on 10 Mar 12:27 next collapse

I think projects like these will eventually cause activity pub to evolve into something that handles scaling better.

admin@scrapetacular.ydns.eu on 10 Mar 13:15 collapse

Hopefully. Or it might actually evolve into something worse

THIS IS THE FUTURE FURRIES WANT https://evilmaid.net/blog/trusting-trust-fediverse/interactionPolicy-flow.png

rimu@piefed.social on 10 Mar 14:03 next collapse

That sounds pretty fun, I like your extremist take on things.

If you want to federate votes in an efficient way, consider doing them in batches, like this - https://codeberg.org/rimu/pyfedi/src/branch/main/docs/fep-4248.md. Sending batches means building up a queue, etc which is a pain in the ass so you might want to just receive batches and send individually.

You can do nested comments more efficiently by doing a single query for all the comments on a post and then constructing the comment tree in Go, rather than using multiple SQL queries. It’s a bit tricky to code but you can copy PieFed’s code - https://codeberg.org/rimu/pyfedi/src/commit/68d6799be5c321f9abf84d136cafef6de6e3aafb/app/post/util.py#L141

admin@scrapetacular.ydns.eu on 10 Mar 15:11 collapse

Whoa senpai noticed me. There actually is a recursive query format in the latest sqlite for this exact situation, Postgres may have something similar, I just thought a list is fine for the web UI. I’ll have to benchmaxx and pick a strategy for the API.

I actually read that FEP. In my code that is too shameful to release yet, I look for an Object, then look for its Type, then figure out how to deserialize the rest of the object, but this object doesn’t have one. Would it be possible to do something like this:

{
  "object": {
    "type": "LikeCollection",
    "likes": [like1, like2, ..etc]
  }
}

Or is that weird. Spare a thought for those in less dynamic languages :D

rimu@piefed.social on 10 Mar 15:20 collapse

You’re right, to be more similar to the ActivityPub style of doing things the object should be a “type” of “Collection”, not just suddenly be an array instead of an object. I will migrate PieFed over to that instead.

admin@scrapetacular.ydns.eu on 10 Mar 15:39 next collapse

Shit, that went well, I was expecting pushback. Should I make an issue for discussion, or is there one already. I don’t know if the object also needs an ID

rimu@piefed.social on 10 Mar 15:43 collapse

There is a discussion but it’s an email chain between myself, Lemmy, Mbin, NodeBB so not really out in the open.

I’m thinking of using the normal OrderedCollection structure that AP has - https://www.w3.org/TR/activitystreams-vocabulary/#dfn-orderedcollection. An object of type ’OrderedCollection’ with an array of ‘items’.

admin@scrapetacular.ydns.eu on 10 Mar 16:22 collapse

I think so? I guess a Like has to happen before an Unlike, would the collection have multiple possible activity types in it?

While I have your ear, I don’t know how yet but I’d like it to be easier for devs to collaborate over AP for anything not involving security.

rimu@piefed.social on 11 Mar 00:21 collapse

Yes theoretically you could have any type in there but votes are the biggest inefficiency in the system so I’ve only implemented it for them.

There are some nodebb forums that federate with us, which are intended for AP dev discussions - !technical-discussion@activitypub.space for example. Not very active. Also some Matrix channels, again not exactly humming. Everyone is pretty focused on their own projects, really.

admin@scrapetacular.ydns.eu on 11 Mar 14:45 collapse

Thanks, subscribed to activitypub.space. I’ll probably make a post about the guest posting trial in the General Discussion channel at some point, since people are talking about barriers to first use.

rimu@piefed.social on 11 Mar 15:06 collapse

!general@activitypub.space, that one. Yep.

admin@scrapetacular.ydns.eu on 11 Mar 14:50 collapse

How do you know if a random server implements a particular FEP?

rimu@piefed.social on 11 Mar 15:04 collapse

There is a convention of putting a FEDERATION.md file in the root of your project (there is a FEP about it but I can’t remember what it is, heh) which lists the FEPs your project implements.

e.g. https://codeberg.org/rimu/pyfedi/src/branch/main/FEDERATION.md

There is no standardised API endpoint for discovering this info so basically you just need to lurk in all the dev spaces you can and watch what they’re talking about, stalk each other’s codeberg/github issue queues and PRs and just cope with the jank.

admin@scrapetacular.ydns.eu on 11 Mar 16:51 collapse

Excellent 👍

Decronym@lemmy.decronym.xyz on 10 Mar 15:50 next collapse

Acronyms, initialisms, abbreviations, contractions, and other phrases which expand to something larger, that I’ve seen in this thread:

Fewer Letters More Letters
AP WiFi Access Point
DNS Domain Name Service/System
VPS Virtual Private Server (opposed to shared hosting)

3 acronyms in this thread; the most compressed thread commented on today has 6 acronyms.

[Thread #154 for this comm, first seen 10th Mar 2026, 22:50] [FAQ] [Full list] [Contact] [Source code]

admin@scrapetacular.ydns.eu on 11 Mar 18:25 collapse

Bad Bot, AP means ActivityPub in this thread

nix98@lemmy.world on 10 Mar 16:19 next collapse

I love this!

admin@scrapetacular.ydns.eu on 10 Mar 18:09 collapse

💖

nix98@lemmy.world on 10 Mar 16:21 next collapse

Nested comments are super slow

I agree with this. I wrote a lemmy reader for emacs gnus and fetching the comments really leaves a lot to be desired! In fact, I’d say a lot of the Lemmy APIs leave a lot to be desired (no pagination with a cursor!)

hexagonwin@lemmy.today on 11 Mar 00:47 next collapse

looks awesome! commenting to not forget to try this out later…

FreedomAdvocate@lemmy.net.au on 11 Mar 01:34 next collapse

I’ve never understood the point of hosting your own single user instance - can anyone explain?

meldrik@lemmy.wtf on 11 Mar 06:08 collapse

Digital sovereignty.

FreedomAdvocate@lemmy.net.au on 11 Mar 06:44 collapse

Of what exactly?

admin@scrapetacular.ydns.eu on 11 Mar 13:16 collapse

A personal reason is that your identity on the fediverse is defined by who owns your private key (used for cryptographically signing your posts), and your domain, anybody who owns these can impersonate you or modify your posts without your knowledge.

I control both now so I’m UNSPEZABLE.

FreedomAdvocate@lemmy.net.au on 11 Mar 18:53 collapse

That’s not really an issue in reality. You’re afraid of an instance owner posting under your account?

admin@scrapetacular.ydns.eu on 11 Mar 20:52 collapse

Not any more :) I don’t know any of these people in real life, some people host instances for their real life friends and family, or long time online acquaintances, which would be acceptable to me.

It actually did happen in reality on Reddit, an admin called spez changed the content of a user post. I don’t know if there’s ever been a rogue admin on the Fediverse, there’s no way of knowing.

FreedomAdvocate@lemmy.net.au on 12 Mar 01:19 collapse

Is a hypothetical that is irrelevant. It’s not a good reason for hosting your own instance, which is what I’m trying to understand.

admin@scrapetacular.ydns.eu on 12 Mar 05:07 collapse

Good enough for me, so I did it. Why do you post on the fediverse rather than somewhere like reddit or twitter? I’m not sure I get where you’re coming from.

FreedomAdvocate@lemmy.net.au on 12 Mar 16:39 collapse

I’m trying to understand why anyone would opt to self host an instance just for themselves. What are the benefits? A hypothetical that has likely never happened isn’t a benefit.

admin@scrapetacular.ydns.eu on 11 Mar 21:19 next collapse

OK, I’m switching the guest posting feature off soon.

Thanks to everyone who tried it out. 1010 responses, would break the fediverse with you all again.

pienz@feddit.org on 12 Mar 03:31 next collapse

You might enjoy sqlc

Its like a reverse ORM

SQL -> Go

admin@scrapetacular.ydns.eu on 12 Mar 05:03 collapse

Thanks, I think some of the nightmare front page queries will be a problem for this tool, but I can use some of the idioms for the rest

guest5@scrapetacular.ydns.eu on 12 Mar 16:28 collapse

This is a very cool feature, great work!

admin@scrapetacular.ydns.eu on 12 Mar 16:49 collapse

I swear to god this wasn’t me or any of my immediate family