This project is a web application for building dodo-app. It can be thought of as WYSIWYG editor for generating JSON configuration conforming to `back/dodo-app.jsonschema` JSON schema, which describes the infrastructure environment dodo-app requires. It sends generated dodo-app project configuration to external API for deployment. Read `back/dodo-app.jsonschema` to understand the structure of the configuration. It is a monorepo consisting of three main components:
1. `config/`: Contains shared libraries and types used across the `front` and `back` packages. `Config` is Typescript equivalent of the dodo-app.jsonschema.
2. `front/`: Implements the React-based user interface. This is what the user interacts with to build their dodo-app configuration. It's main component is Canvas where the same dodo-app configuration is presented to the user as a graph, where each node represents different parts of the dodo-app configuration and connections between them represets component dependencies. For each node there is a specific node details React component implementation, which lets users configure the component. `front/` is responsible for validating project configuration, converting graph representation into dodo-app configuration and sending (via `back/`) generated configuration to external API for deployment.
3. `back/`: Implements the backend service. It's main responsibilities are:
  1. Serving the `front/` end application.
  2. Managing (create/update/delete) projects.
  3. Verifying permissions.
  4. Proxying deployment requests to external API.

All three components can be built using `npm run build` command. As both `front/` and `back/` depend on `config/`, make sure to build `config/` first.

Before committing changes make sure to run `npm run lint` and `npm run format` and fix all the issues.
