diff --git a/Makefile b/Makefile
index d4bb2cbb9eddb1bb1b4f366623044af8e4830919..60a5867b8d2ab890dda9f535115e6fc9fab4a1a7 100644
--- a/Makefile
+++ b/Makefile
@@ -14,6 +14,9 @@ help:
 
 .PHONY: help Makefile
 
+livehtml:
+	sphinx-autobuild "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+
 # Catch-all target: route all unknown targets to Sphinx using the new
 # "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
 %: Makefile
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000000000000000000000000000000000000..22d2b2e6190b1be8bb56716492ee00108d23590c
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,33 @@
+accessible-pygments==0.0.4
+alabaster==0.7.16
+Babel==2.14.0
+beautifulsoup4==4.12.3
+certifi==2024.2.2
+charset-normalizer==3.3.2
+colorama==0.4.6
+docutils==0.20.1
+idna==3.6
+imagesize==1.4.1
+Jinja2==3.1.3
+livereload==2.6.3
+MarkupSafe==2.1.5
+packaging==23.2
+pydata-sphinx-theme==0.15.2
+Pygments==2.17.2
+requests==2.31.0
+six==1.16.0
+snowballstemmer==2.2.0
+soupsieve==2.5
+Sphinx==7.2.6
+sphinx-autobuild==2021.3.14
+sphinx_design==0.5.0
+sphinxcontrib-applehelp==1.0.8
+sphinxcontrib-devhelp==1.0.6
+sphinxcontrib-htmlhelp==2.0.5
+sphinxcontrib-jsmath==1.0.1
+sphinxcontrib-qthelp==1.0.7
+sphinxcontrib-serializinghtml==1.1.10
+sphinxcontrib-youtube==1.4.1
+tornado==6.4
+typing_extensions==4.9.0
+urllib3==2.2.0
diff --git a/venv-build-env.sh b/venv-build-env.sh
new file mode 100644
index 0000000000000000000000000000000000000000..c1f63c386805a2615782ca291eb7654e4171e9cd
--- /dev/null
+++ b/venv-build-env.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+if [ ! -e ./.venv ]; then
+   python3 -m venv .venv
+fi
+source ./.venv/bin/activate
+pip install --upgrade pip
+pip install -r requirements.txt