This is a collection of open topics for the services and especially the manager:

1. Persistence of service configuration
The configuration of services in the manager admin panel should be persisted in a database.
Additionally the docker configuration needs to be extended to have a volume for the database that lives longer than a container.

2. Service selection
Currently the service selection in the manager form is implemented as checkboxes. This way it is not possible to define an
execution order. This should be changed to a combobox design. So all available services are available in a combobox. After
selecting a service in a combobox, another combobox should appear containing all configured services. This way a user can
select the service to execute and the order in which the services should be executed.

3. Configuration resource
There should be a configuration resource for each service that provides information about the possible parameters of the service.
For example it could be possible to specify a version to migrate to in the converter service, and the validation service
needs a configuration which validation profiles should be used. Based on this information the corresponding form parameters
should be added in the manager form on selecting a service.

4. Asynchronous service execution
Currently the services are executed synchronously when the manager form is submitted. This should be changed to asynchronous
execution to avoid timeouts for long running operations, e.g. for big model files. The update of the UI with the progress
massages should be updated frequently, maybe using AJAX and/or websockets.

5. Configuration via YAML
Additionally to the manager workflow form UI it should be possible to trigger the workflow processing directly by providing
an additional YAML configuration file. This allows the integration of the cloud service workflow in a CI/CD environment.

6. Proxy configuration
Add an administration UI to be able to configure a proxy server