diff --git a/Dockerfile b/Dockerfile
index 6d9da36..32e9f33 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -40,9 +40,19 @@ ENV DATABASE_PATH=/data/kleiderboerse.sqlite \
UPLOAD_PATH=/uploads \
PYTHONUNBUFFERED=1
+# Versionsangabe für die Fusszeile. Die CI reicht Tag und Commit durch;
+# lokal bleiben beide leer und es erscheint der Build-Zeitpunkt - der
+# ändert sich bei jedem Neubau und zeigt so, ob der neue Stand läuft.
+ARG APP_VERSION=""
+ARG APP_REVISION=""
+ENV APP_VERSION="$APP_VERSION" \
+ APP_REVISION="$APP_REVISION"
+
# Nicht als root laufen. Die beiden Verzeichnisse gehören dem Dienstbenutzer,
# der Code dagegen root - so kann der Webdienst seinen eigenen Code nicht
# überschreiben.
+RUN date -u '+%d.%m.%Y %H:%M UTC' > /app/build.txt
+
RUN useradd --system --create-home --shell /usr/sbin/nologin kleider \
&& mkdir -p /data /uploads \
&& chown kleider:kleider /data /uploads
diff --git a/app/routers/pages.py b/app/routers/pages.py
index e207525..b6bef90 100644
--- a/app/routers/pages.py
+++ b/app/routers/pages.py
@@ -21,6 +21,7 @@ from app.config import einstellungen
from app.database import get_db
from app.models import Item, Status
from app.schemas import ItemAendern, ItemAnlegen
+from app.version import version_info
router = APIRouter(include_in_schema=False)
@@ -63,6 +64,7 @@ def _umgebung(request: Request, db: Session, **extra) -> dict:
"zustand_text": lambda w: ZUSTAND_TEXT.get(w, w),
"saison_text": lambda w: SAISON_TEXT.get(w, w),
"groesse_text": _groesse_text,
+ "version": version_info(),
"meldung": request.query_params.get("meldung"),
"meldung_art": request.query_params.get("art", "ok"),
**extra,
diff --git a/app/static/theme.js b/app/static/theme.js
new file mode 100644
index 0000000..431bb79
--- /dev/null
+++ b/app/static/theme.js
@@ -0,0 +1,50 @@
+/* Hell/Dunkel umschalten.
+ *
+ * Diese Datei wird im
OHNE defer eingebunden. Das ist Absicht: sie
+ * muss laufen, bevor der Seiteninhalt gezeichnet wird, sonst blitzt beim
+ * Laden kurz die helle Fassung auf, obwohl dunkel eingestellt ist.
+ *
+ * Eine eigene Datei statt eines
{# Lokal ausgeliefert, nicht vom CDN: die CSP erlaubt nur script-src
- 'self', und ein CDN-Aufruf gäbe zudem die IP jedes Besuchers weiter. #}
+ 'self', und ein CDN-Aufruf gäbe die IP jedes Besuchers weiter. #}
-
+
-
+