Solid Discussion App (SDA) is a client web application that allows users to have discussions in a Solid environment :
Solid (derived from "social linked data") is a proposed set of conventions and tools for building decentralized social applications based on Linked Data principles. Solid is modular and extensible and it relies as much as possible on existing W3C standards and protocols. source
To use the application users must have a Solid pod. You can have a free one at solid.community. However some features as read / write in a public discussion doesn't need a Solid pod.
SDA is written with React from create-react-app and follows redux principles.
The design follows Material Design principles.
A user can authenticate himself with his WebID :
The WebID 1.0 (Web Identity and Discovery) standard is used to provide universal usernames/IDs for Solid apps, and to refer to unique Agents (people, organizations, devices). source
The app display the name and the avatar of the connected user if data are fulfilled.
The app recover the previous session.
The app uses solid-auth-client library to handle authentication with a Solid server such as node-solid-server. The library completely abstracts the complexity of authenticating a user and handle the session.
Once the user is authenticated we load data about the user via his WebId profile in turtle format and parse it with the rdflib.js library to extract his foaf:name
and his foaf:img
.
Done
A user can create a new discussion on his pod.
The user must give a name to the discussion.
The user can choose the storage of the new discussion.
The user choices the path where to store the discussion on the storage.
The app uses the SIOC Core Ontology Specification to modelize business data (discussion, messages, participants, etc.). Other vocabularies will be implemented later.
The class sioc:Thread
is used to represent a discussion.
New discussion will be created in a dedicated folder on the user's pod. Maybe it could be usefull to save the discussion as a simple file. Maybe a future functionality.
Like for SDA-1 the app uses rdflib.js library to parse linked data saved on users pod. Especially, the pod explorer allows users to navigate in their LDPContainers by doing a SPARQL request locally.
New solid tools are being created (LDflex and react-components). Very promising...
Done
Once a discussion is created the user can add participants by adding their webids.
The new participant is added as sioc:User
in the source file of the discussion. For example :
@prefix : <#>.
@prefix sioc: <http://rdfs.org/sioc/ns#>.
@prefix terms: <http://purl.org/dc/terms/>.
@prefix c: <https://www.w3.org/People/Berners-Lee/card#>.
@prefix c0: </profile/card#>.
<>
a sioc:Thread;
terms:title "Yo";
sioc:has_subscriber :account1, [ a sioc:User; sioc:account_of c:i ].
:account1 a sioc:User; sioc:account_of c0:me.
The new participant is also added to the acl file. For example :
@prefix : <#>.
@prefix acl: <http://www.w3.org/ns/auth/acl#>.
@prefix c: </profile/card#>.
@prefix c0: <https://www.w3.org/People/Berners-Lee/card#>.
:owner
a acl:Authorization;
acl:accessTo <index.ttl>;
acl:agent c:me;
acl:mode acl:Control, acl:Read, acl:Write.
[
a acl:Authorization;
acl:accessTo <index.ttl>;
acl:agent c0:i;
acl:mode acl:Read, acl:Write
].
The new participant is now authorized to load the discussion and see other participants.
Done
A user can load a discussion by hitting a url. The app must display discussion name, messages and participants.
Doing
A user can post messages.
To Do
Once a discussion is created the user can invite other people to participate by sending them an invitation with an appropriate link. The user can only add members to a discussion he owns.
To Do