Skip to content

dindy/solid-discussion-app

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

61 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🐙 Solid Discussion App

❓ What is it ?

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.

📕 Backlog

⭐️ [SDA-1] A user can connect to his pod

📋 Description

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.

🔧 Implementation

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.

📅 Status

Done


⭐️ [SDA-2] A user can create a discussion

📋 Description

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.

🔧 Implementation

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...

📅 Status

Done


⭐️ [SDA-3] A user can add participants

📋 Description

Once a discussion is created the user can add participants by adding their webids.

🔧 Implementation

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.

📅 Status

Done


⭐️ [SDA-4] A user can load a discussion

📋 Description

A user can load a discussion by hitting a url. The app must display discussion name, messages and participants.

🔧 Implementation

📅 Status

Doing


⭐️ [SDA-5] A user can post messages

📋 Description

A user can post messages.

🔧 Implementation

📅 Status

To Do


⭐️ [SDA-6] A user can invite participants

📋 Description

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.

🔧 Implementation

📅 Status

To Do