In this document, we will look at the differents technologies that makes voca. This will gives you a rough overview of the project, and hopefully an idea of the learning curve.

Infrastructure with Jelastic Virtuozzo

For now, voca uses Jelastic to mount and run. Jelastic offers two kind of APIs:

Routing with Traefik

We use Traefik to route our primary service voca, and all the different Decidim that he mounts.

Traefik uses two providers: a file provider (yaml), and a http provider.

Front end with NextJS

The frontend is made with react, using a material design library. It is served by a next server to handle nicely authentication. The components are carefully craft to respect our design system. This frontend will consume a graphql api, served by our backend.

In the frontend, we do (almost) no next magics, it is made of plain react component that represents the state of the API and are designed to have a fluid experience.

Front-end → Backend proxy with NextJS

The react front end uses only next endpoints, who will proxy requests to our backend. Thus, it is possible to hide the backend in a private network.

Graphql API with Strapi

Strapi generates a standard and navigable graphql API from it’s model. To this API, we add several resolvers in order to ask status and manipulate Decidim instances through a secure and private gRPC interface - private as in a private network, not private as closed source ;)

You will find most of our graphql custom resolver in Decidim endpoints: there you can retrieve informations directly from the Decidim Instances (Rails).

The Graphql API offers as well some endpoints to get the status of the infrastructure, in order to know if the instance is running (you can interact with), or stopped.

Queues with Strapi, BullMQ, Redis