The platform is microservice based. The communication between services is message-oriented. All the services are implemented in Java, using the framework Quarkus.
With the following sections, the architecture is introduced.
The architecture diagram is the following:

The API gateway takes all API calls from clients, then routes them to the appropriate microservice with the request. The 4 main services of the platform are the following:
- The so called Live-trip service, that provides all the capabilities to upload a new trip (or a trip of a registered route) and the management of a live trip. The API exposed are the following:
This service at /index.html?userId={userId}&sessionId={sessionId}expose also a web application to monitor a live trip of a user. Once a passenger gets the notification that the trip of the driver has started, he can have a look at the current position of the driver (the android application might use aWebViewor use the api to do the same job.). - The Enrichment-Scoring service that calculate the route matching using HERE services and calculates the driving score. The API exposed are the following:

- The route-analytics service that interacts with IBM watson to calculate and retrieve the matchings between users/routes. This service does not expose any API to the API gateway.
- The User service that manages routes, users and notifications. The API:

All the services expose the swagger specs at the endpoint /swagger-ui, please have a look at them for a detailed overview of the capabilities of each service.
For the security documentation, please have a look at this.