Following the last 2 posts and other videos in the past weeks. The following
will continue on the same track of a peer to peer social network.
I’ll build the idea as layers over each other so:
First: Data format
- I will write my notes, recipes and any activity I want as JSON file on my filesystem.
- To have a common schema I’ll use schema.org specifications to present my
Second: Protecting my data
- I will create an openPGP key pair for signing and a sub key for encryption
- I will sign and encrypt my files with the keys so only me can read it and make
sure no body else edits it.
- Files are now formatted in openPGP format on disk.
Third: Exchanging my data
- To exchange a note with my friend
- My friend will upload his public key to a keyserver
- I will get the key and verify the signature in another channel
- I will add him as a receiver to the file I want to share
- I will send the file to my friend in an email or chat message or any other
Forth: Organizing my files
- To separate files that are created by me from my friends I will create a
subdirectory for each keypair named after the key short form.
- Now I can see all files shared by one friend in one directory
Fifth: Browsing my files
- I can build a CLI tool or a UI to create schema.org files signed/encrypted by
my key and also for a friend
- I can extend the UI to show the files content in a user friendly presentation
ordered by creation time latest first
- Now I have a timeline of my activities and my friends
- Now I can filter the files with a subdirectory which makes it my friend
Sixth: Syncing with friends
- I can extend the client UI to join a kademlia network that connect me to my friends
- I can make the client UI send the missing files to my friend and delete the
files I deleted locally
Seventh: Social interactions
- Liking/disliking and other interactions can be also schema.org files
- That will make them ordinary files which has save privacy and exchange
mechanism as normal activities
- The UI can choose how to display the social interactions.
Eightieth: Falling back to the web
- websites are using schema.org for SEO
- my client UI can read the webpage and extract schema.org parts and render them
like any other post
- I can subscribe to a website which will make the client crawl it regularily
and extract the schema.org parts and save it to a separate subdirectory for
- Having the peers interact together over HTTP will make it easier to use the
same code for crawling the websites.
- Having the peers exchange schema.org format will make the code reusable.
- My client can have another interface that render my public activities as HTML
pages with schema.org microformats in the same page and a HTTP proxy server
can sync regularily with the client and serve my social feed over HTTP
- Having the activity as a JSON file without encryption means it’s a public data
so anyone on the internet can download the file and read it.
Ninth: Sharing content
- A file I exchanged with a friend is encrypted for him and other receipients
- My friend can create schema.org shareAction that reference my file address as
the “object” attribute value.
- He can exchange this file with his friends
- His friends will retrieve the file from me if they’re one of the recepients
- My client will refuse to transfer the file if the user requesting it is not
one of the recepients.
- Even if my friends transferred the file to them without my permission the file
can’t be decrypted by their client.
- If my friend added his friends as recepients to the file and transferred it to
them it is technically possible but it will be breaking my trust in him.
similar to taking a screenshot of private messages. technically possible but
a social violation.