Note

This version of the template contains some help and explanations. It is used for familiarization with arc42 and the understanding of the concepts. For documentation of your own system you use better the plain version.

1. Introduction and Goals

A decentralized web application of routes will be made following the SOLID architecture and the React framework. With it, users will be able to store routes, visualize them on a map, complete them with photos or videos and share them with their friends.

1.1. Requirements Overview

1.1.1. Functionals

  • Users should be able to view the routes on a map and store them on their own pods.

  • By using their own pods, the information will be totally decentralized, favoring data security.

  • The user will also be able to upload images and videos with their routes.

  • Those routes will be shareable with their friends.

1.1.2. Non functionals

  • The system must be accessible and intuitive for all types of users, although special attention will be focused on favouring those with less experience in applications of this style.

  • Avoid compromising user information by decentralizing data on separate pods for each user.

  • Follow the recommendations of the W3C to ensure an error-free and safer website.

1.2. Quality Goals

Table 1. Table Goals

Goal

Description

Mainteinability

The website can be easily maintained and progressively expanded in a simple way as development progresses, either by extending existing features or by adding new ones.

Performance

The system must be effective and react quickly to user requests for action.

Privacy

User data should be stored out of the internal servers and protected to prevent third parties from accessing them.

Testability

Tests must be able to be carried out to check the correct functioning of the system.

Usability

The application must be intuitive and easy to use by any type of user.

1.3. Stakeholders

Table 2. Table Stakeholders
Role/Name Contact Expectations

Application users

These represent the end users of the application

Have at their disposal an application that allows them to store their routes and share them with their friends.

Teachers

Who evaluate the project being carried out

Find a project that meets the above requirements.

Developers

Who will be in charge of developing the product

Make a system that meets the requirements above.

2. Architecture Constraints

Restriction Explanation

SOLID

It is an organization which principal objective decentralize the data in a way that each user has total control over their own data

React

It is a Javascript library that allows you to create user interfaces that are simple and easy to reuse. It is an open source software, maintained by Facebook and used by companies such as Airbnb or Instagram

Arc42

They are a set of templates used in the development of a software product. These templates differ from other documentation in that the extension is smaller since by means of diagrams and parts of the code it does not require so much text.

GitHub

It is a collaborative software development platform to host projects using the Git version control system

Collaborators

In this project we have seven developers, contributing with different parts of the project each one and making progress together

Project Time

We have 3 months to develop the whole project

Solid Server

 Not supporting JSON-LD as serializing format RDF

ESLint

Implemented with Codacy to check and ensure the code quality

Solid Server

Not supporting queries to navigate in the user POD

3. System Scope and Context

The scope of our project is a website where the users can create, explore and share routes without the related data being stored on a third-party server. So, a sharing website where all the shared data belongs to the private server of each user making use of SOLID.

Each user will be able to import new routes through GeoJSON or GPX files, save them on their PODs and share them with their friends. The shared routes will have titles, descriptions and attached media.

The application will be able to load and show routes made with similar apps.

3.1. Business Context

A user can store routes of various types that will be kept in his POD. He can also share the routes and other type of files with their friends

  • Regular user: Stores his own routes.

  • Sender: Sends routes to other user

  • Receiver user: Receives notifications containing routes from other user.

  • Pod: Each user has a POD where the routes and the shared information are stored.

  • Viade: Decentralized application to store routes and share with other people.

03 Business Context

3.2. Technical Context

03 Deployment Diagram

The descentralized server system of the application will make use of SOLID storing all the user’s data on their respective PODs. This will be integrated through the use of React, which will be the library of Javascript used to make all the interfaces of the application. An important key in the interaction and manageability of the web when communicating with the users will be the maps, which will be offered making use of OpenStreetMaps API.

4. Solution Strategy

Viade is a decentralized route management system based on the Solid specifications.

4.1. Technology decisions

4.1.1. Libraries

4.1.2. Languages

  • Javascript

  • CSS

  • SPARQL

4.1.3. Other decisions

  • We support GPX and GeoJSON(LineString) formats.

  • NodeJs to implement the Solid server

  • Using the Solid recommendations and specifications

4.2. Organizational decisions

