Using Goblins to facilitate anonymous communities

Hi friends!

As I mentioned in the intro thread, I’m coming here with some ideas for facilitating anonymous and anon-ish communities in a way that could replace or provide alternatives to centralized platforms that don’t always have their best interests in mind.

My primary example right now is Fetlife, the “Facebook for kinky folx” platform. It’s very similar to Facebook in that it is for connecting and socializing, and is explicitly not a dating platform like Feeld (Tinder for kinksters). It has a news feed, profile pages, status updates, photo/video posts, polls, AMAs, groups, event posts, etc. and you can advertise your interests and follow tags for your favorite fetishes.

It is the primary way for the BDSM community to find each other and organize in-person munches (vanilla hangouts at bars and restaurants), parties, and other events. Vetting people with whom you might interact in a very intimate way is important, so meeting them IRL in a neutral space and finding shared connections online and off is important.

Anonymity is also important. People who engage in kink can be ostracized in their work or religious environments, and in some jurisdictions that disallow certain sex acts, non-monogamous relationships and other alternative lifestyles they can be charged with crimes.

The unfortunate effect of its centralization is that decisions about the platform are controlled by a very small group of people who, by several accounts, are not maintaining a healthy working environment and, most recently, taking concerning stances on racism and white supremacy.

Starting another centralized competitor seems like a recipe to reproduce those problems. And the legal hoops that must be jumped through to safely and legally host nude or pornographic imagery and content are a big blocker for most who’d be willing to try.

These challenges seem like a perfect fit for a federated or decentralized platform: servers, users or sub-communities could choose their own policies for what content to allow or deny; anonymity; privacy; ownership and control of one’s data. And, if the tools are built well, it could provide the means for other non-kink anon communities to do the same.

So, I guess what I’m here to do, initially, is validate the idea with the people who understand Goblins and OCap better than I do. And then, if there is any interest, I would love to chat about architectural ideas and work toward a small prototype.

2 Likes

Sounds quite interesting.

Hmm… one idea regarding kink ?compatibility? is to do some sort of Private Intersection Set testing betwixt folks.

A scenario:
Lets say we have Alice and Bob (of cryptography papers examples fame) that want to know if they are into the same kinks.

Each has a list of likes and a list of dislikes. (For simplicity sake we leave magnitude out for now.) Both draw from an agreed vocabulary of kink tags.

This means that Alice wants to know if Bobs likes is (at least) a superset of her likes and contains none of her dislikes.

Same for Bob in the other direction.

I have on this very Discourse site a post that has an BLIFF write up of an PIS circuit to be run ontop of an SMPC. But I do want to hear more about the sort of usage scenarios and problems you have in mind.

1 Like

I went spelunking through your other post and the thread it’s in. That led me to the Willow protocols, which led me to Earthstar. It’s come a long way since I last saw it in its early form via Scuttlebutt! It seems like it could be a way to prototype some decentralized social ideas.

I’m a bit lost on some of the underlying concepts you’ve mentioned, or whether they would be the right approach for what I’m after. The private set intersection could be a solution for comparing lists of interests, but people’s interests on Fetlife are visible to everyone; in kink, understanding what someone is into is helpful for gauging compatibility, even if the interests are not shared. (For example: two people could have a shared interest in rope bondage, but one could be into sadism while the other might consider that a hard limit and want to avoid that person as a play partner, or negotiate play that explicitly excludes it.)

Also, interest comparison is just one small part of what I’m after. I guess what I’m trying to answer is whether or not Goblins is a good fit for implementing a protocol that powers a distributed social network similar to Facebook, while providing robust access control rules to ensure that someone feels confident using it to store and share information such that privacy is a first class citizen.

So, the high-level technical problems I want to solve are things like:

  • local data storage
  • standardized schemas for each type of data stored (profile, photo, text-based status messages, private messages, etc)
  • syncing data peer to peer and/or via public servers
  • discovery of individuals (who want to be discovered) by shared interest, geographic locale, friends in common, etc
  • the ability to share info about and RSVP to in-person events that reliably reach the desired audience
  • encryption of data at rest and in transit
  • the ability to run an application with these features accessibly and on constrained resources (storage, memory, network speed)

I love the idea of using Goblins to build anonymous (or, more likely, pseudonymous) communities! I spend a lot of time thinking about privacy and how to make sure Spritely protects it, so this is a really exciting proposal for me to read!

I absolutely think our tech can and should be used to build a platform like this! Spritely grew out of experiences with ActivityPub and tons of other networked social contexts, and building a healthy social web is central to our mission. Specifically building a private social network is a really exciting idea!

Right now, Spritely’s technology is still being built out. As relevant to your goals, we still have plans to build out support for:

  • secure, distributed data storage (data storage, aspects of syncing, encryption at rest)
  • a petname system (identity management, user discovery)
  • simple distribution of Hoot-compiled applications (running an application)

We have prototypes for the first two, but they’re not yet production ready. We expect to focus more on the directly social parts of our stack in 2025.

With those caveats, I think you could absolutely begin building much of this system with Spritely’s current tech. In particular, our TCP-TLS, Tor, and libp2p netlayers ensure encryption at the protocol level, and message-level encryption can be added as easily as to any other system. (As a sidenote, the full relay netlayer is also forthcoming.) Schemas and message routing are beyond scope for Spritely, but you should be able to integrate non-Spritely solutions as easily as in other systems.

At the same time, Spritely will be able to provide more tools for your goals in the future.

Whether you choose to use Goblins or not, I hope you pursue this work and that it bears fruit :smiley:

Thank you for this response @juli! I am aware that things are very much in an early stage, so not all the pieces are in place. I have a ton of respect for the goals and people behind Spritely, so I am happy to play in the sandbox before it’s totally ready. :slight_smile:

My current thought was to prototype smaller sub-ideas that support the larger vision and architectural needs using the work that has already been done. I’m also new to both Guile and Racket (but do know Clojure!) so I probably have more than enough to keep me busy. (I also have ADHD, 3 kids and 4 dogs, so don’t be surprised if I disappear when I get distracted by something entirely unrelated before coming back to this months/years from now. :laughing:)

My initial thought was to start with data storage and sync, but I wonder if the petname system might be a better target. The core domain object is a user’s profile, after all. Are the two petnames papers the best reference for now, or are there other sources of documentation and examples I’ve overlooked?

Those are probably your best bet for understanding the general concepts. There’s also a standalone prototype in Racket as well as bits and pieces in Guile scattered around Fantasary (see in particular (fantasary client) and (fantasary rooms)).

While we maintain protocol compatibility between Racket and Guile for Goblins, Guile is where new development is happening first and is our implementation language of choice for new projects. For Spritely purposes, Guile is probably the language you want to focus on, though there are plenty of reasons to learn Racket anyway!

1 Like