diff --git a/images-nohash/matrix-badge.svg b/images-nohash/matrix-badge.svg
new file mode 100644
index 0000000000000000000000000000000000000000..9fd48023c7440c7f79c1d5ffa0c91ceac5badb66
--- /dev/null
+++ b/images-nohash/matrix-badge.svg
@@ -0,0 +1,20 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="99" height="20">
+<linearGradient id="b" x2="0" y2="100%">
+  <stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
+  <stop offset="1" stop-opacity=".1"/>
+</linearGradient>
+<mask id="a">
+  <rect width="99" height="20" rx="3" fill="#fff"/>
+</mask>
+<g mask="url(#a)">
+  <path fill="#555" d="M0 0h42v20H0z"/>
+  <path fill="#46BC99" d="M42 0h59v20H42z"/>
+  <path fill="url(#b)" d="M0 0h99v20H0z"/>
+</g>
+<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
+  <text x="21" y="15" fill="#010101" fill-opacity=".3">matrix</text>
+  <text x="21" y="14">matrix</text>
+  <text x="68.5" y="15" fill="#010101" fill-opacity=".3">join chat</text>
+  <text x="68.5" y="14">join chat</text>
+</g>
+</svg>
diff --git a/package.json b/package.json
index ff7d3a35ed75eaee37a157d31c7b1796d6931e44..93ff6d6c4c1cb92eda93f9d17f1b32bea87380f4 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "matrix.to",
-  "version": "1.2.8",
+  "version": "1.2.9",
   "type": "module",
   "license": "Apache-2.0",
   "engines": {
diff --git a/scripts/build.js b/scripts/build.js
index 498bab3e5696903b7885821ff6d95fecc5bb2fcf..5bd584a46e0a2b16f8ef12da08d06187e7986d62 100644
--- a/scripts/build.js
+++ b/scripts/build.js
@@ -52,6 +52,7 @@ async function build() {
     await removeDirIfExists(targetDir);
     await fs.mkdir(targetDir);
     await fs.mkdir(path.join(targetDir, "images"));
+    await fs.mkdir(path.join(targetDir, "img")); // contains the badge image for historical reasons, unhashed
     await fs.mkdir(path.join(targetDir, ".well-known"));
     const assets = new AssetMap(targetDir);
     const imageAssets = await copyFolder(path.join(projectDir, "images"), path.join(targetDir, "images"));
@@ -60,6 +61,7 @@ async function build() {
     await assets.write(`bundle.css`, await buildCss("css/main.css", targetDir, assets));
     await assets.writeUnhashed(".well-known/apple-app-site-association", buildAppleAssociatedAppsFile(createClients()));
     await assets.writeUnhashed("index.html", await buildHtml(assets));
+    await assets.writeUnhashed("img/matrix-badge.svg", await fs.readFile(path.join(projectDir, "images-nohash/matrix-badge.svg")));
     const globalHash = assets.hashForAll();
     console.log(`built matrix.to ${version} (${globalHash}) successfully with ${assets.size} files`);
 }