aboutsummaryrefslogtreecommitdiff
path: root/src/main/resources/eu
diff options
context:
space:
mode:
authorMatthias Andreas Benkard <code@mail.matthias.benkard.de>2026-08-16 06:40:07 +0200
committerMatthias Andreas Benkard <code@mail.matthias.benkard.de>2026-08-16 06:40:07 +0200
commit2d33bf7cdf9160a2ba2d44194a264c3660831978 (patch)
tree2ad93e3c06f1528e25a3b69bd8a9805589e2d512 /src/main/resources/eu
parent74a84c56047f3463f9086fcffad5c62f402e047e (diff)
Die Web-Version wird öffentlich betreibbar
Die Browserfassung war für den öffentlichen Betrieb gesperrt, und zwar ausdrücklich: Impressum und Datenschutzerklärung trugen TODO-Blöcke statt Angaben, der Quelltextverweis im Fuß zeigte auf https://TODO-QUELLCODE-URL-EINTRAGEN, und der README führte beides als „vor dem produktiven Betrieb zwingend zu erledigen“. Beide Sperren fallen; die Auslieferung wird zugleich auf das tatsächliche Ziel eingerichtet — einen Unterpfad einer bestehenden Domain (/aendggner/), nicht einen eigenen Server. Impressum und Datenschutz führen nun die wirklichen Angaben: § 5 DDG (nicht mehr § 5 TMG) samt § 18 Abs. 2 MStV, Verantwortlicher nach Art. 4 Nr. 7 DSGVO, Rechtsgrundlage Art. 6 Abs. 1 lit. f für die Zugriffsprotokolle, deren Frist mit vierzehn Tagen benannt ist, sowie die Betroffenenrechte samt Aufsichtsbehörde. Die Aussage über die Dateien der Nutzer:innen bleibt, wie sie war; sie trifft zu, weil die Verarbeitung den Rechner nicht verlässt. Der Quelltext wird beigelegt statt verlinkt. deploy/webpaket.sh tritt in der Phase „package“ hinter den Übersetzer und macht aus dessen Ergebnis ein auslieferbares Verzeichnis: Es wirft den .wat-Zwischenschritt fort (368 MB, der bislang von Hand zu übergehen war), legt den Quelltext der gebauten Fassung als aendggner-quelltext.tar.gz nebst Fassungskennung daneben und komprimiert nach .gz und .br vor. Ein veränderter Arbeitsbaum bricht den Bau ab: Der beigelegte Quelltext wäre alsdann nicht der ausgelieferte, und die Auflage des § 13 AGPLv3 wäre gerade verfehlt. Der Fuß verweist primär auf den Tarball, kompakt daneben auf Gerrit als fortlaufende Quelle. Die nginx-Vorlage wird vom server-Block zum location-Schnipsel. Vier Punkte sind dabei mehr als Umschrift: * Die Dateien werden über root statt über alias zugeordnet. In einer Präfix-Location löst try_files gegen den root auf, nicht gegen den alias, und lieferte sonst 404 für alles. * Die Haltefrist von sieben Tagen entfällt zugunsten der Revalidierung. Die Dateinamen tragen keine Fassungskennung; ein Wiederkehrer mit altem app.js und neuem .wasm bekäme sonst eine Mischfassung, die es nie gegeben hat. Ein 304 für das unveränderte Modul kostet nichts. * Vorkomprimiertes wird ausgeliefert (gzip_static/brotli_static), statt 24 MB je Abruf neu zu packen — brotli drückt sie auf 7,1 MB. * Hinzu treten die Sicherheitskopfzeilen samt Inhaltsrichtlinie. Zwei ihrer Freigaben sind unvermeidlich, beide in der Vorlage begründet: 'wasm-unsafe-eval' für die Instanziierung des Moduls (echtes eval kommt in der erzeugten aendggner.js nicht vor), und 'unsafe-inline' für Stile, weil die Synopse als blob:-Dokument die Richtlinie der erzeugenden Seite erbt, ihr Stylesheet aber eingebettet trägt. Die Notwendigkeit ist gemessen, nicht vermutet: ohne die Freigabe meldet das Synopse-Dokument null aktive Stylesheets und Standardschrift, mit ihr eines mit dreiundzwanzig Regeln. Dazu drei Kleinigkeiten, die erst unter einem Unterpfad auffallen: ein Hinweis für abgeschaltetes JavaScript (bislang blieb das Formular wortlos wirkungslos), ein relativ verwiesenes favicon.svg (der Abruf der Domainwurzel ginge ins Leere) sowie Kurzbeschreibung und kanonische Adresse. Eine robots.txt unterbleibt bewusst: Unter einem Unterpfad ist sie wirkungslos, maßgeblich ist allein die der Domainwurzel; die Vorlage vermerkt, was dort einzutragen wäre. Geprüft ist beides, Bau und Lauf: 304 Prüfungen laufen durch, -Pwasm package hinterlässt ein Verzeichnis ohne .wat und mit vollständigem Tarball, und der IfSG-Fall ergibt im Browser unter der Inhaltsrichtlinie 48 angewandte Befehle, 27 zur manuellen Prüfung und 21 geänderte Normen — dasselbe wie die Befehlszeile, ohne eine einzige Beanstandung in der Konsole. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Change-Id: I004490ddaa7c424a60fb0ebac63fc9fc098736e3
Diffstat (limited to 'src/main/resources/eu')
-rw-r--r--src/main/resources/eu/mulk/aendggner/web/datenschutz.html43
-rw-r--r--src/main/resources/eu/mulk/aendggner/web/favicon.svg9
-rw-r--r--src/main/resources/eu/mulk/aendggner/web/impressum.html45
-rw-r--r--src/main/resources/eu/mulk/aendggner/web/index.html17
-rw-r--r--src/main/resources/eu/mulk/aendggner/web/style.css27
5 files changed, 126 insertions, 15 deletions
diff --git a/src/main/resources/eu/mulk/aendggner/web/datenschutz.html b/src/main/resources/eu/mulk/aendggner/web/datenschutz.html
index 5b9bbac..a8d046a 100644
--- a/src/main/resources/eu/mulk/aendggner/web/datenschutz.html
+++ b/src/main/resources/eu/mulk/aendggner/web/datenschutz.html
@@ -4,16 +4,24 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Datenschutz — ÄndGgner</title>
+ <link rel="icon" href="favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main>
<h1>Datenschutzerklärung</h1>
+
+ <h2>Verantwortlicher</h2>
<p>
- <strong>TODO vor dem Livegang:</strong> Bitte prüfen und um die für diesen konkreten Server
- zutreffenden Angaben ergänzen (Betreiber, Kontakt, tatsächliche Speicherdauer der
- Zugriffslogs, Hosting-Anbieter).
+ Verantwortlicher im Sinne des Art. 4 Nr. 7 DSGVO ist:
</p>
+ <address>
+ Matthias Benkard<br>
+ Machtlfinger Str. 29<br>
+ 81379 München<br>
+ Deutschland<br>
+ <a href="mailto:admin@mulk.eu">admin@mulk.eu</a>
+ </address>
<h2>Ihre Dateien</h2>
<p>
@@ -28,15 +36,36 @@
<h2>Zugriffsprotokolle</h2>
<p>
Beim Abruf der Seite selbst und der zugehörigen Dateien werden wie bei jedem Webserver
- technische Zugriffsdaten (u. a. IP-Adresse, Zeitpunkt, aufgerufene Adresse) für einen
- begrenzten Zeitraum zur Absicherung des Betriebs protokolliert. Diese Protokolle enthalten
- keine Angaben über die von Ihnen ausgewerteten Dokumente.
+ technische Zugriffsdaten (IP-Adresse, Zeitpunkt, aufgerufene Adresse, übertragene
+ Datenmenge, Statuscode sowie die vom Browser gemeldete Kennung und Verweisadresse)
+ protokolliert. Rechtsgrundlage ist Art. 6 Abs. 1 lit. f DSGVO; das berechtigte Interesse
+ liegt in der Absicherung und Fehlersuche des Betriebs. Die Protokolle werden nach
+ <strong>14 Tagen</strong> gelöscht. Sie enthalten keine Angaben über die von Ihnen
+ ausgewerteten Dokumente, denn diese erreichen den Server nicht.
+ </p>
+ <p>
+ Der Server wird gegebenenfalls bei einem Dienstleister innerhalb der Europäischen Union
+ betrieben, der insoweit als Auftragsverarbeiter nach Art. 28 DSGVO tätig ist.
</p>
<h2>Keine Cookies, keine Konten, kein Tracking</h2>
<p>
Dieser Dienst verwendet keine Cookies, erfordert keine Registrierung und bindet keine
- Analyse- oder Tracking-Dienste Dritter ein.
+ Analyse- oder Tracking-Dienste Dritter ein. Es werden keine Daten an Dritte weitergegeben
+ und keine Inhalte von fremden Servern nachgeladen.
+ </p>
+
+ <h2>Ihre Rechte</h2>
+ <p>
+ Ihnen stehen gegenüber dem Verantwortlichen die Rechte auf Auskunft (Art. 15 DSGVO),
+ Berichtigung (Art. 16), Löschung (Art. 17), Einschränkung der Verarbeitung (Art. 18),
+ Datenübertragbarkeit (Art. 20) sowie das Recht auf Widerspruch gegen die Verarbeitung
+ (Art. 21) zu. Wenden Sie sich dazu an die oben genannte Anschrift oder E-Mail-Adresse.
+ </p>
+ <p>
+ Unabhängig davon können Sie sich bei einer Aufsichtsbehörde beschweren (Art. 77 DSGVO).
+ Zuständig ist hier das Bayerische Landesamt für Datenschutzaufsicht, Promenade 27,
+ 91522 Ansbach.
</p>
</main>
<footer><a href="index.html">Zurück zum Formular</a></footer>
diff --git a/src/main/resources/eu/mulk/aendggner/web/favicon.svg b/src/main/resources/eu/mulk/aendggner/web/favicon.svg
new file mode 100644
index 0000000..4f6a847
--- /dev/null
+++ b/src/main/resources/eu/mulk/aendggner/web/favicon.svg
@@ -0,0 +1,9 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="ÄndGgner">
+ <!-- Farben wie in style.css: heller Grund, brauner Akzent. Ein Favicon erbt keine
+ CSS-Variablen, deshalb stehen die Werte hier ausgeschrieben. -->
+ <rect width="32" height="32" rx="6" fill="#fdfdfb"/>
+ <rect x="0.75" y="0.75" width="30.5" height="30.5" rx="5.25" fill="none" stroke="#d8d3c4"
+ stroke-width="1.5"/>
+ <text x="16" y="17" fill="#6b4423" font-family="Georgia, 'Times New Roman', serif"
+ font-size="22" text-anchor="middle" dominant-baseline="central">§</text>
+</svg>
diff --git a/src/main/resources/eu/mulk/aendggner/web/impressum.html b/src/main/resources/eu/mulk/aendggner/web/impressum.html
index 525ef77..3832d03 100644
--- a/src/main/resources/eu/mulk/aendggner/web/impressum.html
+++ b/src/main/resources/eu/mulk/aendggner/web/impressum.html
@@ -4,22 +4,53 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Impressum — ÄndGgner</title>
+ <link rel="icon" href="favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main>
<h1>Impressum</h1>
+
+ <h2>Angaben gemäß § 5 DDG</h2>
+ <address>
+ Matthias Benkard<br>
+ Machtlfinger Str. 29<br>
+ 81379 München<br>
+ Deutschland
+ </address>
+
+ <h2>Kontakt</h2>
<p>
- <strong>TODO vor dem Livegang:</strong> Diese Seite muss durch die nach § 5 DDG
- (Digitale-Dienste-Gesetz, vormals § 5 TMG) vorgeschriebenen Angaben ersetzt werden, bevor
- dieser Dienst öffentlich betrieben wird.
+ E-Mail: <a href="mailto:admin@mulk.eu">admin@mulk.eu</a><br>
+ Telefon: +49-8856-8054002<br>
+ Fax: +49-89-20008761207
</p>
+
+ <h2>Verantwortlich für den Inhalt nach § 18 Abs. 2 MStV</h2>
<address>
- [Name]<br>
- [Straße, Hausnummer]<br>
- [PLZ, Ort]<br>
- [E-Mail-Adresse]
+ Matthias Benkard, Machtlfinger Str. 29, 81379 München
</address>
+
+ <h2>Zur Sache</h2>
+ <p>
+ ÄndGgner ist ein unentgeltlicher, nichtkommerzieller Dienst ohne Registrierung. Eine
+ Umsatzsteuer-Identifikationsnummer besteht nicht; eine berufsrechtliche Aufsicht besteht
+ nicht, da es sich weder um Rechtsberatung noch um eine sonstige reglementierte Tätigkeit
+ handelt.
+ </p>
+ <p>
+ Die erzeugten Synopsen entstehen selbsttätig und sind <strong>ohne Gewähr</strong> für
+ Vollständigkeit und Richtigkeit. Maßgeblich ist allein die amtliche Verkündung im
+ jeweiligen Gesetz- oder Verordnungsblatt.
+ </p>
+ <p>
+ Die zugrunde liegende Software steht unter der GNU Affero General Public License,
+ Version 3 (Wortlaut in der Datei <code>COPYING</code> des Quelltextes), und wird
+ ausdrücklich ohne jede Gewährleistung überlassen. Den
+ <a href="aendggner-quelltext.tar.gz">Quelltext der betriebenen Fassung</a> gibt es zum
+ Herunterladen; fortlaufend auch über
+ <a href="https://gerrit.benkard.de/plugins/gitiles/aendggner">Gerrit</a>.
+ </p>
</main>
<footer><a href="index.html">Zurück zum Formular</a></footer>
</body>
diff --git a/src/main/resources/eu/mulk/aendggner/web/index.html b/src/main/resources/eu/mulk/aendggner/web/index.html
index 9f26889..9d1e343 100644
--- a/src/main/resources/eu/mulk/aendggner/web/index.html
+++ b/src/main/resources/eu/mulk/aendggner/web/index.html
@@ -4,6 +4,11 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>ÄndGgner — Änderungsgesetze konsolidieren</title>
+ <meta name="description" content="Wendet Änderungsgesetze und Gesetzentwürfe selbsttätig auf ein
+ Stammgesetz an und zeigt das Ergebnis als zweispaltige Synopse. Die Auswertung läuft
+ vollständig im Browser; die gewählten Dateien werden nicht übertragen.">
+ <link rel="canonical" href="https://matthias.benkard.de/aendggner/">
+ <link rel="icon" href="favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="style.css">
<script src="app.js" defer></script>
</head>
@@ -16,6 +21,15 @@
</header>
<main>
+ <noscript>
+ <p class="noscript">
+ Dieses Werkzeug rechnet im Browser statt auf dem Server: Es braucht JavaScript und
+ WebAssembly. Ohne sie bleibt das nachstehende Formular wirkungslos. Wer beides nicht
+ einschalten möchte, verwende die Befehlszeilenfassung — sie liegt dem
+ <a href="aendggner-quelltext.tar.gz">Quelltext</a> bei und leistet dasselbe.
+ </p>
+ </noscript>
+
<form id="synopse-formular">
<div class="field">
<label for="stamm">Stammgesetz</label>
@@ -62,7 +76,8 @@
<footer>
<a href="impressum.html">Impressum</a> ·
<a href="datenschutz.html">Datenschutz</a> ·
- <a href="https://TODO-QUELLCODE-URL-EINTRAGEN">Quellcode (AGPLv3)</a>
+ <a href="aendggner-quelltext.tar.gz">Quelltext dieser Fassung (AGPLv3)</a>
+ <span class="nebenquelle">(<a href="https://gerrit.benkard.de/plugins/gitiles/aendggner">Git</a>)</span>
</footer>
</body>
</html>
diff --git a/src/main/resources/eu/mulk/aendggner/web/style.css b/src/main/resources/eu/mulk/aendggner/web/style.css
index cdea20e..8aa1e11 100644
--- a/src/main/resources/eu/mulk/aendggner/web/style.css
+++ b/src/main/resources/eu/mulk/aendggner/web/style.css
@@ -45,6 +45,21 @@ h1 {
margin: 0;
}
+/* Impressum und Datenschutz. */
+h2 {
+ margin: 1.75rem 0 0.5rem;
+ font-size: 1.125rem;
+}
+
+address {
+ font-style: normal;
+ margin: 0.5rem 0;
+}
+
+a {
+ color: var(--accent);
+}
+
.field {
margin-bottom: 1.25rem;
}
@@ -92,6 +107,14 @@ button:hover {
filter: brightness(1.1);
}
+.noscript {
+ margin: 0 0 2rem;
+ padding: 1rem;
+ border: 1px solid #a33;
+ border-radius: 6px;
+ font-size: 0.875rem;
+}
+
.disclaimer {
margin-top: 2rem;
padding: 1rem;
@@ -113,6 +136,10 @@ footer a {
color: var(--accent);
}
+.nebenquelle {
+ font-size: 0.8125rem;
+}
+
.meldung {
margin-top: 1.25rem;
padding: 0.75rem 1rem;