diff --git a/scripts/03_optimize_images.sh b/scripts/03_optimize_images.sh
index 419bf99bfb7262d398666d7d213c185b8d5b3844..57ac987adfea9388144045755da6d6df5de73c82 100755
--- a/scripts/03_optimize_images.sh
+++ b/scripts/03_optimize_images.sh
@@ -16,11 +16,14 @@ CONVERT_OPTIONS="-alpha off +dither -colors 256 -depth 4"
 
 OPTIPNG_OPTIONS="-preserve -quiet -o7"
 
-# delete empty/temp files
+echo "Cleaning empty/temp files..."
 find "${IMAGES_CACHE_FOLDER}" -type f -name "*.png" -empty -exec rm {} \;
 find "${IMAGES_CACHE_FOLDER}" -type f -name "*.tmp*" -exec rm {} \;
 find "${IMAGES_CACHE_FOLDER}" -type d -empty -exec rm -rf {} \;
 
+echo "Cleaning existing optimized images..."
+find "${IMAGES_OPTIMIZED_FOLDER}" -type f -name "*.png" -exec rm {} \;
+
 IMAGES="$(find "${IMAGES_SELECTED_FOLDER}" -type f -name "*.png" | sort)"
 
 while read -r INPUT_FILE; do
diff --git a/scripts/04_build_images_board.sh b/scripts/04_build_images_board.sh
new file mode 100755
index 0000000000000000000000000000000000000000..2650396a9aec3de574e6e19dc13d9553fccbdd1f
--- /dev/null
+++ b/scripts/04_build_images_board.sh
@@ -0,0 +1,53 @@
+#!/usr/bin/env bash
+
+command -v jq >/dev/null 2>&1 || { echo >&2 "I require jq (json parser) but it's not installed. Aborting."; exit 1; }
+
+CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
+BASE_DIR="$(dirname "${CURRENT_DIR}")"
+
+
+IMAGES_CACHE_FOLDER="${CURRENT_DIR}/cache"
+IMAGES_OPTIMIZED_FOLDER="${IMAGES_CACHE_FOLDER}/optimized"
+OUTPUT_IMAGES_BOARD_FILE="${IMAGES_CACHE_FOLDER}/images_board.html"
+touch "${OUTPUT_IMAGES_BOARD_FILE}"
+
+echo "Cleaning empty/temp files..."
+find "${IMAGES_OPTIMIZED_FOLDER}" -type f -name "*.png" -empty -exec rm {} \;
+find "${IMAGES_OPTIMIZED_FOLDER}" -type f -name "*.tmp*" -exec rm {} \;
+find "${IMAGES_OPTIMIZED_FOLDER}" -type d -empty -exec rm -rf {} \;
+
+echo "Building images board file..."
+FILES="$(find "${IMAGES_OPTIMIZED_FOLDER}" -type f -name "*.png" | sed "s|^${IMAGES_OPTIMIZED_FOLDER}/||g" | sort)"
+KEYWORDS="$(echo "${FILES}" | cut -d'/' -f1 | sort | uniq)"
+
+echo "<!DOCTYPE html>" > "${OUTPUT_IMAGES_BOARD_FILE}"
+echo "<html lang=\"en\">" >> "${OUTPUT_IMAGES_BOARD_FILE}"
+echo "  <head>" >> "${OUTPUT_IMAGES_BOARD_FILE}"
+echo "    <style>" >> "${OUTPUT_IMAGES_BOARD_FILE}"
+echo "      table { border-collapse: collapse; border: solid 2px black; width: 100%; }" >> "${OUTPUT_IMAGES_BOARD_FILE}"
+echo "      tr { }" >> "${OUTPUT_IMAGES_BOARD_FILE}"
+echo "      td { border: solid 1px black; }" >> "${OUTPUT_IMAGES_BOARD_FILE}"
+echo "      span { font-weight: bold; }" >> "${OUTPUT_IMAGES_BOARD_FILE}"
+echo "      img { border: solid 1px grey; }" >> "${OUTPUT_IMAGES_BOARD_FILE}"
+echo "    </style>" >> "${OUTPUT_IMAGES_BOARD_FILE}"
+echo "  </head>" >> "${OUTPUT_IMAGES_BOARD_FILE}"
+echo "  <body>" >> "${OUTPUT_IMAGES_BOARD_FILE}"
+echo "    <table>" >> "${OUTPUT_IMAGES_BOARD_FILE}"
+while read -r KEYWORD; do
+  if [[ -n "${KEYWORD}" ]]; then
+    echo "      <tr>" >> "${OUTPUT_IMAGES_BOARD_FILE}"
+    echo "        <td><span>${KEYWORD}</span></td>" >> "${OUTPUT_IMAGES_BOARD_FILE}"
+    FILES_KEYWORD="$(echo "${FILES}" | grep -e "^${KEYWORD}/")"
+    echo "        <td>" >> "${OUTPUT_IMAGES_BOARD_FILE}"
+    while read -r FILE; do
+      echo "          <img src=\"optimized/${FILE}\">" >> "${OUTPUT_IMAGES_BOARD_FILE}"
+    done < <(echo "${FILES_KEYWORD}")
+    echo "        </td>" >> "${OUTPUT_IMAGES_BOARD_FILE}"
+    echo "      </tr>" >> "${OUTPUT_IMAGES_BOARD_FILE}"
+  fi
+done < <(echo "${KEYWORDS}")
+echo "    </table>" >> "${OUTPUT_IMAGES_BOARD_FILE}"
+echo "  </body>" >> "${OUTPUT_IMAGES_BOARD_FILE}"
+echo "</html>" >> "${OUTPUT_IMAGES_BOARD_FILE}"
+
+echo "done."
diff --git a/scripts/04_build_assets_list.sh b/scripts/05_build_assets_list.sh
similarity index 100%
rename from scripts/04_build_assets_list.sh
rename to scripts/05_build_assets_list.sh