+[ok] Add a table for website global settings with two column: name + value
+ * Add a boolean settings to enable/disable new inscription
+[ok] Add a [is_admin] flag to [User] table
+[ok] Test when there is an SQL error (syntax error for sample)
+[ok] Drag and drop of steps and groups to define their order
+[ok] Force tags in lowercase
+[ok] Remove the given language to recipe_edit and replace it by tr (like the header)
+ [ok] List only recipe of current language
+[ok] Add support to translations.
+ * Make a Text database (a bit like d-lan.net) and think about translation.
+ * The language is stored in cookie or in user profile if the user is connected
+ * A combobox in the header shows all languages
+[ok] Set a lang cookie (when not connected)
+[ok] User can choose language
+[ok] Implement:
+ .service(services::edit_recipe)
+ .service(services::new_recipe)
+ .service(services::webapi::set_recipe_title)
+ .service(services::webapi::set_recipe_description)
+[ok] Review the recipe model (SQL)
+[ok] Finish updating profile
+ [ok] check password and message error
+ [ok] user can change email: add a field + revalidation of new email
+[ok] Try using WASM for all the client logic (test on editing/creating a recipe)
+[ok] How to log error to journalctl or elsewhere + debug log?
+[ok] Clean the old code + commit
+[ok] Reactivate sign up/in/out
+[ok] Change all id to i64
+[ok] Check cookie lifetime -> Session by default
+[ok] Asynchonous email sending and database requests
+ [ok] Try to return Result for async routes (and watch what is printed in log)
+ [ok] Then try to make async database calls
+ [ok] Set email sending as async and show a waiter when sending email. Handle (and test) a timeout (~10s). -> (timeout put to 60s)