From 7b455cd43149834ccd2163b4e5d197809bd34a37 Mon Sep 17 00:00:00 2001
From: Matthias Andreas Benkard <code@mail.matthias.benkard.de>
Date: Sun, 9 Aug 2026 08:33:37 +0200
Subject: Add a public web front end alongside the CLI

Extracts the CLI pipeline into a reusable Pipeline class and exposes it
via a dependency-free JDK HttpServer (upload form, bounded worker pool
with 503 on overload, per-request size/time limits, no persisted
uploads), plus nginx/systemd deploy templates and Impressum/Datenschutz
placeholders for public operation.

Change-Id: I6e8e7afa3c4b1082cdf9e82da0fae0b5b49470ad
---
 README.adoc | 40 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

(limited to 'README.adoc')

diff --git a/README.adoc b/README.adoc
index 77540fe..b092904 100644
--- a/README.adoc
+++ b/README.adoc
@@ -178,6 +178,46 @@ Stammfassungen woher stammen und was noch offen ist, verzeichnet
 `src/main/resources/sampledata/Landesrecht-Beispiele.adoc`.
 
 
+[[web]]
+== Web-App
+
+Neben der CLI gibt es einen eigenständigen Webserver
+(`eu.mulk.aendggner.web.WebMain`), der dieselbe Pipeline
+(`eu.mulk.aendggner.Pipeline`) über ein einfaches Upload-Formular
+zugänglich macht: Stammgesetz- und Änderungsgesetz-Datei(en) hochladen,
+Synopse erhalten. Er nutzt ausschließlich JDK-Bordmittel
+(`com.sun.net.httpserver.HttpServer`) — keine zusätzliche
+Web-Framework-Abhängigkeit — und hält keine Rechtsdaten Dritter
+serverseitig vor; hochgeladene Dateien werden nur für die Dauer der
+Anfrage als temporäre Dateien gehalten und danach sofort gelöscht.
+
+Lokal starten nach <<building,dem Bauen>> der JAR:
+
+[source,shell script]
+----
+java -cp "target/aendggner-0.1.0-SNAPSHOT.jar:target/libs/*" \
+  eu.mulk.aendggner.web.WebMain
+----
+
+Der Server bindet standardmäßig nur an `127.0.0.1:8080`; Adresse und
+Port lassen sich über die Umgebungsvariablen `AENDGGNER_WEB_BIND` und
+`AENDGGNER_WEB_PORT` ändern. Für den öffentlichen Betrieb gehört davor
+ein TLS-terminierender Reverse Proxy mit Rate-Limiting — eine
+`nginx`-Vorlage sowie eine `systemd`-Unit liegen unter `deploy/`
+(`deploy/nginx-aendggner.conf`, `deploy/aendggner-web.service`).
+
+Vor dem produktiven, öffentlichen Betrieb sind zwingend zu erledigen:
+
+* `impressum.html` und `datenschutz.html`
+  (`src/main/resources/eu/mulk/aendggner/web/`) mit den tatsächlich
+  zutreffenden Angaben statt der `TODO`-Platzhalter füllen (Pflicht
+  nach § 5 DDG bzw. DSGVO für öffentlich erreichbare Dienste).
+* Den Quellcode-Link im Footer von `index.html` auf das tatsächlich
+  öffentlich erreichbare Repository setzen — das Projekt steht unter
+  AGPLv3 (`COPYING`), dessen §13 bei Netzwerkbetrieb einen
+  Quellcode-Zugriff für Nutzer:innen verlangt.
+
+
 == Running the Tests
 
 To build and run the tests:
-- 
cgit v1.2.1

