awarm.spacenewsletter | fast | slow

Speakeasy and programming social networks

One of the most fun technical challenges of building the new website has been integrating it with Discourse.

I've talked a couple times in this newsletter about my love for the software. Its an incredible example of alignment in features and purpose. Everything in there is thoughtfully designed to enable meaningful communities. And there's a lot in there. If you check out the settings there are hundreds of different options. 1

The exciting thing these last couple weeks, was the discovery that you can manipulate every single one of those parameters and do everything that you do on the site, programatically.

I can, with a few API calls, automatically create groups and add users to them, or create categories and populate them with post templates. It's a programmable social environment!

Speaking of those, last week I briefly mentioned Speakeasy, a strange fork in the path of fathom's evolution.


The idea was to make a simple programmable chat room. The core would handle posting messages, navigating between rooms, and executing the code specific to a room which would define:

An example: a chatroom that only let you in if individuals inside it voted to approve your address using commands they called from the chatbox.

There were a lot of tricky bits to this, made trickier by the fact that we were building it on top of a stack of nascent peer-to-peer technologies and plugging in some blockchain for good measure 2. But ultimately though the core system worked, it turned out making a system with meaningful end user programming and have it be social and collaborative by default, is no mean feat. Who knew.

A programmable social learning environment

One of the specific goals/challenges we set for ourselves was that Speakeasy be a learning environment. I mean, we were explcitly building it to use as a general purpose learning environment, but the constraint was more specific, in that it should be an environment for learning how to use Speakeasy. People in a chatroom should be able to inspect the code for how that particular chat room works, and read the documentation for every function inside it.

I only recently realized is that Emacs already did all this, albiet in the context of a single-user text-editor. You can figure out what every single key or shortcut does by first calling the function describe-key and then pressing that key. You can call describe-function, describe-mode, describe-variable, and all the documentation is right there. And it does all this, not with some painstaking oversight by highly trained software engineers, but through a distributed community of people each building what they need. It feels like a super power to be using some feature, and then see through the document right down to the source code to know how it works.

What if you could do the same thing in but in a social context? If Slack let you inspect every Slack bot, or even Slack itself? If people could define interactions, data formats, permissions, creating a pop-up social space for whatever they wanted. (A family photo share. Reading lists, etc).

That was the dream of Speakeasy. 3

  1. of settings is an interesting measure of software complexity. On one

    hand I appreciate when systems are manipulable, on the other, it can certainly be a signal of too large scope, or feature bloat.

    In the case of discourse, though there are an incredible amount of options, it somehow still feels manageable.

  2. the "blockchain" element was in allowing the programmatic layer to read chain data, and the chat to initiate transactions. There are a lot of really fascinating things happening on-chain that are inherently social. Organizations which make decisions via voting, trades, multi-signature wallets, not to mention the wilder things like Personal Tokens, or token controlled registries (are these still a thing?). Speakeasy would provide a social layer that could facilitate and interact with all of em!

  3. I had a wierdly hard time writing about this topic. In the end I feel like I've gotten down only a small segment of what I wanted to, so I'll probably be writing about this again.