diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..8947740d86a449054ecafef61cc2969b47bbe6d7
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,25 @@
+FROM ubuntu:24.04
+WORKDIR /usr/local/bin
+
+RUN apt-get update && apt-get install -y python3.8 python3-pip pipx curl pandoc inotify-tools
+RUN pipx install poetry==2.0.0
+# Ensure pipx installs globally and the path is available
+ENV PIPX_BIN_DIR=/root/.local/bin
+ENV PATH=$PIPX_BIN_DIR:$PATH
+#texlive-latex-base texlive-fonts-recommended texlive-fonts-extra texlive-latex-extra curl
+# RUN python3 -m pip install poetry
+RUN curl -L -o decker https://github.com/decker-edu/decker/releases/download/latest/decker-latest-Linux-X64-3f4150d61ca167361b02665da969da769ca98e7c
+RUN chmod +x decker
+
+WORKDIR /usr/app
+VOLUME /usr/app/slides
+COPY . .
+RUN chmod +x entrypoint.sh
+
+EXPOSE 8888
+
+CMD [ "/usr/app/entrypoint.sh" ]
+# RUN /usr/local/bin/decker --server
+# RUN pandoc -t beamer output/fvv-folien-deck.md -o output/public/fvv-folien.pdf
+# RUN decker decks
+#
diff --git a/build.sh b/build.sh
index ca9bd1354eff553708fd39e2ec96a8a79573c681..c626eb239e467ce1893544c599be565c6a69a326 100755
--- a/build.sh
+++ b/build.sh
@@ -8,7 +8,7 @@ echo "This is just a temporary directory for building the slides. This should be
 # Run python rendering
 echo "Install the python package."
 poetry install
-poetry run python render.py
+poetry run python $(pwd)/render.py
 
 # Merge all slide chunks into one output deck
 echo "Merge all slide chunks into one with the support of Pandoc."
diff --git a/entrypoint.sh b/entrypoint.sh
new file mode 100755
index 0000000000000000000000000000000000000000..da69ac9eec38f2ca289893eef3f3b6cb13cdf83b
--- /dev/null
+++ b/entrypoint.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+set -e
+
+echo "Starting initial build..."
+./build.sh
+
+echo "Starting Decker server in background..."
+cd output
+/usr/local/bin/decker --server &
+DECKER_PID=$!
+cd ..
+
+echo "Watching for slide changes..."
+while inotifywait -r -e modify,create,delete slides/; do
+    echo "Change detected. Rebuilding..."
+    ./build.sh
+done
+
diff --git a/poetry.lock b/poetry.lock
index f8bdf1ee066f6fcf1116d915949c6e679f633f47..adc7c0e9c13f8df607c19652162cf2aa1ce317e0 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -154,5 +154,5 @@ files = [
 
 [metadata]
 lock-version = "2.1"
-python-versions = ">=3.13"
-content-hash = "d989bba1d7bebb6c4da3b16985fd48500cce9011e55d875f48d7cae4c85b2c77"
+python-versions = ">=3.12"
+content-hash = "254a91d1ab66eefe761d354d9272529d8dbb4173136ee3ae72adc80e50e7bc7d"
diff --git a/pyproject.toml b/pyproject.toml
index 8fc69925a4622d6e05d8f47e12da02305ff9461a..58f86eefeb228d499a274c93417360ea942edb86 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -6,7 +6,7 @@ authors = [
     {name = "Robin Stecher"}
 ]
 readme = "README.md"
-requires-python = ">=3.13"
+requires-python = ">=3.12"
 dependencies = [
     "jinja2 (>=3.1.6,<4.0.0)",
     "pyyaml (>=6.0.2,<7.0.0)"