diff --git a/.gitignore b/.gitignore
index 762eb259b73cd576e09572fe953ff5fb12cbc422..e55c844a49254b83d82d38ca8e7a3ee9b23165a2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
+/public/
+/build/
 
 env/
 *.o
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..8cc1f4c8e2a8c4cbecbd6af3f7b6343b90bd5d19
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,16 @@
+default:
+  image: python:3.12
+
+# https://git.xfel.eu/help/user/project/pages/getting_started/pages_from_scratch.md
+# The job needs to be named pages (in Gitlab 17.3)
+pages:
+  script:
+    # Build HTML (here using Sphinx, could be any static site generator)
+    # Output directory needs to be called 'public' (?)
+    - pip install sphinx==8.1.3
+    - sphinx-build source public
+  artifacts:
+    paths:
+      - public
+  # From Gitlab 17.6, specify this (job name no longer matters)
+  #pages: true
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..b9fa825763f21a1574d394ce5d58b8b4c25b5b8f
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,21 @@
+# Minimal makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line, and also
+# from the environment for the first two.
+SPHINXOPTS    ?=
+SPHINXBUILD   ?= sphinx-build
+SOURCEDIR     = source
+BUILDDIR      = build
+
+# Put it first so that "make" without argument is like "make help".
+help:
+	@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+
+.PHONY: help Makefile
+
+# Catch-all target: route all unknown targets to Sphinx using the new
+# "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
+%: Makefile
+	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+
diff --git a/make.bat b/make.bat
new file mode 100644
index 0000000000000000000000000000000000000000..bf7f1107fe3781dbff31bf13056919e112ccd391
--- /dev/null
+++ b/make.bat
@@ -0,0 +1,37 @@
+@ECHO OFF
+
+pushd %~dp0
+
+
+REM Command file for Sphinx documentation
+
+if "%SPHINXBUILD%" == "" (
+	set SPHINXBUILD=sphinx-build
+)
+set SOURCEDIR=source
+set BUILDDIR=build
+
+%SPHINXBUILD% >NUL 2>NUL
+if errorlevel 9009 (
+	echo.
+	echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
+	echo.installed, then set the SPHINXBUILD environment variable to point
+	echo.to the full path of the 'sphinx-build' executable. Alternatively you
+	echo.may add the Sphinx directory to PATH.
+	echo.
+	echo.If you don't have Sphinx installed, grab it from
+
+	echo.https://www.sphinx-doc.org/
+	exit /b 1
+)
+
+if "%1" == "" goto help
+
+%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
+goto end
+
+:help
+%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
+
+:end
+popd
diff --git a/source/conf.py b/source/conf.py
new file mode 100644
index 0000000000000000000000000000000000000000..327294b4fbbe083fd58eb9359f19face06720182
--- /dev/null
+++ b/source/conf.py
@@ -0,0 +1,27 @@
+# Configuration file for the Sphinx documentation builder.
+#
+# For the full list of built-in configuration values, see the documentation:
+# https://www.sphinx-doc.org/en/master/usage/configuration.html
+
+# -- Project information -----------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
+
+project = 'Hello Gitlab Pages'
+copyright = '2024, Thomas Kluyver'
+author = 'Thomas Kluyver'
+
+# -- General configuration ---------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
+
+extensions = []
+
+templates_path = ['_templates']
+exclude_patterns = []
+
+
+
+# -- Options for HTML output -------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
+
+html_theme = 'alabaster'
+html_static_path = ['_static']
diff --git a/source/index.rst b/source/index.rst
new file mode 100644
index 0000000000000000000000000000000000000000..0706d842b2857b55f92e0dc1fee05bc3c7059107
--- /dev/null
+++ b/source/index.rst
@@ -0,0 +1,17 @@
+.. Hello Gitlab Pages documentation master file, created by
+   sphinx-quickstart on Thu Dec 12 10:06:22 2024.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+Hello Gitlab Pages documentation
+================================
+
+Add your content using ``reStructuredText`` syntax. See the
+`reStructuredText <https://www.sphinx-doc.org/en/master/usage/restructuredtext/index.html>`_
+documentation for details.
+
+
+.. toctree::
+   :maxdepth: 2
+   :caption: Contents:
+