To develop this project we designed a workflow that would ensure flexibility and consistency. The new functionalities would be selected each week in reunions, those new characteristics would be develop alone or in pairs and they should be feasible to finish in one week.

Each feature would be supervised and/or adapted by one of the coordinators, we will have two, one for the front-end and one for the back-end. Below that we decided some extra specializations to optimize our strengths and time.

Although all members have contributed to almost all parts of the implementation, the overall distribution is:

  • Rut Alfonso Garcia, in charge of the decisions about file formats and the parsers.

  • Carlos Menchaca Mosteiro, mostly dedicated to POD and file loading issues.

  • Manuel Lorenzo Vega, file uploading and directory management from the client side.

  • Daniel Pancho Cueto, specialized in the testing and quality assurance.

  • Christian Peláez Fernández, back-end coordinator and specialist of the SPARQL queries.

  • Carmen Sirgo Lopez, back-end and front-end bridge defining all its communication.

  • Ricardo Soto Estévez, front-end coordinator and UI/UX designer.

Workflow

4.3. Solution-approaches

Quality goal Solution approach

Adaptability

Colorblind friendly color scheme

Interoperability

Use of Viade Data Model Specification

Maintainability

Travis, Codecov, Modular design

Scalability

Modular design, genericity and abstraction

Testeability

Codecov

Usability

Two-step operations and functionality color remark

4.3.1. Adaptability approach

Adaptibility

4.3.2. Scalability approach

Scalability

4.3.3. Usability approach

Usability

5. Building Block View

This section is a decomposition of our system into diagrams. Each level is more specific than the previous one.

5.1. Level 1

Level 1 shows us a global vision of the project.

General View

Table 3. Level 1 descriptions
Name Responsibility

Pod

Description in the glossary

Viade

Our Application

5.2. Level 2

Level 2 shows us a global vision about project architecture.

Viade View

Table 4. Level 2 descriptions
Name Responsibility

Components and Containters

Generate the code to show the page using React

GeoJson → Route

We transform de GeoJson into an object Route in order to make route managment easier from our app.

Route → RDF

We transform de object Route into RDF to be able to upload it to a Solid Pod.

Route ← RDF

We download RDF object and transform it into object Route to show it.

5.3. Level 3

Level 3 shows us a concrete vision about connections between interface and POD.

Connections View

Table 5. Level 3 descriptions
Name Responsibility

Components and Containters

Generate the code to show the page using React

route-helper

Service that manage route methods

storage-helper

Service that manage storage methods

notificaction-helper

Service that manage notificaction methods

solid-file-client

A library for managing Solid files and folders.

sparql-fiddle

An online sparql-fiddle app allows you to load from URL, create, or cut and paste RDF and SPARQL into a form and then run the query, edit and re-run.

6. Runtime View

Here are some Scenarios to understand how Viade works

6.1. Log in

This is a general view of the access to the web

Log in

6.2. Upload a Route

This is a general view of the process to upload a route

Upload Routes

6.3. Load your Routes

This is a general view of how the routes are loaded from the POD

Load Routes

6.4. Display a Route

This is a general view of how the Route are loaded to be displayed

Display your Routes

6.5. Send a Notification

This is a general view of how the Routes are shared

Send Notification

6.6. Receive a Notification

This is a general view of how incoming Notifications are handled

Receive Notification

6.7. Infrastructure Level 1

As Viade is a decentralized browser application, we only need 3 elements per user:

  • The user’s computer. Which must have a browser to access the application. We recommend using Google Chrome as other browsers like Internet Explorer may not have all the JavaScript functionalities used to run the application. This also means that the user does not need a very powerful computer, just Internet conexion.

  • The SOLID’s server. Here is where the user’s POD is. All the routes and multimedia data are stored in the POD. Thanks to the SOLID de-centralized authentication mechanisms it is not necesary to have a central server for the signing up/login process.

  • The GitHub Pages server. This will be the Web Hosting Service for the application.

07 Deployment Diagram
Motivation

We think choosing a browser application is a good way to be open to more public, as some clients would rather access to the application online than having to install a desktop application. Moreover, being a de-centralized application can appeal clients who only want to store their routes somewhere instead of sharing them online, in this way, we can satisfy both types of clients (the ones who want to share routes and the ones wo want to keep them).

