diff --git a/.docs/.eleventy.js b/.docs/.eleventy.js
new file mode 100644
index 0000000..87d5aa5
--- /dev/null
+++ b/.docs/.eleventy.js
@@ -0,0 +1,72 @@
+const path = require("path");
+
+const htmlentities = require("html-entities");
+const Image = require("@11ty/eleventy-img");
+
+var nextid = 0;
+
+async function shortcode_image(src, alt, classes = "") {
+ let metadata = await Image(src, {
+ widths: [300, null],
+ formats: ["avif", "jpeg"],
+ outputDir: `./_site/img/`,
+ filenameFormat: (_id, src, width, format, _options) => {
+ const extension = path.extname(src);
+ const name = path.basename(src, extension);
+ return `${name}-${width}w.${format}`;
+ }
+ });
+ console.log(metadata);
+
+ let imageAttributes = {
+ class: classes,
+ alt: htmlentities.encode(alt),
+ sizes: Object.values(metadata)[0].map((el) => `${el.width}w`).join(" "),
+ loading: "lazy",
+ decoding: "async",
+ };
+
+ // You bet we throw an error on missing alt in `imageAttributes` (alt="" works okay)
+ return Image.generateHTML(metadata, imageAttributes);
+}
+
+async function shortcode_image_url(src) {
+ let metadata = await Image(src, {
+ widths: [ null ],
+ formats: [ "jpeg" ],
+ outputDir: `./_site/img/`,
+ filenameFormat: (_id, src, width, format, _options) => {
+ const extension = path.extname(src);
+ const name = path.basename(src, extension);
+ return `${name}-${width}w.${format}`;
+ }
+ });
+ console.log(metadata);
+
+ let data = metadata.jpeg[metadata.jpeg.length - 1];
+ return data.url;
+}
+
+async function shortcode_cssbox(content, src) {
+ let idprev = `image-${nextid}`;
+ nextid += 1;
+ let idthis = `image-${nextid}`;
+ let idnext = `image-${nextid + 1}`;
+ return `
`;
+}
+
+module.exports = function(eleventyConfig) {
+ // eleventyConfig.addPassthroughCopy("images");
+ // eleventyConfig.addPassthroughCopy("css");
+ eleventyConfig.addShortcode("image", shortcode_image);
+ eleventyConfig.addJavaScriptFunction("image", shortcode_image);
+ eleventyConfig.addShortcode("image-url", shortcode_image_url);
+ eleventyConfig.addPairedShortcode("cssbox", shortcode_cssbox);
+}
diff --git a/.docs/.eleventyignore b/.docs/.eleventyignore
new file mode 100644
index 0000000..9798131
--- /dev/null
+++ b/.docs/.eleventyignore
@@ -0,0 +1 @@
+css/
diff --git a/.docs/Changelog.11tydata.json b/.docs/Changelog.11tydata.json
new file mode 100644
index 0000000..0ee657c
--- /dev/null
+++ b/.docs/Changelog.11tydata.json
@@ -0,0 +1,6 @@
+{
+ "layout": "theme.njk",
+ "title": "Changelog",
+ "tags": "navigable",
+ "date": "2002-01-01"
+}
diff --git a/.docs/Changelog.md b/.docs/Changelog.md
new file mode 120000
index 0000000..04c99a5
--- /dev/null
+++ b/.docs/Changelog.md
@@ -0,0 +1 @@
+../CHANGELOG.md
\ No newline at end of file
diff --git a/.docs/Reference.11tydata.json b/.docs/Reference.11tydata.json
new file mode 100644
index 0000000..5506455
--- /dev/null
+++ b/.docs/Reference.11tydata.json
@@ -0,0 +1,6 @@
+{
+ "layout": "theme.njk",
+ "title": "Reference",
+ "tags": "navigable",
+ "date": "2001-01-01"
+}
diff --git a/.docs/Reference.md b/.docs/Reference.md
new file mode 120000
index 0000000..8e2095a
--- /dev/null
+++ b/.docs/Reference.md
@@ -0,0 +1 @@
+../Chat-Command-Reference.md
\ No newline at end of file
diff --git a/.docs/_includes/theme.njk b/.docs/_includes/theme.njk
new file mode 100644
index 0000000..4faa0ba
--- /dev/null
+++ b/.docs/_includes/theme.njk
@@ -0,0 +1,35 @@
+---
+
+---
+
+
+
+
+ {{ title }} • WorldEditAdditions
+
+
+
+
+
+ {{ content | safe }}
+
+
+
+
diff --git a/.docs/css.njk b/.docs/css.njk
new file mode 100644
index 0000000..5c14c61
--- /dev/null
+++ b/.docs/css.njk
@@ -0,0 +1,5 @@
+---
+permalink: theme.css
+---
+{% include "css/theme.css" %}
+{% include "css/CSSBox/cssbox.css" %}
diff --git a/.docs/css/CSSBox b/.docs/css/CSSBox
new file mode 160000
index 0000000..2234546
--- /dev/null
+++ b/.docs/css/CSSBox
@@ -0,0 +1 @@
+Subproject commit 2234546c25d51770086f972b0f330d4087e7c829
diff --git a/.docs/css/theme.css b/.docs/css/theme.css
new file mode 100644
index 0000000..9dd65f3
--- /dev/null
+++ b/.docs/css/theme.css
@@ -0,0 +1,224 @@
+/* Base CSS */
+
+/*
+ * This CSS file contains (for me) logical style defaults that are easy to read.
+ *
+ * This file is quite often used as a starting point for other projects.
+ *
+ * Todo:
+ *