diff --git a/README.md b/README.md
index b63ba94f3..6a5c7d603 100644
--- a/README.md
+++ b/README.md
@@ -10,97 +10,6 @@ Chill-bundles is a set of bundles that should be used within a Symfony applicati
A symfony application will help you to customize all the configuration options, change the behaviour of some parts of the usual-way that chill works, … without to have to fork this repository !
-### For a usage in production
+See [the instructions in the docs](./docs/source/installation/index.rst).
-You will create a symfony app, which will then download this bundle as a dependency.
-
-See the documentation at https://docs.chill.social.
-
-### For development or testing purpose only
-
-⚠️ Use this method for development only. ⚠️
-
-You will need:
-
-- [Composer](https://getcomposer.org);
-- [Symfony-cli tool](https://symfony.com/download);
-- [docker](https://docs.docker.com/engine/install/) and [docker-compose](https://docs.docker.com/compose/)
-- node > 20 and yarn 1.22
-
-#### First initialization
-
-1. clone this repository and move to the cloned directory:
-
- ```bash
- git clone https://gitlab.com/Chill-Projet/chill-bundles.git
- cd chill-bundles
- ```
-2. install depencies using composer
-
- ```bash
- composer install
- ```
-3. Install and compile assets:
-
- ```bash
- yarn install
- yarn run encore production
- ```
-
- **note** double check that you have the node version > 20 using the `node --version` command.
-
-4. configure your project: create a `.env.local` file at the root, and add the admin password:
- ```dotenv
- # for this installation mode, the environment should always be "dev"
- APP_ENV=dev
- ADMIN_PASSWORD=\$2y\$13\$iyvJLuT4YEa6iWXyQV4/N.hNHpNG8kXlYDkkt5MkYy4FXcSwYAwmm
- # note: if you copy-paste the line above, the password will be "admin".
- ```
-5. start the stack using `docker compose up -d`, check the status of the start with `docker compose ps`
-
-6. configure all the needed third-party tools
-
- ```bash
- # the first start, it may last some seconds, you can check with docker compose ps
- # run migrations
- symfony console doctrine:migrations:migrate
- # setup messenger
- symfony console messenger:setup-transports
- # prepare some views
- symfony console chill:db:sync-views
- # generate jwt token, required for some api features (webdav access, ...)
- symfony console lexik:jwt:generate-keypair
- ```
-7. add some fixtures
-
- This will truncate all the existing data of the database. But remember, we are in dev mode !
-
- ```bash
- symfony console doctrine:fixtures:load
- ```
-
-8. launch symfony dev-server
- ```bash
- symfony server:start -d
- ```
-
- And visit the web page it suggest. You can login with user `center a_social` and password `password`, or login `admin` with the password you set.
-
-#### Stopping the server
-
-```bash
-symfony server:stop
-```
-
-#### Restart the webserver for subsequent start
-
-```bash
-symfony server:start -d
-# this will automatically starts the full docker compose services
-```
-
-## Documentation
-
-The online documentation can be read at https://docs.chill.social, or the [`docs`][1] directory.
-
-[1]: docs/README.md
+Those instructions are also built [online](https://docs.chill.social).
diff --git a/docs/source/development/code-quality.rst b/docs/source/development/code-quality.rst
new file mode 100644
index 000000000..7e37ebf25
--- /dev/null
+++ b/docs/source/development/code-quality.rst
@@ -0,0 +1,34 @@
+Code style, code quality and other tools
+########################################
+
+PHP-cs-fixer
+============
+
+For development, you will also have to install:
+
+- `php-cs-fixer `_
+
+We also encourage you to use tools like `phpstan `_ and `rector `_.
+
+For running php-cs-fixer:
+
+.. code-block:: bash
+
+ symfony composer php-cs-fixer
+
+Execute tests
+=============
+
+.. code-block:: bash
+
+ symfony composer exec phpunit -- /path/to_your_test.php
+
+Note that IDE like PhpStorm should be able to run tests, even KernelTestcase or WebTestCase, `from within their interfaces `_.
+
+Execute rector
+==============
+
+.. code-block:: bash
+
+ symfony composer exec rector -- process
+
diff --git a/docs/source/installation/index.rst b/docs/source/installation/index.rst
index a9a4ea0c6..fb4cb3cac 100644
--- a/docs/source/installation/index.rst
+++ b/docs/source/installation/index.rst
@@ -17,6 +17,27 @@ Installation & Usage
You will learn here how to install a new symfony project with chill, and configure it.
+Which can of installation do I need ?
+=====================================
+
+I want to run chill in production
+---------------------------------
+
+See the :ref:`instructions about installing Chill for production `.
+
+I want to add features to the main chill bundles
+------------------------------------------------
+
+If you want to add features to chill bundles itself, **and** you want those features to be merged into the chill bundles,
+you can use the "development" installation mode.
+
+See the :ref:`instruction for installation for development `.
+
+I want to add features to Chill, but keep those features for my instance
+-------------------------------------------------------------------------
+
+Follow the same instruction than for production, until the end.
+
Requirements
============
@@ -36,341 +57,11 @@ Chill needs a redis server and a postgresql database, and a few other things lik
generate documents from templates. **All these things are available through docker using the plugin compose**. We do not provide
information on how to run this without docker compose.
-
-Install a new project
-=====================
-
-Initialize project and dependencies
-***********************************
-
-.. code-block:: bash
-
- symfony new --version=5.4 my_chill_project
- cd my_chill_project
-
-We strongly encourage you to initialize a git repository at this step, to track further changes.
-
-.. code-block:: bash
-
- # add the flex endpoints required for custom recipes
- cat <<< "$(jq '.extra.symfony += {"endpoint": ["flex://defaults", "https://gitlab.com/api/v4/projects/57371968/repository/files/index.json/raw?ref=main"]}' composer.json)" > composer.json
- # install chill and some dependencies
- # TODO fix the suffix "alpha1" and replace by ^3.0.0 when version 3.0.0 will be released
- symfony composer require chill-project/chill-bundles v3.0.0-RC3 champs-libres/wopi-lib dev-master@dev champs-libres/wopi-bundle dev-master@dev
-
-We encourage you to accept the inclusion of the "Docker configuration from recipes": this is the documented way to run the database.
-You must also accept to configure recipes from the contrib repository, unless you want to configure the bundles manually).
-
-.. code-block:: bash
-
- # fix some configuration
- ./post-install-chill.sh
- # install node dependencies
- yarn install
- # and compile assets
- yarn run encore production
-
-.. note::
-
- If you encounter this error during assets compilation (:code:`yarn run encore production`) (repeated multiple times):
-
- .. code-block:: txt
-
- [tsl] ERROR in /tmp/chill/v1/public/bundles/chillcalendar/types.ts(2,65)
- TS2307: Cannot find module '../../../ChillMainBundle/Resources/public/types' or its corresponding type declarations.
-
- run:
-
- .. code-block:: bash
-
- rm -rf public/bundles/*
-
- Then restart the compilation of assets (:code:```yarn run encore production```)
-
-Configure your project
-**********************
-
-You should read the configuration files in :code:`chill/config/packages` carefully, especially if you have
-custom developments. But most of the time, this should be fine.
-
-You have to configure some local variables, which are described in the :code:`.env` file. The secrets should not be stored
-in this :code:`.env` file, but instead using the `secrets management tool `_
-or in the :code:`.env.local` file, which should not be committed to the git repository.
-
-You do not need to set variables for the smtp server, redis server and relatorio server, as they are generated automatically
-by the symfony server, from the docker compose services.
-
-The only required variable is the :code:`ADMIN_PASSWORD`. You can generate a hashed and salted admin password using the command
-:code:`symfony console security:hash-password 'Symfony\Component\Security\Core\User\User'`. Then,
-you can either:
-
-- add this password to the :code:`.env.local` file, you must escape the character :code:`$`: if the generated password
- is :code:`$2y$13$iyvJLuT4YEa6iWXyQV4/N.hNHpNG8kXlYDkkt5MkYy4FXcSwYAwmm`, your :code:`.env.local` file will be:
-
- .. code-block:: env
-
- ADMIN_PASSWORD=\$2y\$13\$iyvJLuT4YEa6iWXyQV4/N.hNHpNG8kXlYDkkt5MkYy4FXcSwYAwmm
- # note: if you copy-paste the line above, the password will be "admin".
-
-- add the generated password to the secrets manager (**note**: you must add the generated hashed password to the secrets env,
- not the password in clear text).
-
-- set up the jwt authentication bundle
-
-Some environment variables are available for the JWT authentication bundle in the :code:`.env` file.
-
-Prepare migrations and other tools
-**********************************
-
-To continue the installation process, you will have to run migrations:
-
-.. code-block:: bash
-
- # start databases and other services
- docker compose up -d
- # the first start, it may last some seconds, you can check with docker compose ps
- # run migrations
- symfony console doctrine:migrations:migrate
- # setup messenger
- symfony console messenger:setup-transports
- # prepare some views
- symfony console chill:db:sync-views
- # generate jwt token, required for some api features (webdav access, ...)
- symfony console lexik:jwt:generate-keypair
-
-.. warning::
-
- If you encounter an error while running :code:`symfony console messenger:setup-transports`, you can set up the messenger
- transport to redis, by adding this in the :code:`.env.local` or :code:`.env` file:
-
- .. code-block:: env
-
- MESSENGER_TRANSPORT_DSN=redis://${REDIS_HOST}:${REDIS_PORT}/messages
-
-Start your web server locally
-*****************************
-
-At this step, Chill will be ready to be served locally, but without any configuration. You can run the project
-locally using the `local symfony server `_:
-
-.. code-block:: bash
-
- # see the whole possibilities at https://symfony.com/doc/current/setup/symfony_server.html
- symfony server:start -d
-
-
-If you need to test the instance with accounts and some basic configuration, please install the fixtures (see below).
-
-
-Add capabilities for dev
-========================
-
-If you need to add custom bundles, you can develop them in the `src/` directory, like for any other symfony project. You
-can rely on the whole chill framework, meaning there is no need to add them to the original `chill-bundles`.
-
-You will require some bundles to have the following development tools:
-
-- add fixtures
-- add profiler and debug bundle
-
-Install fixtures
-****************
-
-.. code-block:: bash
-
- # generate fixtures for chill
- symfony composer require --dev doctrine/doctrine-fixtures-bundle nelmio/alice
- # now, you can generate fixtures (this will reset your database)
- symfony console doctrine:fixtures:load
-
-This will generate user accounts, centers, and some basic configuration.
-
-The accounts created are: :code:`center a_social`, :code:`center b_social`, :code:`center a_direction`, ... The full list is
-visible in the "users" table: :code:`docker compose exec database psql -U app -c "SELECT username FROM users"`.
-
-The password is always :code:`password`.
-
-.. warning::
-
- The fixtures are not fully functional. See the `corresponding issue `_.
-
-Add web profiler and debugger
-*****************************
-
-.. code-block:: bash
-
- symfony composer require --dev symfony/web-profiler-bundle symfony/debug-bundle
-
-Working on chill bundles
-************************
-
-If you plan to improve the chill-bundles repository, that's great!
-
-You will have to download chill-bundles as a git repository (and not as an archive, which is barely editable).
-
-In your :code:`composer.json` file, add these lines:
-
-.. code-block:: diff
-
- {
- "config": {
- + "preferred-install": {
- + "chill-project/chill-bundles": "source",
- "*": "dist"
- + }
- }
-
-Then, run :code:`symfony composer reinstall chill-project/chill-bundles` to re-install the package from source.
-
-Code style, code quality and other tools
-****************************************
-
-For development, you will also have to install:
-
-- `php-cs-fixer `_
-
-We also encourage you to use tools like `phpstan `_ and `rector `_.
-
-Commit and share your project
-=============================
-
-If multiple developers work on a project, you can commit your symfony project and share it with other people.
-
-When another developer clones your project, they will have to:
-
-- run :code:`symfony composer install` and :code:`yarn install` to install the same dependencies as the initial developer;
-- run :code:`yarn run encore production` to compile assets;
-- copy any possible variables from the :code:`.env.local` files;
-- start the docker compose stack, using :code:`docker compose`, and run migrations, set up transports, and prepare chill db views
- (see the corresponding command above)
-
-Update
-======
-
-In order to update your app, you must update dependencies:
-
-- for chill-bundles, you can `set the last version `_ manually
- in the :code:`composer.json` file, or set the version to `^3.0.0` and run :code:`symfony composer update` regularly
-- run :code:`composer update` and :code:`yarn update` to maintain your dependencies up-to-date.
-
-After each update, you must update your database schema:
-
-.. code-block:: bash
-
- symfony console doctrine:migrations:migrate
- symfony console chill:db:sync-views
-
-Operations
-==========
-
-Build assets
-************
-
-run those commands:
-
-.. code-block:: bash
-
- # for production (or in dev, when you don't need to work on your assets and need some speed)
- yarn run encore production
- # in dev, when you wan't to reload the assets on each changes
- yarn run encore dev --watch
-
-How to execute the console ?
-****************************
-
-.. code-block:: bash
-
- # start the console with all required variables
- symfony console
- # you can add your command after that:
- symfony console list
-
-How to generate documents
-*************************
-
-Documents are generated asynchronously by `"consuming messages" `_.
-
-You must generate them using a dedicated process:
-
-.. code-block:: bash
-
- symfony console messenger:consume async priority
-
-To avoid memory issues, we encourage you to also use the :code:`--limit` parameter of the command.
-
-How to read emails sent by the program ?
-*******************************************
-
-In development, there is a built-in "mail catcher". Open it with :code:`symfony open:local:webmail`
-
-How to run cron-jobs ?
-**********************
-
-Some commands must be executed in :ref:`cron jobs `. To execute them:
-
-.. code-block:: bash
-
- symfony console chill:cron-job:execute
-
-What about materialized views ?
-*******************************
-
-There are some materialized views in chill, to speed up some complex computations in the database.
-
-In order to refresh them, run a cron job or refresh them manually in your database.
-
-How to run tests for chill-bundles
-**********************************
-
-Tests reside inside the installed bundles. You must `cd` into that directory, download the required packages, and execute them from this place.
-
-**Note**: some bundles require the fixtures to be executed. See the dedicated _how-tos_.
-
-Example, for running a unit test inside `main` bundle:
-
-.. code-block:: bash
-
- # cd into main directory
- cd vendor/chill-project/chill-bundles
- composer install
- # run tests
- bin/phpunit src/Bundle/path/to/your/test
-
-Or for running tests to check code style and php conventions with csfixer and phpstan:
-
-Troubleshooting
-===============
-
-Error `An exception has been thrown during the rendering of a template ("Asset manifest file "/var/www/app/web/build/manifest.json" does not exist.").` on first run
-********************************************************************************************************************************************************************
-
-Build assets, see above.
-
-Running in production
-=====================
-
-Currently, to run this software in production, the *state of the art* is the following :
-
-1. Run the software locally and tweak the configuration to your needs ;
-2. Build the image and store it in a private container registry.
-
-.. warning::
-
- In production, you **must** set these variables:
-
- * ``APP_ENV`` to ``prod``
- * ``APP_DEBUG`` to ``false``
-
- There are security issues if you keep the same variables as for production.
-
-
-Going further
-=============
+Instructions
+============
.. toctree::
:maxdepth: 2
- prod.rst
- load-addresses.rst
- prod-calendar-sms-sending.rst
- msgraph-configure.rst
+ installation-development.rst
+ installation-production.rst
diff --git a/docs/source/installation/installation-development.rst b/docs/source/installation/installation-development.rst
new file mode 100644
index 000000000..5977747c6
--- /dev/null
+++ b/docs/source/installation/installation-development.rst
@@ -0,0 +1,101 @@
+.. _installation-for-dev:
+
+Installation for development or testing purpose only
+====================================================
+
+⚠️ Use this method for development only. ⚠️
+
+You will need:
+
+- `Composer `__;
+- `Symfony-cli tool `__;
+- `docker `__ and
+ `docker-compose `__
+- node > 20 and yarn 1.22
+
+First initialization
+--------------------
+
+1. clone the repository and move to the cloned directory:
+
+.. code:: bash
+
+ git clone https://gitlab.com/Chill-Projet/chill-bundles.git
+ cd chill-bundles
+
+2. install dependencies using composer
+
+.. code:: bash
+
+ composer install
+
+3. Install and compile assets:
+
+.. code:: bash
+
+ yarn install
+ yarn run encore production
+
+**note** double check that you have the node version > 20 using the
+``node --version`` command.
+
+4. configure your project: create a ``.env.local`` file at the root, and
+ add the admin password:
+
+.. code:: dotenv
+
+ # for this installation mode, the environment should always be "dev"
+ APP_ENV=dev
+ ADMIN_PASSWORD=\$2y\$13\$iyvJLuT4YEa6iWXyQV4/N.hNHpNG8kXlYDkkt5MkYy4FXcSwYAwmm
+ # note: if you copy-paste the line above, the password will be "admin".
+
+5. start the stack using ``docker compose up -d``, check the status of
+ the start with ``docker compose ps``
+
+6. configure all the needed third-party tools
+
+ .. code:: bash
+
+ # the first start, it may last some seconds, you can check with docker compose ps
+ # run migrations
+ symfony console doctrine:migrations:migrate
+ # setup messenger
+ symfony console messenger:setup-transports
+ # prepare some views
+ symfony console chill:db:sync-views
+ # generate jwt token, required for some api features (webdav access, ...)
+ symfony console lexik:jwt:generate-keypair
+
+7. add some fixtures
+
+This will truncate all the existing data of the database. But remember,
+we are in dev mode !
+
+.. code:: bash
+
+ symfony console doctrine:fixtures:load
+
+8. launch symfony dev-server
+
+.. code:: bash
+
+ symfony server:start -d
+
+And visit the web page it suggest. You can login with user
+``center a_social`` and password ``password``, or login ``admin`` with
+the password you set.
+
+Stopping the server
+-------------------
+
+.. code:: bash
+
+ symfony server:stop
+
+Restart the webserver for subsequent start
+------------------------------------------
+
+.. code:: bash
+
+ symfony server:start -d
+ # this will automatically starts the full docker compose services
diff --git a/docs/source/installation/installation-production.rst b/docs/source/installation/installation-production.rst
new file mode 100644
index 000000000..c02390b5a
--- /dev/null
+++ b/docs/source/installation/installation-production.rst
@@ -0,0 +1,328 @@
+.. _installation-production:
+
+Install Chill for production with or without adding personal features
+#####################################################################
+
+Chill is a set of "bundles" for a symfony app.
+
+To run Chill in production or add new features to it (without merging those features to the chill core), you must create
+a symfony app, and eventually add those features into your app.
+
+Once you are happy with the configuration, `you should follow the dedicated instructions of how to go into production for
+Symfony apps `_.
+
+Install a new app
+=================
+
+Initialize project and dependencies
+-----------------------------------
+
+.. code-block:: bash
+
+ symfony new --version=5.4 my_chill_project
+ cd my_chill_project
+
+We strongly encourage you to initialize a git repository at this step, to track further changes.
+
+.. code-block:: bash
+
+ # add the flex endpoints required for custom recipes
+ cat <<< "$(jq '.extra.symfony += {"endpoint": ["flex://defaults", "https://gitlab.com/api/v4/projects/57371968/repository/files/index.json/raw?ref=main"]}' composer.json)" > composer.json
+ # install chill and some dependencies
+ # TODO fix the suffix "alpha1" and replace by ^3.0.0 when version 3.0.0 will be released
+ symfony composer require chill-project/chill-bundles v3.0.0-RC3 champs-libres/wopi-lib dev-master@dev champs-libres/wopi-bundle dev-master@dev
+
+We encourage you to accept the inclusion of the "Docker configuration from recipes": this is the documented way to run the database.
+You must also accept to configure recipes from the contrib repository, unless you want to configure the bundles manually).
+
+.. code-block:: bash
+
+ # fix some configuration
+ ./post-install-chill.sh
+ # install node dependencies
+ yarn install
+ # and compile assets
+ yarn run encore production
+
+.. note::
+
+ If you encounter this error during assets compilation (:code:`yarn run encore production`) (repeated multiple times):
+
+ .. code-block:: txt
+
+ [tsl] ERROR in /tmp/chill/v1/public/bundles/chillcalendar/types.ts(2,65)
+ TS2307: Cannot find module '../../../ChillMainBundle/Resources/public/types' or its corresponding type declarations.
+
+ run:
+
+ .. code-block:: bash
+
+ rm -rf public/bundles/*
+
+ Then restart the compilation of assets (:code:```yarn run encore production```)
+
+Configure your project
+----------------------
+
+You should read the configuration files in :code:`chill/config/packages` carefully, especially if you have
+custom developments. But most of the time, this should be fine.
+
+You have to configure some local variables, which are described in the :code:`.env` file. The secrets should not be stored
+in this :code:`.env` file, but instead using the `secrets management tool `_
+or in the :code:`.env.local` file, which should not be committed to the git repository.
+
+You do not need to set variables for the smtp server, redis server and relatorio server, as they are generated automatically
+by the symfony server, from the docker compose services.
+
+The only required variable is the :code:`ADMIN_PASSWORD`. You can generate a hashed and salted admin password using the command
+:code:`symfony console security:hash-password 'Symfony\Component\Security\Core\User\User'`. Then,
+you can either:
+
+- add this password to the :code:`.env.local` file, you must escape the character :code:`$`: if the generated password
+ is :code:`$2y$13$iyvJLuT4YEa6iWXyQV4/N.hNHpNG8kXlYDkkt5MkYy4FXcSwYAwmm`, your :code:`.env.local` file will be:
+
+ .. code-block:: env
+
+ ADMIN_PASSWORD=\$2y\$13\$iyvJLuT4YEa6iWXyQV4/N.hNHpNG8kXlYDkkt5MkYy4FXcSwYAwmm
+ # note: if you copy-paste the line above, the password will be "admin".
+
+- add the generated password to the secrets manager (**note**: you must add the generated hashed password to the secrets env,
+ not the password in clear text).
+
+- set up the jwt authentication bundle
+
+Some environment variables are available for the JWT authentication bundle in the :code:`.env` file.
+
+Prepare migrations and other tools
+----------------------------------
+
+To continue the installation process, you will have to run migrations:
+
+.. code-block:: bash
+
+ # start databases and other services
+ docker compose up -d
+ # the first start, it may last some seconds, you can check with docker compose ps
+ # run migrations
+ symfony console doctrine:migrations:migrate
+ # setup messenger
+ symfony console messenger:setup-transports
+ # prepare some views
+ symfony console chill:db:sync-views
+ # generate jwt token, required for some api features (webdav access, ...)
+ symfony console lexik:jwt:generate-keypair
+
+.. warning::
+
+ If you encounter an error while running :code:`symfony console messenger:setup-transports`, you can set up the messenger
+ transport to redis, by adding this in the :code:`.env.local` or :code:`.env` file:
+
+ .. code-block:: env
+
+ MESSENGER_TRANSPORT_DSN=redis://${REDIS_HOST}:${REDIS_PORT}/messages
+
+Start your web server locally
+-----------------------------
+
+At this step, Chill will be ready to be served locally, but without any configuration. You can run the project
+locally using the `local symfony server `_:
+
+.. code-block:: bash
+
+ # see the whole possibilities at https://symfony.com/doc/current/setup/symfony_server.html
+ symfony server:start -d
+
+
+If you need to test the instance with accounts and some basic configuration, please install the fixtures (see below).
+
+
+Add capabilities for dev
+========================
+
+If you need to add custom bundles, you can develop them in the `src/` directory, like for any other symfony project. You
+can rely on the whole chill framework, meaning there is no need to add them to the original `chill-bundles`.
+
+You will require some bundles to have the following development tools:
+
+- add fixtures
+- add profiler and debug bundle
+
+Install fixtures
+----------------
+
+.. code-block:: bash
+
+ # generate fixtures for chill
+ symfony composer require --dev doctrine/doctrine-fixtures-bundle nelmio/alice
+ # now, you can generate fixtures (this will reset your database)
+ symfony console doctrine:fixtures:load
+
+This will generate user accounts, centers, and some basic configuration.
+
+The accounts created are: :code:`center a_social`, :code:`center b_social`, :code:`center a_direction`, ... The full list is
+visible in the "users" table: :code:`docker compose exec database psql -U app -c "SELECT username FROM users"`.
+
+The password is always :code:`password`.
+
+.. warning::
+
+ The fixtures are not fully functional. See the `corresponding issue `_.
+
+Add web profiler and debugger
+-----------------------------
+
+.. code-block:: bash
+
+ symfony composer require --dev symfony/web-profiler-bundle symfony/debug-bundle
+
+Working on chill bundles
+------------------------
+
+If you plan to improve the chill-bundles repository, that's great!
+
+It would be better :ref:`to follow the instruction about development `. But if those features are
+deeply linked to some dev you made in the app, it can be easier to develop within the :code:`vendor/` directory.
+
+You will have to download chill-bundles as a git repository (and not as an archive, which is barely editable).
+
+In your :code:`composer.json` file, add these lines:
+
+.. code-block:: diff
+
+ {
+ "config": {
+ + "preferred-install": {
+ + "chill-project/chill-bundles": "source",
+ "*": "dist"
+ + }
+ }
+
+Then, run :code:`symfony composer reinstall chill-project/chill-bundles` to re-install the package from source.
+
+
+Update
+======
+
+In order to update your app, you must update dependencies:
+
+- for chill-bundles, you can `set the last version `_ manually
+ in the :code:`composer.json` file, or set the version to `^3.0.0` and run :code:`symfony composer update` regularly
+- run :code:`composer update` and :code:`yarn update` to maintain your dependencies up-to-date.
+
+After each update, you must update your database schema:
+
+.. code-block:: bash
+
+ symfony console doctrine:migrations:migrate
+ symfony console chill:db:sync-views
+
+
+Commit and share your project
+=============================
+
+If multiple developers work on a project, you can commit your symfony project and share it with other people.
+
+When another developer clones your project, they will have to:
+
+- run :code:`symfony composer install` and :code:`yarn install` to install the same dependencies as the initial developer;
+- run :code:`yarn run encore production` to compile assets;
+- copy any possible variables from the :code:`.env.local` files;
+- start the docker compose stack, using :code:`docker compose`, and run migrations, set up transports, and prepare chill db views
+ (see the corresponding command above)
+
+Operations
+==========
+
+Build assets
+------------
+
+run those commands:
+
+.. code-block:: bash
+
+ # for production (or in dev, when you don't need to work on your assets and need some speed)
+ yarn run encore production
+ # in dev, when you wan't to reload the assets on each changes
+ yarn run encore dev --watch
+
+How to execute the console ?
+----------------------------
+
+.. code-block:: bash
+
+ # start the console with all required variables
+ symfony console
+ # you can add your command after that:
+ symfony console list
+
+How to generate documents
+-------------------------
+
+Documents are generated asynchronously by `"consuming messages" `_.
+
+You must generate them using a dedicated process:
+
+.. code-block:: bash
+
+ symfony console messenger:consume async priority
+
+To avoid memory issues, we encourage you to also use the :code:`--limit` parameter of the command.
+
+How to read emails sent by the program ?
+-------------------------------------------
+
+In development, there is a built-in "mail catcher". Open it with :code:`symfony open:local:webmail`
+
+How to run cron-jobs ?
+----------------------
+
+Some commands must be executed in :ref:`cron jobs `. To execute them:
+
+.. code-block:: bash
+
+ symfony console chill:cron-job:execute
+
+What about materialized views ?
+-------------------------------
+
+There are some materialized views in chill, to speed up some complex computations in the database.
+
+In order to refresh them, run a cron job or refresh them manually in your database.
+
+
+Troubleshooting
+===============
+
+Error `An exception has been thrown during the rendering of a template ("Asset manifest file "/var/www/app/web/build/manifest.json" does not exist.").` on first run
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+Build assets, see above.
+
+Go to production
+================
+
+Currently, to run this software in production, the *state of the art* is the following :
+
+1. Run the software locally and tweak the configuration to your needs ;
+2. Build the image and store it in a private container registry.
+
+.. warning::
+
+ In production, you **must** set these variables:
+
+ * ``APP_ENV`` to ``prod``
+ * ``APP_DEBUG`` to ``false``
+
+ There are security issues if you keep the same variables as for production.
+
+
+Going further
+=============
+
+.. toctree::
+ :maxdepth: 2
+
+ prod.rst
+ load-addresses.rst
+ prod-calendar-sms-sending.rst
+ msgraph-configure.rst