6.8. Infrastructure Level 2

  • Solid POD: This is a personal storage space where you caan decide which things are public and private and who can see them (people, apps…​).

  • GitHub Pages: Theese are public webpages hosted and published through GitHub. They can be managed via the web or locally in a computer.

08 Crosscutting Concepts Structure EN

7. Cross-cutting Concepts

7.1. Domain Concepts

i.e domain models, business data model

7.2. User Experience concepts (UX)

User interface

Ergonomics

Internationalization

How to make the system usable in international settings, translation, screen-layout, wording and other

7.3. Safety and security concepts

Security

i.e. how to achieve confidentiality, non-reputiability and other goals.

Safety

Safety-critical systems are those whose failure or malfunction may result in death or injury or severe financial loss

7.4. Architecture and design patterns

recurring patterns within the system

7.5. “Under-the-hood” concepts

Persistency

how / where to store and retrieve data

Process control

Transaction handling

How to handle technical or business transactions, i.e. to achieve ACID properties

Session handling

How to handle user/client sessions

Communication and integration

How to integrate with other systems, how to communicate (i.e. sync, async, pub-sub…)

Exception and error handling

What errors to handle, how to handle exceptional situations

Parallization and threading

How to parallelize tasks, how to create/spawn/manage processes

Plausibility checks and validation

i.e. client-side validation, how to verify/check data, input, results.

Business rules

i.e. how to use a rule-engine, how to implement/configure business rules, how to change those…

Batch processing

How to process data in batches (i.e. offline processing)

Reporting

How to create reports, how to gather the required data, how to render the results

7.6. Development concepts

Build, test, deploy

Code generation

Migration

Configurability

7.7. Operational concepts

Administration

Management

Disaster-Recovery

Scaling

Clustering

Monitoring, Logging

High Availability

Load balancing

08 Crosscutting Concepts Structure EN

8. Design Decisions

Version-control system

Github

Programming language

JavaScript

Distributed application structure

Solid

Main library

React

Architectural pattern

Domain Driven Design

9. Quality Requirements

9.1. Quality Tree

This development aims to fulfill the quality requirements specified in the following tree diagram.

Quality Tree Extended

9.2. Quality Scenarios

Achieving the expected response of the application for the following scenarios is the goal to meet the quality expectations.

9.2.1. Maintainability

Scenario #1: Documentation updated
Details
Who

New member of the development team

When

Joining the development

Where

Documentation

What

The documentation should offer easily all the information the others developers will need

How

Keeping the arc42 updated

Scenario #2: Readable code
Details
Who

New member of the development team

When

Joining the development

Where

Code

What

The code should be easy to understand to others

How

Keeping it legible, commented and following style guides

Scenario #3: Extension of the functionality
Details
Who

Any member of the development team

When

Starting to develop a new function

Where

Code

What

The code should be easy to extend its functionality

How

Keeping it as modular as possible and implementing software designs.

9.2.2. Performance

Scenario #4: Warning an user about an invalid operation
Details
Who

Any user

When

Making a mistake or invalid operation

Where

The view

What

The application should register and notify the error at the moment, the warning should be clear and comprenhensible

How

Checking all the inputs at the moments and having a strong exception build

9.2.3. Privacy

Scenario #5: Someone tries to access the data of other user
Details
Who

Any user

When

Someone trying to access their data

Where

The service

What

The application should instantly notify the affected user about the access and block it

How

Checking the identification of each user in every operation

9.2.4. Testeability

Scenario #6: Testing new functionality
Details
Who

Any developer

When

Adding new functionality

Where

Any point of the application

What

Any new functionality added should be tested to confirm it’s well implemented

How

Through a battery of unit tests

Scenario #7: User beta testing
Details
Who

A standard user

When

The application is usable

Where

Any point of the application

What

Try the app and give some feedback

How

Through an issue on GitHub

9.2.5. Usability

Scenario #8: Colorblind clarity
Details
Who

Colorblind user

When

Using the application

Where

GUI

What

