diff --git a/Makefile b/Makefile
index 314916d..0116587 100644
--- a/Makefile
+++ b/Makefile
@@ -67,6 +67,14 @@ uninstall: pre-requisites
rm -f $(TARGET_QUADLETS_FILES) $(TARGET_SYSTEMD_FILES) $(TARGET_CONFIG_FILES)
systemctl daemon-reload
+tail-logs: pre-requisites
+ @run() { echo $$*; "$$@"; }; \
+ declare -a journalctl_args=( -f ); \
+ for unit in $(SYSTEMD_MAIN_UNIT_NAMES) $(QUADLET_UNIT_NAMES); do \
+ journalctl_args+=( -u "$$unit" ); \
+ done; \
+ run journalctl "$${journalctl_args[@]}"
+
clean: pre-requisites
@run() { echo $$*; "$$@"; }; \
read -p "This will remove all data of '$(PROJECT_NAME)'. Are you sure? (only 'yes' is accepted) " ans; \
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..860f757
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# Podman Quadlet Cookbook
+
+[Podman Quadlets](https://docs.podman.io/en/latest/markdown/podman-systemd.unit.5.html) are awesome, but vastly under-utilized in the Open Source communities.
+This repository gathers all the recipes (hence the name "Cookbook") to deploy Open Source technologies using Podman Quadlets.
+
+## Current cookbooks
+
+- [nginx](nginx/): starts Nginx, content is initialized / updated from a GIT repository
+- [postgresql](postgresql/): starts a PostgreSQL server, handles automated major upgrades, periodic backup and initialization of the database from the last backup.
+
+## License
+
+MIT
diff --git a/nginx/README.md b/nginx/README.md
new file mode 100644
index 0000000..db9de21
--- /dev/null
+++ b/nginx/README.md
@@ -0,0 +1,54 @@
+# Podman Quadlet: Nginx
+
+## Overview
+
+Nginx is started as a Podman Quadlet and before that, the content to serve is initialized (`git clone`) or updated (`git pull`) from a GIT repository.
+
+## Usage
+
+In a separate terminal, follow the logs.
+
+```sh
+sudo make tail-logs
+```
+
+Install the Podman Quadlets and start Nginx.
+
+```sh
+sudo make clean install
+```
+
+You should see the **nginx-init.service** cloning this git repository to fetch the content to serve.
+Then, the **nginx-server.service** should start up.
+
+You can check that the content is indeed served on port 80.
+
+```
+$ curl http://localhost/
+
+
+
+
+
+ Hello World
+
+
+ Hello World
+
+
+```
+
+Then restart the **nginx.target** unit.
+
+```sh
+sudo systemctl restart nginx.target
+```
+
+In the logs, you should see the **nginx-update.service** starting up and executing a `git pull` to update the content to serve.
+Then, the **nginx-server.service** should start up.
+
+Finally, remove the quadlets, their configuration and their data.
+
+```sh
+sudo make uninstall clean
+```
diff --git a/postgresql/README.md b/postgresql/README.md
new file mode 100644
index 0000000..f2ac77b
--- /dev/null
+++ b/postgresql/README.md
@@ -0,0 +1,93 @@
+# Podman Quadlet: PostgreSQL
+
+## Overview
+
+PostgreSQL is started as a Podman Quadlet and before that, the database is initialized:
+
+- either from a previous backup,
+- or from scratch using SQL statements or scripts.
+
+The upgrade process between major versions is handled by a one-off job before the database server startup.
+
+Finally, a Podman Quadlet is provided to perform a backup of the database, including a simple retention policy.
+
+## Usage
+
+In a separate terminal, follow the logs.
+
+```sh
+sudo make tail-logs
+```
+
+Install the Podman Quadlets and start PostgreSQL.
+
+```sh
+sudo make clean install
+```
+
+You should see the **postgresql-set-major.service** starting up to set the symlink pointing to the PGDATA directory of the desired major version.
+Then, the **postgresql-init.service** should start up and initialize the database from scratch.
+Finally, the **postgresql-server.service** is started.
+
+Restart the **postgresql.target** unit.
+
+```sh
+sudo systemctl restart postgresql.target
+```
+
+You should see in the logs that the **postgresql-init.service** is skipped (because the database is already initialized) and the **postgresql-server.service** unit is started.
+
+Increment the PostgreSQL major version number.
+
+```sh
+awk -i inplace -F= '/PG_MAJOR=/ { $2=$2+1; print $1"="$2; next } 1' /etc/quadlets/postgresql/config.env
+```
+
+Restart the **postgresql.target** unit.
+
+```sh
+sudo systemctl restart postgresql.target
+```
+
+In the logs, you should see that the **postgresql-upgrade.service** converts the database files to the new major version.
+
+Make backups of the database.
+
+```sh
+for i in $(seq 1 10); do
+ sudo systemctl start postgresql-backup.service
+ sleep 1
+done
+```
+
+In the logs, you should see ten runs of the **postgresql-backup.service** unit.
+And in the three last runs, the retention policy should be kicked in to clean up old backup files.
+
+Now, stop the database server.
+
+```sh
+sudo systemctl stop postgresql.target
+```
+
+Remove all the PostgreSQL files (except the backups).
+
+```sh
+sudo find /var/lib/quadlets/postgresql/ -maxdepth 1 -mindepth 1 \! -name backup -exec rm -rf '{}' \;
+```
+
+Confirm there is no more data in `/var/lib/quadlets/postgresql`.
+
+```
+$ sudo ls -l /var/lib/quadlets/postgresql
+total 0
+drwx------. 1 avahi avahi 38 1 déc. 21:04 backup
+```
+
+Start the PostgreSQL database server.
+
+```sh
+sudo systemctl start postgresql.target
+```
+
+In the logs, you should see the **postgresql-init.service** unit restoring the database from the last backup.
+