Skip to content

Observatory of Spanish Artistic Precarity

Map screenshot Dashboard screenshot

Live documentation

  • This documentation has been generated along the development process, therefore is no curated material. If some parts don't make sense refer to the code in the public repos.

Introduction

The Observatory of Spanish Artistic Precarity prototype is a dynamic platform that visualizes metric data regarding current worker conditions and provides more visibility to the problem of precarity for cultural workers. At the same time, it allows users to create networks with each other and reach out to help entities after posting their public denouncement. Thanks to blockchain technology, the platform will be transparent and harder to censor (contrary to other projects based on mainstream platforms, e.g.@TrabajosRuineros). By relying on a set of quantitative data provided by users, we should also be able to visualize and address salary gaps depending on gender, location and type of (artistic) profession, which can help further analysis and policy-making around precarity.

The prototype has three main goals:

  • Monitorization: provide data to organizations and collectives in order to develop strategies for solving this issue through social means.

  • Visibilization: raise awareness of job insecurity in Spain to the public.

  • Collectivization: ease the process of contacting organizations, collectives and individuals with similar issues with the intention of increasing social participation outside the digital sphere.

Form screenshot

Demo

If you want to test the current version of the prototype check the live demo.

Prototype architecture

The prototype is still in development stage which means that some parts of it might change, get removed or added.

Arquitecture diagram

At the frontend level we have a React app with an Apollo client that connects to the backend API gateway. For more information read the docs of the front end repo.

At the backend level we have an API gateway implemented with Apollo server, GraphQL for the API's and GraphQL Tools for Schema Stitching. The main benefit of this piece of software is the use of a hybrid architecture, in which we can implement both modern web services and web3 services running simultaneusly seamlesly.

The current services provided to the client are: users service (for email sharing between participants), cases backend service (for reporting a new case), cases subgraph servie (to get access to reported cases and metrics). For more information read the docs of the back end repo.

At the blockchain level we find the Case Registry smart contract, which will serve as a registry for the reported cases. The cases subgraph will process the events triggered when a new case is registered to update the current metrics of the platform. For more information read the docs of the back end repo.

Technology stack

Arquitecture diagram

The main frameworks and libraries used in this prototype are:

Frontend

  • React.js: this project was bootstrapped with Create React App.
  • Material-UI: for UI components.
  • Ethers.js v5: for web3 interactions.
  • useDapp: provides useful react hooks for blockchain interactions.
  • Apollo client: to interact with The Graph network and our backend.
  • GraphQL: as the data transfer layer replacing traditional REST API's.

Backend

  • Apollo server
  • Prisma: node.js ORM to manage your db.
  • Nexus: Declarative, Code-First GraphQL Schemas for JavaScript/TypeScript
  • GraphQL: as the data transfer layer replacing traditional API's.
  • PostgresQL: open-source relationtal database.

Blockchain

  • Ethereum: blockchain 2.0 network.
  • Solidity: programming language for developing smart contracts in the Ethereum blockchain.
  • Hardhat: development tools to develope, test and deploy smart contracts.
  • Waffle: testing library for smart contracts.
  • The Graph: decentralized service for indexing complex events in the blockchain.

Deployment

  • Docker: containerize and automatize development.

License

This prototype is licensed under GNU General Public License v3.0


Last update: 2022-05-23