The user interface must be adapted to be easily usable by all the colorblindness types

How

Through the use of a valid palette, icons and texts

Scenario #9: Navigable using keyboard
Details
Who

Any user

When

Using the application with keyboard

Where

GUI

What

The user should be able to navigate through the whole application using only the keyboard

How

Through the use of correct shortcuts, tab navigation and mnemonics

Scenario #10: Compatibility with multiple formats
Details
Who

Any user

When

Importing or exporting routes

Where

Routes manager

What

The user should be able to import and export the routes to, at least: GeoJSON, KML and GPX

How

Through the use of parsers and the RouteViade object

Scenario #11: New user understanding the application fast
Details
Who

New user

When

First time using the application

Where

GUI

What

The user should be able to learn to navigate and use the app instantly

How

Keeping a clear and straightforward user interface

Scenario #12: Mobile compatibility
Details
Who

Mobile user

When

Using the application

Where

The whole application

What

The user should be able use the application without problems

How

Making the interface and functionality compatible with lesser screens

10. Risks and Technical Debts

Contents

Any project that is undertaken is inevitably going to have a number of risks, both technical and team-related. At the same time, there will also be motivations and positive events on which we can rely to continue the work successfully.

Motivation

In this case, we will have the support of the teachers of the subject, who will advise us and consult our doubts and problems. In addition, as far as the internal organization of the team is concerned, we have decided to create "user histories" containing all the functionalities, modifications and tests that must be carried out on the application.

Form
  • SOLID. SOLID’s architecture is something we are not familiar with at all, so working with this might be a little difficult when it comes to starting the project, because it will require a long research and adaptation process, and also during the development stage, for the reason that it might appear some problems that we probably don’t know how to fix.

  • React. Like SOLID, React is a framework totally new for us, so we must get information about this technology before starting to produce the application. This not only implies documenting about it, but we must also investigate how to connect it with SOLID and how to integrate both with the rest of the system.

  • Little experience in web development. Before the beginning of this project, the only contact we’d had with web application development was the one we acquired in the SEW course. In addition, this knowledge was not particulary high, because a four-month subject is’t enough to study the complexity of web design in depth. That’s why we must do a biggest effort to be able to get acceptable results.

  • Stranger team. Even though this is probably going to be the usual thing for us in the future, the truth is that working with strangers is always a challenge and a risk, because the chance of not being able to get alog with our workmate, lack of communication or not reaching agreement despite the effort put into the dialogue is present at all times.

  • Large team. Again, this is part of our future work as software developers or software architects and we must be prepared for it. However, until we get used to it, sharing team with six other people can be a problem, because the more members it has, the more difficult it will be to coordinate it. This is why we must work to encourage good communication between us.

  • Limited time. For the first presentation of the application, we have a total of three weeks in which we must make a first prototype that includes as many functionalities as possible. Linking this limited time with everything described above could become a problem, preventing even the successful completion of this first prototype.

11. Glossary

Term Definition

Solid

Solid is a web decentralization project led by Tim Berners-Lee.The project "aims to radically change the way Web applications work today, resulting in true data ownership as well as improved privacy" by developing a platform for linked-data applications that are completely decentralized and fully under users' control rather than controlled by other entities.

POD

Web-accessible personal online datastore. Each user can have one or more pods from different pod providers, and can easily switch between providers

Linked Data

Is structured data which is interlinked with other data so it becomes more useful through semantic queries.

RDF

RDF stands for Resource Description Framework and is a standard for data interchange, developed and agreed upon by W3C.

Turtle

Is a syntax and file format for expressing data in the Resource Description Framework (RDF) data model

SPARQL

Query language for RDF

GPX

An XML schema designed as a common GPS data format for software applications

GeoJSON

An open standard format designed for representing simple geographical features,based on the JavaScript Object Notation (JSON).

About arc42

arc42, the Template for documentation of software and system architecture.

By Dr. Gernot Starke, Dr. Peter Hruschka and contributors.

Template Revision: 7.0 EN (based on asciidoc), January 2017

© We acknowledge that this document uses material from the arc 42 architecture template, http://www.arc42.de. Created by Dr. Peter Hruschka & Dr. Gernot Starke.