diff --git a/.gitignore b/.gitignore
index c75eecc..6a2fe92 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-/public
+/public/*
diff --git a/content/donate.md b/content/donate.md
index 1925836..cb38bc4 100644
--- a/content/donate.md
+++ b/content/donate.md
@@ -30,8 +30,10 @@ de leur temps sur le forum et la liste de diffusion ♥.
Vos dons financiers pour supporter le coût du serveur, une 60aine d'€ / an
auprès d'obsd.ams, peuvent être fait par le moyen de :
-- [Liberapay](https://liberapay.com/OpenBSD-fr/donate)
+- [Liberapay][1]
-
+[][1]
---
+
+[1]: https://liberapay.com/OpenBSD-fr/donate
diff --git a/deploy.bash b/deploy.bash
new file mode 100755
index 0000000..d2aa184
--- /dev/null
+++ b/deploy.bash
@@ -0,0 +1,186 @@
+#!/bin/bash
+#set -x
+[ -n "$TERM" ] && clear
+###
+#
+# Author: Stéphane HUC
+# mail: devs@stephane-huc.net
+# gpg:fingerprint: CE2C CF7C AB68 0329 0D20 5F49 6135 D440 4D44 BD58
+#
+# License: BSD Simplified
+#
+# Github:
+#
+# Date: 2020/12/20
+#
+###
+#
+# USE: ./deploy
+#
+###
+#
+# Need software:
+# - brotli : compression format .br
+# - sshfs + rsync
+# - lftp (solution de repli)
+#
+###
+
+ROOT="$(dirname "$(readlink -f -- "$0")")"
+
+id='obsd4a'
+host='djebeltoubkal.linuxmario.net'
+#passwd='TfpLLyC22fbcA3Sm'
+port=22
+
+### the directory where your web site files should go
+## dir_dist: relative to chroot SSH
+dir_dist="/var/www/htdocs/www.openbsd.fr.eu.org/"
+dir_local="$ROOT/public/"
+dir_mount="$HOME/servers/${host}/"
+
+email="red+bckp-ebnh@huc.fr.eu.org"
+
+rsync_opts="--human-readable --progress --stats "
+
+
+################################################################################
+###
+##
+# Fonctions
+##
+###
+################################################################################
+
+get_status() {
+
+ case "$status" in
+ 0) mssg="Succès" ;;
+ 1) mssg="Erreur de syntaxe ou d'utilisation" ;;
+ 2) mssg="Incompatibilité de protocole" ;;
+ 3) mssg="Erreurs de sélection d'entrée ou de sortie des fichiers ou des répertoires" ;;
+ 4) mssg="Action demandée non prise en charge : une tentative de manipulation de fichiers 64 bits a été effectuée sur une plate-forme qui ne peut pas les prendre en charge ; ou une option a été spécifiée qui est pris en charge par le client et non par le serveur." ;;
+ 5) mssg="Erreur de démarrage du protocole client-serveur" ;;
+ 6) mssg="Le service est incapable d'ajouter au fichier journal" ;;
+ 10) mssg="Erreur dans le socket I/O" ;;
+ 11) mssg="Erreur dans le fichier I/O" ;;
+ 12) mssg="Erreur dans le flux de données du protocole rsync" ;;
+ 13) mssg="Erreurs de diagnostic du programme" ;;
+ 14) mssg="Erreur dans le code IPC" ;;
+ 20) mssg="SIGUSR1 ou SIGINT reçus" ;;
+ 21) mssg="Une erreur est retournée par waitpid()" ;;
+ 22) mssg="Erreur lors de l'allocation des mémoires tampons principales" ;;
+ 23) mssg="Transfert partiel dû à une erreur";;
+ 24) mssg="Transfert partiel dû à la disparition des fichiers source" ;;
+ 25) mssg="La limite --max-delete a arrêté les suppressions" ;;
+ 30) mssg="Délai d'attente pour l'envoi ou la réception de données" ;;
+ 35) mssg="Délai d'attente pour la connexion du démon" ;;
+ *) mssg="Code inconnu !" ;;
+ esac
+
+ #[ -z "$IS_CRON" ] && zenotify "Rsync: $choice!" "Rsync: $choice ; status: $mssg!"
+
+ if [ "${status}" -eq 0 ]; then
+ mssg="$0::Rsync for ${dir_local}, ended with success!"
+ else
+ mssg="$0::Rsync Error ${status} on execution for ${dir}, with message: ${mssg}!"
+ fi
+
+ logger "$mssg"
+ printf '%s\n' "$mssg" | mail -s "$(hostname): Backup Review" $email
+
+ unset mssg status
+
+}
+
+_del_gz() {
+ cd "${dir_local}" || exit 1
+ find . -type f -a \( -name "*.br" -o -name "*.gz" \) -delete
+ cd "$ROOT" || exit 1
+}
+
+# Compress all thoses datas files.
+_gz() {
+ cd "${dir_local}" || exit 1
+ find . -type f -size +1024c -a \( \
+ -name "*.css" -o -name "*.html" -o -name "*.js" -o -name "*.json" \
+ -o -name "*.svg" -o -name "*.txt" -o -name "*.xml" \
+ \) | while read -r line; do echo "Compress ${line}"; brotli -Z "${line}"; gzip -9 -f < "${line}" > "${line}.gz"; done
+ #| while read -r file; do gzip -9 -f -v "${file}"; done
+ cd "$ROOT" || exit 1
+}
+
+_lftp() {
+ #/usr/local/bin/lftp -e "mirror -e -R ${dir_local} ${dir_dist}; quit" -p $port sftp://${id}@${host}
+ lftp -e "set ftp:ssl-allow no; mirror -e -R ${dir_local} ${dir_dist}; quit;" ftp://${id}:${passwd}@${host}
+}
+
+main() {
+ _minify
+ sleep 1
+
+ _del_gz
+ sleep 1
+ _webp
+ sleep 1
+
+ hugo --gc
+ status="$?"
+
+ if [ "${status}" -eq 0 ]; then
+ sleep 1
+ _gz
+ sleep 1
+
+ if _mount; then
+ _rsync
+ _umount
+
+ ##else
+ ## _lftp
+
+ fi
+ fi
+}
+
+_minify() {
+ /home/zou/Projets/outils/minify.bash "$ROOT/static"
+}
+
+_mount() {
+ [ ! -d "${dir_mount}" ] && mkdir -p "${dir_mount}"
+ #[ -d "${dir_mount}" ] && sshfs -C -p $port -o allow_other -o uid=$(id -u $USER) -o gid=$(id -g $USER) ${id}@${host}:${dir_dist} "${dir_mount}"
+ [ -d "${dir_mount}" ] && sshfs -C -p $port -o uid=$(id -u $USER) -o gid=$(id -g $USER) ${id}@${host}:${dir_dist} "${dir_mount}"
+}
+
+_rsync() {
+
+ cd "${dir_local}" || exit
+ rsync -av --delete $rsync_opts "." "${dir_mount}"
+ status="$?"
+ get_status
+ cd "$ROOT" || exit 1
+
+}
+
+_umount() {
+ fusermount -u "${dir_mount}"
+}
+
+_webp() {
+ cd "${ROOT}/static" || exit 1
+ find . -type f -a \( \
+ -name "*.gif" -o -name '*.jpg' -o -name '*.jpeg' -o -name '*.png' \
+ \) | while read -r file; do if [ ! -f "${file}.webp" ]; then cwebp "${file}" -exact -lossless -o "${file}.webp"; fi; done
+ cd "$ROOT" || exit 1
+}
+
+################################################################################
+###
+##
+# Execution
+##
+###
+################################################################################
+
+main
diff --git a/public/404.html.br b/public/404.html.br
new file mode 100644
index 0000000..7684f1c
Binary files /dev/null and b/public/404.html.br differ
diff --git a/public/404.html.gz b/public/404.html.gz
new file mode 100644
index 0000000..067b4e3
Binary files /dev/null and b/public/404.html.gz differ
diff --git a/public/Puffy.svg.br b/public/Puffy.svg.br
new file mode 100644
index 0000000..85d7547
Binary files /dev/null and b/public/Puffy.svg.br differ
diff --git a/public/Puffy.svg.gz b/public/Puffy.svg.gz
new file mode 100644
index 0000000..a58582e
Binary files /dev/null and b/public/Puffy.svg.gz differ
diff --git a/public/about/index.html b/public/about/index.html
index 917f1f6..4a7dd22 100644
--- a/public/about/index.html
+++ b/public/about/index.html
@@ -18,7 +18,7 @@
-
+
@@ -428,7 +428,7 @@ virtuelle louée chez