Thinking About Octothorpes
A proposal for connecting content across communities without closed platforms.
This is a growing projectNim sent me a bunch of ideas around how we can use the ideas we’ve been exploring around digital gardens and RDF to start creating simple, meaningful connections across cozyweb spaces — spaces like these two weird websites full of weird ideas. The question is how we can have indices of ideas and thoughts and two-way connections between moments. Nim pitched me an idea to bring the hashtag to digital gardening using RDF. #blessed.
Quick note: what follows is simply what lives in my head as a result of our conversation.
Systemic Overview
The Root
A root URL lives at https://octothorp.es which acts a central hub for the project, explaining what it is and why. This root URL anchors the rest of the project.
The Ontology
The project has it’s own ontology that lives at https://vocab.octothorp.es. This defines the terms used in project, and allows for ontological growth and extensions in a coherent manner. Additionally, a JSON-LD context lives at https://vocab.octothorp.es/context.json.
This is a fairly modest ontology, without too many terms. The key one is simply octothorps, and it’s inverse octothorpedBy.
As a practical example, we can express the core idea of the system as:
<https://nikolas.ws/thinking-about-octothorpes> <https://vocab.octothorpes/octothorps> <https://garden.nimdaghlian.com> The Community Store
A community can create its own indexical record of octothorps at https://<community>.octothorp.es. For example, Nim and I might be writing records to https://goodboiz.octothorp.es.
Contributing to the Store
Nim and I each contribute our octothorps to the community index by POSTing a relationship to https://goodboiz.octothorp.es. This POST request adds the relationship to that communities store.
Reading from the Store
This site runs as a static site with a compile-time build step. It gets rebuilt whenever I commit to its repository. During this build step, I can query https://goodboiz.octothorp.es to GET whatever URLs have octothorped my URLs. This means that this page can collect a page that Nim published.
Subscribing to a Store
https://goodboiz.octothorp.es has a special endpoint at /feed that can serve either RSS, JSON-LD, or TTL. This feed collects all the records added to the store, in chronological order.
Octothorps as Nouns
In addition to being able to octothorp an arbitrary URL, https://goodboiz.octothorp.es has a collection of it’s own URLs to collect shared community subject or concepts that are not discreet resources produced by that community. For example, the joke at the top of this article could be expressed as https://goodboiz.octothorp.es/blessed. Any other resource in the community that is also #blessed could be discovered through querying which resources https://goodboiz.octothorp.es/blessed is octothorpedBy.
Managing Octothorps as Things
A given octothorp (ie, https://goodboiz.octothorp.es/blessed) can have additional records recording it’s own information. These are basic Simple Knowledge Organization System records such as prefLabel, definition, and related.
Authentication & Access
Querying a community store is an open and available process with no access controls. Writing to a community store requires authorization via Public Key encryption. An agent responsible for managing the store adds the public keys of other agents they wish to have write access, which then use those keys to sign their POST requests. The community server validates that the POST is authentic, and adds the record to the store.
Architectual Overview
This could be build with
- a helper script for writing & consuming triples from a codebase.
- a triple store server.
- a serverless function that interfaces between internet and server.
- a small website that fronts that server.
First Steps
The first steps to this system could just be publishing your own sites set of octothorpes with refied with there inverses to be polite:
This is a growing project. Let me know if you think this sounds interesting and/or insane.