diff --git a/artwork/favicon-closed.svg b/artwork/favicon-closed.svg
new file mode 100644
index 0000000..7033a3e
--- /dev/null
+++ b/artwork/favicon-closed.svg
@@ -0,0 +1,84 @@
+
+
+
+
diff --git a/artwork/favicon-open.svg b/artwork/favicon-open.svg
new file mode 100644
index 0000000..51956b9
--- /dev/null
+++ b/artwork/favicon-open.svg
@@ -0,0 +1,63 @@
+
+
diff --git a/public/favicons/closed-16x16.png b/public/favicons/closed-16x16.png
new file mode 100644
index 0000000..8468735
Binary files /dev/null and b/public/favicons/closed-16x16.png differ
diff --git a/public/favicons/closed-32x32.png b/public/favicons/closed-32x32.png
new file mode 100644
index 0000000..5ad9afd
Binary files /dev/null and b/public/favicons/closed-32x32.png differ
diff --git a/public/favicons/closed-96x96.png b/public/favicons/closed-96x96.png
new file mode 100644
index 0000000..90ae5cb
Binary files /dev/null and b/public/favicons/closed-96x96.png differ
diff --git a/public/favicons/open-16x16.png b/public/favicons/open-16x16.png
new file mode 100644
index 0000000..1281049
Binary files /dev/null and b/public/favicons/open-16x16.png differ
diff --git a/public/favicons/open-32x32.png b/public/favicons/open-32x32.png
new file mode 100644
index 0000000..bf39414
Binary files /dev/null and b/public/favicons/open-32x32.png differ
diff --git a/public/favicons/open-96x96.png b/public/favicons/open-96x96.png
new file mode 100644
index 0000000..476f461
Binary files /dev/null and b/public/favicons/open-96x96.png differ
diff --git a/scripts/generate-favicons.sh b/scripts/generate-favicons.sh
new file mode 100755
index 0000000..3a2b9fe
--- /dev/null
+++ b/scripts/generate-favicons.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+if [[ $# -lt 2 ]]; then
+ echo "Usage: $0 SOURCE PREFIX" >&2
+ exit 1
+fi
+
+SOURCE=$1
+PREFIX=$2
+SUFFIX=.png
+SIZES=(16x16 32x32 96x96)
+
+for size in "${SIZES[@]}"; do
+ target="${PREFIX}${size}${SUFFIX}"
+ convert -background none "$SOURCE" -resize "$size" "$target"
+ optipng "$target"
+done