diff --git a/Makefile b/Makefile
index 9ecc847..e48ea8c 100644
--- a/Makefile
+++ b/Makefile
@@ -47,9 +47,11 @@ DST_PANDOC_FILES ?= $(patsubst %$(EXT),%.html, \
$(SRC_PANDOC_FILES)))
PANDOC_TEMPLATE ?= templates/post.html
PANDOC_LUA_FILTER ?= engine/links-to-html.lua
+PANDOC_LUA_FILTER_IMG ?= engine/img-to-webp.lua
+PANDOC_LUA_METAS ?= engine/metas.lua
MK_HTML := engine/mk-html.sh
-PANDOC := $(MK_HTML) $(PANDOC_TEMPLATE) $(PANDOC_LUA_FILTER)
-$(DST_DIR)/%.html: $(SRC_DIR)/%.org $(PANDOC_TEMPLATE) $(PANDOC_LUA_FILTER) $(MK_HTML) $(ENV_VARS)
+PANDOC := $(MK_HTML) $(PANDOC_TEMPLATE) $(PANDOC_LUA_FILTER) $(PANDOC_LUA_FILTER_IMG) $(PANDOC_LUA_METAS)
+$(DST_DIR)/%.html: $(SRC_DIR)/%.org $(PANDOC_TEMPLATE) $(PANDOC_LUA_FILTER) $(PANDOC_LUA_FILTER_IMG) $(PANDOC_LUA_METAS) $(MK_HTML) $(ENV_VARS)
@mkdir -p "$(dir $@)"
$(PANDOC) "$<" "$@.tmp"
minify --mime text/html "$@.tmp" > "$@"
diff --git a/engine/img-to-webp.lua b/engine/img-to-webp.lua
new file mode 100644
index 0000000..85e997e
--- /dev/null
+++ b/engine/img-to-webp.lua
@@ -0,0 +1,9 @@
+-- img-to-webp.lua
+function Image(el)
+ local fileext = el.src:match("%.[^%.]+$");
+ -- DEBUG -- print("LUA IMG: ", fileext);
+ if ( fileext == ".jpg" or fileext == ".png" or fileext == ".jpeg" ) then
+ el.src = el.src .. ".webp"
+ end
+ return el
+end
diff --git a/engine/metas.lua b/engine/metas.lua
new file mode 100644
index 0000000..701c11d
--- /dev/null
+++ b/engine/metas.lua
@@ -0,0 +1,22 @@
+-- intermediate store for variables and their values
+local variables = {}
+
+--- Function called for each raw block element.
+function RawBlock (raw)
+ -- Don't do anything unless the block contains *org* markup.
+ if raw.format ~= 'org' then return nil end
+
+ -- extract variable name and value
+ local name, value = raw.text:match '#%+(%w+):%s*(.+)$'
+ if name and value then
+ variables[name] = value
+ end
+end
+
+-- Add the extracted variables to the document's metadata.
+function Meta (meta)
+ for name, value in pairs(variables) do
+ meta[name] = value
+ end
+ return meta
+end
diff --git a/engine/mk-html.sh b/engine/mk-html.sh
index 5fbce41..e58953d 100755
--- a/engine/mk-html.sh
+++ b/engine/mk-html.sh
@@ -4,8 +4,10 @@ set -eu
cd "$(git rev-parse --show-toplevel)" || exit 1
template="$1"
luafilter="$2"
-orgfile="$3"
-htmlfile="$4"
+luafilterimg="$3"
+luametas="$4"
+orgfile="$5"
+htmlfile="$6"
tocoption=""
if grep -ie '^#+options:' "$orgfile" | grep 'toc:t'>/dev/null; then
@@ -16,6 +18,8 @@ set -x
pandoc $tocoption \
--template="$template" \
--lua-filter="$luafilter" \
+ --lua-filter="$luafilterimg" \
+ --lua-filter="$luametas" \
--mathml \
--from org \
--to html5 \
diff --git a/engine/optim-img.sh b/engine/optim-img.sh
index 6038304..62b4eb3 100755
--- a/engine/optim-img.sh
+++ b/engine/optim-img.sh
@@ -7,10 +7,18 @@ sizeof() {
stat --format="%s" "$*"
}
-convert "$src" -resize 800x800\> -quality 50 "$dst"
+
+convert "$src" -resize 800x800\> "$dst"
before=$(sizeof $src)
-after=$(sizeof $dst)
+
+if [[ "${src:e}" == "gif" ]]; then
+ after=$(sizeof $dst)
+else
+ cwebp "$dst" -quiet -o "$dst.webp"
+ after=$(sizeof $dst.webp)
+fi
+
if (( before <= after )); then
cp -f "$src" "$dst"
diff --git a/shell.nix b/shell.nix
index ffea5d8..0c3553e 100644
--- a/shell.nix
+++ b/shell.nix
@@ -24,6 +24,7 @@ pkgs.mkShell {
direnv
ghc
tmux
+ libwebp
# for emacs dev
ripgrep
nodePackages.http-server
diff --git a/src/posts/0002-troll-2/index.org b/src/posts/0002-troll-2/index.org
index 3d03428..3b46209 100644
--- a/src/posts/0002-troll-2/index.org
+++ b/src/posts/0002-troll-2/index.org
@@ -9,6 +9,8 @@
#+LANG: en
#+OPTIONS: H:5 auto-id:t
#+STARTUP: showeverything
+#+lightbk: #0f0
+#+darkbk: #080
#+html_head_extra:
#+begin_notes
diff --git a/src/posts/0019-utopia-tv-show/index.org b/src/posts/0019-utopia-tv-show/index.org
index 432d6dc..83df0f4 100644
--- a/src/posts/0019-utopia-tv-show/index.org
+++ b/src/posts/0019-utopia-tv-show/index.org
@@ -14,6 +14,8 @@
#+lang: en
#+options: auto-id:t
#+startup: showeverything
+#+lightbk: #ff0
+#+darkbk: #880
#+html_head_extra: