From c9d58882340ba837197df406cb96223c7baa4f77 Mon Sep 17 00:00:00 2001 From: Stefan Popp Date: Mon, 19 Oct 2026 19:57:57 +0200 Subject: [PATCH 1/3] Clarify privacy disclosures and product copy --- CHANGELOG.md | 10 ++++ README.md | 24 +++++++++ src/components/HomePage.astro | 12 ++--- src/components/ProjectsPage.astro | 4 +- src/content/legal/de/privacy.md | 52 ++++++++++++------- src/content/legal/en/privacy.md | 50 +++++++++++------- .../tools/de/cockpit-image-update-monitor.md | 12 +++-- src/content/tools/de/stellwerk.md | 2 +- .../tools/en/cockpit-image-update-monitor.md | 12 +++-- src/content/tools/en/stellwerk.md | 2 +- src/styles/site.css | 2 +- 11 files changed, 124 insertions(+), 58 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3262c9d..d283de1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## Unreleased + +- **Privacy texts in German and English:** describe scroll depth and active time, distinguish daily + visitor identifiers from stored event/session records, explain email enquiries and hosting, and + give the right to object its own section. Remove blanket claims about third parties and transfers. +- **Image Update Monitor:** describe rollback images and supported database dumps precisely, explain + that they do not replace a full backup, and qualify the default dump behaviour. +- **Stellwerk:** name Codex alongside Claude Code in homepage copy and page metadata. +- **Legal pages on phones:** allow the long German privacy heading to wrap without horizontal overflow. + ## 0.1.3 – 2026-10-19 The homepage shows Image Update Monitor between the facts and the project list. diff --git a/README.md b/README.md index 4266628..6466470 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,30 @@ gh attestation verify azentrius-website-VERSION.tar.gz --repo Azentrius/website `npm run pack` makes the same archive locally; the same `dist/` gives the same archive. +### Open facts for the legal text update + +The text review of 2026-10-19 corrects the analytics description, email processing, objection rights +and product claims in both languages. Before publishing this update, resolve the following facts: + +- Add the operator's additional rapid contact channel to both legal notices, where § 5 DDG applies. + No phone number or contact form has been invented. +- Confirm the retention period or actual deletion criteria for Plausible event and session records + and add them to both privacy pages. Rotation of the daily salt does not delete those records. +- Verify the existing claims about anonymised server logs and a maximum retention of 14 days against + the active log format, rotation, error logs and analytics proxy logs. The repository only refers to + the server's `anonymized` format; it does not define it or the global retention settings. +- Confirm the email provider, any forwarding/other recipients and processing locations, then add + them to the recipient section. Public MX records point to Hetzner, but do not establish the full + processing chain. The newly drafted email deletion criteria must also match actual handling. +- Assess the actual Plausible setup under § 25 TDDDG and the GDPR, including scroll depth and active + time measurement. Cookie-free operation alone does not resolve this question. The existing + Art. 6 (1) (f) GDPR basis has not been independently approved by this text update. + +The review does not change server configuration or publish a release. Its source references are +[Plausible's data policy](https://plausible.io/data-policy), the +[DSK guidance on digital services](https://www.datenschutzkonferenz-online.de/media/oh/OH_Digitale_Dienste.pdf) +and [CJEU C-298/07](https://eur-lex.europa.eu/legal-content/EN/ALL/?uri=celex%3A62007CJ0298). + ## License The code is licensed under the [Apache License 2.0](LICENSE). The texts of the website and the diff --git a/src/components/HomePage.astro b/src/components/HomePage.astro index 1e2ec96..243f7ce 100644 --- a/src/components/HomePage.astro +++ b/src/components/HomePage.astro @@ -27,10 +27,10 @@ const text = { en: { title: "Azentrius – open-source tools for self-hosters", description: - "Open-source tools for your own infrastructure and devices: Cockpit add-ons for cron and Docker updates, a desk display for Claude Code, and more.", + "Open-source tools for your infrastructure and devices: Cockpit add-ons for cron and Docker updates, a desk display for Claude Code and Codex, and more.", eyebrow: "Digital sovereignty", h1: "Software you own", - lead: "Open-source tools for your own infrastructure and devices: add-ons for Cockpit, a desk display for Claude Code, an Android voice app and a theme for Home Assistant. Local control, transparent dependencies: each project page says what it needs and what it talks to.", + lead: "Open-source tools for your own infrastructure and devices: add-ons for Cockpit, a desk display for Claude Code and Codex, an Android voice app and a theme for Home Assistant. Local control, transparent dependencies: each project page says what it needs and what it talks to.", toProjects: "View projects", toPackages: "Set up the package repository", facts: [ @@ -39,7 +39,7 @@ const text = { ["Transparent", "Dependencies named per project"], ], previewTitle: "Keep container updates in sight.", - previewText: "See which version is running and which is available. Update your containers directly in Cockpit, with a backup before the update.", + previewText: "See which version is running and which is available. Update your containers directly in Cockpit, with a rollback image and dumps for supported databases.", previewLink: "View Image Update Monitor", previewAlt: "Image Update Monitor in Cockpit: an excerpt of the container overview with installed and available versions, update status and update actions.", projectsEyebrow: "Projects", @@ -65,10 +65,10 @@ const text = { de: { title: "Azentrius – Open-Source-Werkzeuge für Self-Hoster", description: - "Open-Source-Werkzeuge für eigene Infrastruktur und Geräte: Cockpit-Add-ons für Cron und Docker-Updates, ein Tischdisplay für Claude Code und mehr.", + "Open-Source-Werkzeuge für eigene Server und Geräte: Cockpit-Add-ons für Cron und Docker-Updates, ein Tischdisplay für Claude Code und Codex und mehr.", eyebrow: "Digitale Souveränität", h1: "Software, die dir gehört", - lead: "Open-Source-Werkzeuge für deine eigene Infrastruktur und deine Geräte: Erweiterungen für Cockpit, ein Tischdisplay für Claude Code, eine Sprach-App für Android und ein Theme für Home Assistant. Kontrolle bei dir, Abhängigkeiten offen benannt: Jede Projektseite sagt, was ein Projekt braucht und womit es spricht.", + lead: "Open-Source-Werkzeuge für deine eigene Infrastruktur und deine Geräte: Erweiterungen für Cockpit, ein Tischdisplay für Claude Code und Codex, eine Sprach-App für Android und ein Theme für Home Assistant. Kontrolle bei dir, Abhängigkeiten offen benannt: Jede Projektseite sagt, was ein Projekt braucht und womit es spricht.", toProjects: "Projekte ansehen", toPackages: "Paketquelle einrichten", facts: [ @@ -77,7 +77,7 @@ const text = { ["Transparent", "Abhängigkeiten je Projekt benannt"], ], previewTitle: "Container-Updates im Blick.", - previewText: "Sieh, welche Version läuft und welche verfügbar ist. Aktualisiere deine Container direkt in Cockpit – mit Sicherung vor dem Update.", + previewText: "Sieh, welche Version läuft und welche verfügbar ist. Aktualisiere deine Container direkt in Cockpit – mit Rollback-Image und Dumps für unterstützte Datenbanken.", previewLink: "Image Update Monitor ansehen", previewAlt: "Image Update Monitor in Cockpit: Ausschnitt der Containerübersicht mit installierten und verfügbaren Versionen, Update-Status und Aktionen zum Aktualisieren.", projectsEyebrow: "Projekte", diff --git a/src/components/ProjectsPage.astro b/src/components/ProjectsPage.astro index 764134d..9188b24 100644 --- a/src/components/ProjectsPage.astro +++ b/src/components/ProjectsPage.astro @@ -21,7 +21,7 @@ const text = { en: { title: "Open-source Cockpit add-ons and developer tools | Azentrius", description: - "All Azentrius projects: Cockpit add-ons for cron and Docker updates, a desk display for Claude Code, an Android voice app and a Home Assistant theme.", + "Azentrius projects: Cockpit add-ons for cron and Docker updates, a Claude Code and Codex desk display, an Android voice app and a Home Assistant theme.", h1: "Projects", lead: "Everything Azentrius makes is open source under Apache-2.0 and public on GitHub. Each page says what a project needs and what it talks to.", groups: { @@ -43,7 +43,7 @@ const text = { de: { title: "Cockpit-Add-ons und Werkzeuge für Entwickler | Azentrius", description: - "Alle Projekte von Azentrius: Cockpit-Add-ons für Cron und Docker-Updates, ein Tischdisplay für Claude Code, eine Sprach-App und ein Home-Assistant-Theme.", + "Azentrius-Projekte: Cockpit-Add-ons für Cron und Docker-Updates, ein Tischdisplay für Claude Code und Codex, eine Sprach-App und ein Home-Assistant-Theme.", h1: "Projekte", lead: "Alles, was Azentrius baut, ist Open Source unter Apache-2.0 und öffentlich auf GitHub. Jede Seite sagt, was ein Projekt braucht und womit es spricht.", groups: { diff --git a/src/content/legal/de/privacy.md b/src/content/legal/de/privacy.md index c852871..bd7b667 100644 --- a/src/content/legal/de/privacy.md +++ b/src/content/legal/de/privacy.md @@ -2,14 +2,14 @@ page: privacy lang: de title: Datenschutzerklärung – Azentrius -description: "Datenschutz auf azentrius.com: keine Cookies, anonymisierte Server-Logs für 14 Tage, selbst gehostetes Plausible, keine Weitergabe an Dritte." +description: "Datenschutz auf azentrius.com: Server-Logs, selbst gehostete Reichweitenmessung mit Plausible, E-Mail-Kontakt und deine Rechte." eyebrow: Datenschutz -h1: Datenschutzerklärung +h1: "Datenschutz\u00ADerklärung" subtitle: Stand Oktober 2026 updated: 2026-10-19 --- -**Kurzfassung:** Diese Webseite setzt keine Cookies. Die Reichweitenmessung läuft über ein selbst gehostetes Plausible auf europäischer Infrastruktur: keine Weitergabe an Dritte. +**Kurzfassung:** Diese Webseite setzt keine Cookies. Für die Reichweitenmessung betreiben wir Plausible selbst auf einem Server bei Hetzner in der EU. Dabei werden keine Besuchsdaten an den Hersteller von Plausible übermittelt. Im Folgenden erklären wir auch die Verarbeitung von Server-Logs und E-Mail-Anfragen. ## 1. Verantwortlicher @@ -37,22 +37,25 @@ Diese Daten werden ausschließlich zur Sicherstellung des Betriebs und zur Fehle ### Cookies -Diese Webseite verwendet keine Cookies und keine Tracking- oder Analyse-Dienste von Drittanbietern. +Diese Webseite setzt keine Cookies. Die nachfolgend beschriebene Reichweitenmessung betreiben wir selbst. ### Reichweitenmessung (Plausible Analytics) -Um zu verstehen, wie diese Webseite genutzt wird, setzen wir **Plausible Analytics** ein. Plausible ist Open-Source-Software und wird von Azentrius **selbst gehostet** auf eigenem Server bei der Hetzner Online GmbH (analytics.azentrius.com). Es werden keine Daten an den Hersteller von Plausible oder an andere Dritte übermittelt. +Um zu verstehen, welche Inhalte genutzt werden und wie wir die Webseite verbessern können, setzen wir **Plausible Analytics** ein. Die Open-Source-Software wird von Azentrius **selbst gehostet** auf einem Server bei der Hetzner Online GmbH (analytics.azentrius.com). Besuchsdaten werden nicht an den Hersteller von Plausible übermittelt. Hetzner stellt die Server-Infrastruktur bereit; Einzelheiten dazu stehen unter „Hosting und Datenempfänger“. -Plausible verwendet keine Cookies und speichert nichts auf deinem Gerät. Beim Aufruf einer Seite werden folgende Angaben erfasst: +Plausible verwendet keine Cookies und legt keine dauerhafte Besucherkennung auf deinem Gerät ab. Während eines Besuchs werden folgende Angaben erfasst: -- Aufgerufene Seite sowie Klicks auf Links zu anderen Webseiten und das Kopieren von Befehlen +- Aufgerufene Seite, Zeitpunkt des Ereignisses, Klicks auf Links zu anderen Webseiten einschließlich der Zieladresse sowie das Kopieren von Befehlen - Verweisende Webseite (Referrer) - Browser, Betriebssystem und Gerätetyp (abgeleitet aus dem User-Agent) - Ungefährer Standort auf Ebene von Land, Region und Stadt (abgeleitet aus der IP-Adresse) +- Scrolltiefe und aktive Verweildauer auf einer Seite -Deine IP-Adresse wird nicht gespeichert. Um Aufrufe innerhalb eines Tages zusammenzufassen, bildet Plausible aus IP-Adresse, User-Agent, Domain und einem täglich wechselnden Zufallswert einen Hashwert. Der Zufallswert wird nach 24 Stunden gelöscht; danach lassen sich die Aufrufe keiner Person mehr zuordnen. Ausgewertet werden ausschließlich zusammengefasste Statistiken. +Plausible verarbeitet die IP-Adresse und den User-Agent, um den ungefähren Standort und eine tägliche Besucherkennung zu bestimmen. Die vollständige IP-Adresse und der vollständige User-Agent werden nicht in der Analytics-Datenbank gespeichert. Für die Kennung bildet Plausible aus IP-Adresse, User-Agent, Domain und einem täglich wechselnden Zufallswert einen Hashwert. Der Zufallswert wird alle 24 Stunden gewechselt und gelöscht. Dadurch ist eine Wiedererkennung über mehrere Tage anhand dieser Kennung nicht möglich. -Rechtsgrundlage ist unser berechtigtes Interesse an einer datensparsamen Reichweitenmessung (Art. 6 Abs. 1 lit. f DSGVO). +Plausible speichert einzelne Ereignis- und Sitzungsdatensätze, aus denen zusammengefasste Statistiken berechnet werden. Der tägliche Wechsel des Zufallswerts löscht diese Datensätze nicht. + +Rechtsgrundlage ist Art. 6 Abs. 1 lit. f DSGVO. Unser berechtigtes Interesse ist, die Nutzung unserer Inhalte zu verstehen und das Angebot anhand zusammengefasster Statistiken zu verbessern. Dein Recht auf Widerspruch erläutern wir im gesonderten Abschnitt „Widerspruchsrecht“. ### Schriftarten @@ -62,21 +65,26 @@ Die Schriftarten dieser Webseite (DM Sans, DM Serif Display, Red Hat Mono) liege Die Seiten verlinken auf die Repositorys der Projekte bei GitHub. Erst wenn du einem solchen Link folgst, verbindet sich dein Browser mit GitHub; dort gilt die Datenschutzerklärung von GitHub. -## 3. Übersicht der Datenverarbeitung +## 3. Kontakt per E-Mail + +Wenn du uns eine E-Mail schickst, verarbeiten wir deine E-Mail-Adresse, gegebenenfalls deinen Namen, den Inhalt der Nachricht und mitgesendete Anhänge. Diese Angaben verwenden wir, um deine Anfrage zu bearbeiten und dir zu antworten. + +Rechtsgrundlage ist Art. 6 Abs. 1 lit. f DSGVO. Unser berechtigtes Interesse liegt darin, Fragen zu unseren Projekten und unserem Angebot zu beantworten. Geht es um einen Vertrag mit dir oder um vorvertragliche Maßnahmen auf deine Anfrage, ist Art. 6 Abs. 1 lit. b DSGVO die Rechtsgrundlage. + +Du entscheidest, welche Angaben du uns schickst. Ohne eine erreichbare Antwortadresse und die für dein Anliegen nötigen Informationen können wir deine Anfrage gegebenenfalls nicht beantworten. -- **Server-Logfiles:** Art. 6 Abs. 1 lit. f DSGVO -- **Reichweitenmessung (Plausible):** Art. 6 Abs. 1 lit. f DSGVO -- **Kontakt / E-Mail:** Art. 6 Abs. 1 lit. f DSGVO +Wir löschen die Korrespondenz, sobald die Anfrage abschließend bearbeitet ist und die Daten dafür nicht mehr benötigt werden. Soweit gesetzliche Aufbewahrungspflichten bestehen oder die Daten zur Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen benötigt werden, bewahren wir sie für diesen Zweck bis zum Wegfall des jeweiligen Grundes auf. -## 4. Drittanbieter +## 4. Hosting und Datenempfänger -- **Hetzner Online GmbH** (Server-Hosting, Deutschland/Finnland) -- **Plausible Analytics (selbst gehostet):** Reichweitenmessung der Webseite, betrieben von Azentrius auf eigenem Server, kein externer Drittanbieter +Die **Hetzner Online GmbH**, Industriestr. 25, 91710 Gunzenhausen, Deutschland, stellt die Server-Infrastruktur für diese Webseite und unsere Plausible-Instanz bereit. Dabei verarbeitet Hetzner Daten als Hosting-Dienstleister in unserem Auftrag. Die hierfür eingesetzten Server befinden sich in der EU. -Es werden keine Daten in Drittländer außerhalb der EU/EWR übermittelt. +Plausible ist in dieser Konfiguration die von uns betriebene Software, kein externer Analytics-Dienst. Die Auswertung findet auf unserer Instanz statt. ## 5. Deine Rechte +Unter den jeweiligen gesetzlichen Voraussetzungen hast du folgende Rechte: + - Auskunft (Art. 15 DSGVO) - Berichtigung (Art. 16 DSGVO) - Löschung (Art. 17 DSGVO) @@ -87,8 +95,14 @@ Es werden keine Daten in Drittländer außerhalb der EU/EWR übermittelt. Kontakt: [support@azentrius.com](mailto:support@azentrius.com) -Zuständige Aufsichtsbehörde: Bayerisches Landesamt für Datenschutzaufsicht (BayLDA), Promenade 18, 91522 Ansbach. +Du kannst dich bei einer Datenschutzaufsichtsbehörde beschweren, insbesondere an deinem gewöhnlichen Aufenthaltsort, deinem Arbeitsplatz oder am Ort des vermuteten Verstoßes. Für uns zuständig ist das [Bayerische Landesamt für Datenschutzaufsicht (BayLDA)](https://www.lda.bayern.de/de/kontakt.html), Promenade 18, 91522 Ansbach. + +## 6. Widerspruchsrecht + +**Wenn wir personenbezogene Daten auf Grundlage von Art. 6 Abs. 1 lit. f DSGVO verarbeiten, kannst du aus Gründen, die sich aus deiner besonderen Situation ergeben, jederzeit widersprechen.** Schreibe dafür an [support@azentrius.com](mailto:support@azentrius.com). + +Wir verarbeiten die betroffenen Daten dann nicht weiter, es sei denn, wir können zwingende schutzwürdige Gründe nachweisen, die deine Interessen, Rechte und Freiheiten überwiegen, oder die Verarbeitung dient der Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen (Art. 21 Abs. 1 DSGVO). -## 6. Kontakt +## 7. Kontakt [support@azentrius.com](mailto:support@azentrius.com) diff --git a/src/content/legal/en/privacy.md b/src/content/legal/en/privacy.md index d1ae010..11958b8 100644 --- a/src/content/legal/en/privacy.md +++ b/src/content/legal/en/privacy.md @@ -2,14 +2,14 @@ page: privacy lang: en title: Privacy policy – Azentrius -description: "Privacy on azentrius.com: no cookies, anonymised server logs kept for 14 days, self-hosted Plausible analytics, nothing passed to third parties." +description: "Privacy on azentrius.com: server logs, self-hosted audience measurement with Plausible, contact by email and your rights." eyebrow: Privacy h1: Privacy policy subtitle: Last updated October 2026 updated: 2026-10-19 --- -**In short:** This website sets no cookies. Audience measurement runs on a self-hosted Plausible on European infrastructure: nothing is passed on to third parties. +**In short:** This website sets no cookies. We run Plausible ourselves on a server at Hetzner in the EU to measure website usage. Visitor data is not sent to the maker of Plausible. Below, we also explain how we process server logs and email enquiries. ## 1. Controller @@ -37,22 +37,25 @@ This data is processed solely to keep the service running and to analyse errors ### Cookies -This website uses no cookies and no tracking or analytics services of third parties. +This website sets no cookies. We operate the audience measurement described below ourselves. ### Audience measurement (Plausible Analytics) -To understand how this website is used, we use **Plausible Analytics**. Plausible is open-source software and is **self-hosted** by Azentrius on its own server at Hetzner Online GmbH (analytics.azentrius.com). No data is passed to the maker of Plausible or to any other third party. +To understand which content is used and how we can improve the website, we use **Plausible Analytics**. This open-source software is **self-hosted** by Azentrius on a server at Hetzner Online GmbH (analytics.azentrius.com). Visitor data is not sent to the maker of Plausible. Hetzner provides the server infrastructure; see “Hosting and data recipients” for details. -Plausible uses no cookies and stores nothing on your device. When a page is opened, the following is recorded: +Plausible uses no cookies and does not place a persistent visitor identifier on your device. During a visit, the following is recorded: -- The page opened, clicks on links to other websites and copying of commands +- The page opened, the time of the event, clicks on links to other websites including the destination URL, and copying of commands - The referring website (referrer) - Browser, operating system and device type (derived from the user agent) - Approximate location at the level of country, region and city (derived from the IP address) +- Scroll depth and active time spent on a page -Your IP address is not stored. To count visits within one day, Plausible forms a hash from the IP address, user agent, domain and a random value that changes daily. The random value is deleted after 24 hours; after that, visits can no longer be linked to anyone. Only aggregated statistics are evaluated. +Plausible processes the IP address and user agent to determine the approximate location and a daily visitor identifier. The full IP address and raw user agent are not stored in the analytics database. To create the identifier, Plausible forms a hash from the IP address, user agent, domain and a random value that changes daily. The random value is rotated and deleted every 24 hours. This prevents recognition across days using this identifier. -The legal basis is our legitimate interest in privacy-friendly audience measurement (Art. 6 (1) (f) GDPR). +Plausible stores individual event and session records from which aggregated statistics are calculated. The daily change of the random value does not delete these records. + +The legal basis is Art. 6 (1) (f) GDPR. Our legitimate interest is to understand how our content is used and to improve the website using aggregated statistics. We explain your right to object in the separate “Right to object” section. ### Fonts @@ -62,21 +65,26 @@ The fonts of this website (DM Sans, DM Serif Display, Red Hat Mono) are stored o The pages link to the projects' repositories on GitHub. Your browser connects to GitHub only when you follow such a link; GitHub's privacy policy applies there. -## 3. Overview of processing +## 3. Contact by email + +If you send us an email, we process your email address, your name if provided, the message content and any attachments. We use these details to handle your enquiry and reply to you. + +The legal basis is Art. 6 (1) (f) GDPR. Our legitimate interest is to answer questions about our projects and services. If your enquiry concerns a contract with you or steps taken at your request before entering into a contract, the legal basis is Art. 6 (1) (b) GDPR. + +You decide which details to send us. Without a working reply address and the information needed for your enquiry, we may be unable to answer it. -- **Server log files:** Art. 6 (1) (f) GDPR -- **Audience measurement (Plausible):** Art. 6 (1) (f) GDPR -- **Contact by email:** Art. 6 (1) (f) GDPR +We delete the correspondence once the enquiry has been fully resolved and the data is no longer needed for it. Where statutory retention obligations apply or the data is needed to establish, exercise or defend legal claims, we retain it for that purpose until the relevant reason no longer applies. -## 4. Third parties +## 4. Hosting and data recipients -- **Hetzner Online GmbH** (server hosting, Germany/Finland) -- **Plausible Analytics (self-hosted):** audience measurement of the website, run by Azentrius on its own server, not an external provider +**Hetzner Online GmbH**, Industriestr. 25, 91710 Gunzenhausen, Germany, provides the server infrastructure for this website and our Plausible instance. Hetzner processes data on our behalf as a hosting provider. The servers used for these services are located in the EU. -No data is transferred to countries outside the EU/EEA. +In this setup, Plausible is software we operate, not an external analytics service. Analytics are processed on our own instance. ## 5. Your rights +Subject to the applicable legal conditions, you have the following rights: + - Access (Art. 15 GDPR) - Rectification (Art. 16 GDPR) - Erasure (Art. 17 GDPR) @@ -87,9 +95,15 @@ No data is transferred to countries outside the EU/EEA. Contact: [support@azentrius.com](mailto:support@azentrius.com) -Competent supervisory authority: Bayerisches Landesamt für Datenschutzaufsicht (BayLDA), Promenade 18, 91522 Ansbach, Germany. +You can lodge a complaint with a data protection supervisory authority, in particular where you habitually live, work or where the alleged infringement took place. The authority responsible for us is the [Bayerisches Landesamt für Datenschutzaufsicht (BayLDA)](https://www.lda.bayern.de/de/kontakt.html), Promenade 18, 91522 Ansbach, Germany. + +## 6. Right to object + +**Where we process personal data on the basis of Art. 6 (1) (f) GDPR, you may object at any time on grounds relating to your particular situation.** To do so, write to [support@azentrius.com](mailto:support@azentrius.com). + +We will stop processing the data concerned unless we can demonstrate compelling legitimate grounds which override your interests, rights and freedoms, or the processing serves to establish, exercise or defend legal claims (Art. 21 (1) GDPR). -## 6. Contact +## 7. Contact [support@azentrius.com](mailto:support@azentrius.com) diff --git a/src/content/tools/de/cockpit-image-update-monitor.md b/src/content/tools/de/cockpit-image-update-monitor.md index 8941bb6..dadd6e7 100644 --- a/src/content/tools/de/cockpit-image-update-monitor.md +++ b/src/content/tools/de/cockpit-image-update-monitor.md @@ -2,11 +2,11 @@ slug: cockpit-image-update-monitor lang: de title: "Image Update Monitor: Docker-Updates mit Rollback (Cockpit)" -description: "Konfigurierte, laufende und neueste Version jedes Docker-Containers. Updates aus Cockpit mit Datenbank-Dump vorab und Rollback per Klick." +description: "Docker-Versionen im Blick. Updates aus Cockpit mit Rollback-Image und Dumps für unterstützte Datenbanken. Grenzen und Wiederherstellung erklärt." eyebrow: Cockpit-Add-on h1: Docker-Updates mit Plan und Rückweg -lead: "Für jeden laufenden Docker-Container: was die Compose-Datei sagt, welche Version wirklich läuft und welche die neueste ist. Updates aus Cockpit mit Datenbank-Dump vorab, einer Rollback-Kopie des alten Images und Rollback per Klick." -summary: Konfigurierte, laufende und neueste Version jedes Docker-Containers, und Updates mit Dump vorab und Rollback. +lead: "Für jeden laufenden Docker-Container: was die Compose-Datei sagt, welche Version wirklich läuft und welche die neueste ist. Updates aus Cockpit mit einer Rollback-Kopie des alten Images und Dumps für unterstützte Datenbanken des Compose-Projekts." +summary: Konfigurierte, laufende und neueste Docker-Versionen, mit Rollback-Image und Dumps für unterstützte Datenbanken. platforms: ["Cockpit", "Docker Compose v2", "Linux mit systemd"] problemTitle: "latest ist keine Version." problem: @@ -20,8 +20,8 @@ features: text: "Diun meldet neue Images desselben Tags; ein Versionsradar sucht alle sechs Stunden nach neueren Tags, ohne Images zu laden." - title: Update mit Plan text: "Bevor sich etwas ändert: welche Container neu erstellt werden, welche Datenbanken betroffen sind, was davon abhängt und wie viel Platz frei ist." - - title: Dump vor jedem Update - text: "Postgres, MariaDB und MySQL werden zuerst gesichert. Scheitert der Dump, stoppt das Update, bevor sich etwas ändert." + - title: Unterstützte Datenbanken sichern + text: "Standardmäßig werden erkannte PostgreSQL-, MariaDB- und MySQL-Datenbanken des Compose-Projekts vor dem Update gesichert. Scheitert ein Dump, stoppt das Update. Über die Konsole lässt sich der Dump ausdrücklich überspringen." - title: Rollback per Klick text: "Das alte Image bleibt als Rollback-Kopie erhalten; ein Klick setzt es zurück." - title: Version wechseln @@ -50,6 +50,8 @@ faq: a: "Nein. Jedes Update startet per Klick, nach einem Plan. Regeln für automatische Updates stehen als Idee in der Roadmap." - q: Stellt ein Rollback meine Daten wieder her? a: "Nein. Der Rollback setzt das alte Image zurück. Hat die neue Version die Datenbank schon migriert, hilft nur der Dump, und dessen Wiederherstellung ist bewusst manuell." + - q: Ersetzt das ein vollständiges Backup? + a: "Nein. Die Dumps sichern unterstützte Datenbanken des Compose-Projekts. Andere Dateien und Volumes werden damit nicht vollständig gesichert. Die Dumps liegen auf demselben Server und sollten in dein separates Backup aufgenommen werden." - q: Brauche ich Diun? a: "Für neue Images desselben Tags ja; das Add-on richtet Diun auf Wunsch ein. Neue Versions-Tags findet der Radar mit skopeo." - q: Lädt es Images, um Updates zu finden? diff --git a/src/content/tools/de/stellwerk.md b/src/content/tools/de/stellwerk.md index 7d42d5c..6944a78 100644 --- a/src/content/tools/de/stellwerk.md +++ b/src/content/tools/de/stellwerk.md @@ -1,7 +1,7 @@ --- slug: stellwerk lang: de -title: Stellwerk – Claude-Code-Freigaben am Tischdisplay erteilen +title: Stellwerk – Freigaben für Claude Code und Codex am Display description: "Lokales Tischdisplay für Claude Code und Codex: alle Sitzungen im Blick, Freigaben mit vollständiger Eingabe, erlauben oder ablehnen am zweiten Bildschirm." eyebrow: Ein Stellwerk für deine KI-Agenten h1: Freigaben für Claude Code und Codex auf dem zweiten Bildschirm erteilen diff --git a/src/content/tools/en/cockpit-image-update-monitor.md b/src/content/tools/en/cockpit-image-update-monitor.md index 29002ed..4111414 100644 --- a/src/content/tools/en/cockpit-image-update-monitor.md +++ b/src/content/tools/en/cockpit-image-update-monitor.md @@ -2,11 +2,11 @@ slug: cockpit-image-update-monitor lang: en title: "Image Update Monitor: Docker updates with rollback (Cockpit)" -description: "See configured, running and newest version of every Docker container. Update from Cockpit with a database dump first and rollback at a click." +description: "See Docker versions and update from Cockpit with a rollback image and dumps for supported databases. Backup limits and recovery explained." eyebrow: Cockpit add-on h1: Docker updates with a plan and a way back -lead: "For every running Docker container: what the compose file says, which version actually runs and which is the newest. Updates from Cockpit with a database dump first, a rollback copy of the old image and a rollback at a click." -summary: Configured, running and newest version of every Docker container, and updates with a dump first and a rollback. +lead: "For every running Docker container: what the compose file says, which version actually runs and which is the newest. Update from Cockpit with a rollback copy of the old image and dumps for supported databases in the Compose project." +summary: Configured, running and newest Docker versions, with a rollback image and dumps for supported databases. platforms: ["Cockpit", "Docker Compose v2", "Linux with systemd"] problemTitle: "latest is not a version." problem: @@ -20,8 +20,8 @@ features: text: "Diun reports new images of the same tag; a version radar looks for newer tags every six hours, without pulling images." - title: An update with a plan text: "Before anything changes: which containers are recreated, which databases are involved, what depends on them and how much space is free." - - title: A dump before every update - text: "Postgres, MariaDB and MySQL are dumped first. If the dump fails, the update stops before anything changes." + - title: Back up supported databases + text: "By default, detected PostgreSQL, MariaDB and MySQL databases in the Compose project are dumped before the update. If a dump fails, the update stops. The command line lets you explicitly skip the dump." - title: Rollback at a click text: "The old image is kept as a rollback copy; one click puts it back." - title: Change the version @@ -50,6 +50,8 @@ faq: a: "No. Every update starts with a click, after a plan. Rules for automatic updates are an idea in the roadmap." - q: Does a rollback restore my data? a: "No. A rollback puts the old image back. If the new version has already migrated the database, only the dump helps, and restoring it is deliberately manual." + - q: Does this replace a full backup? + a: "No. The dumps back up supported databases in the Compose project. They do not fully back up other files or volumes. Dumps are stored on the same server and should be included in your separate backup." - q: Do I need Diun? a: "For new images of the same tag, yes; the add-on sets Diun up on request. New version tags are found by the radar with skopeo." - q: Does it pull images to check for updates? diff --git a/src/content/tools/en/stellwerk.md b/src/content/tools/en/stellwerk.md index 184ade1..b738627 100644 --- a/src/content/tools/en/stellwerk.md +++ b/src/content/tools/en/stellwerk.md @@ -1,7 +1,7 @@ --- slug: stellwerk lang: en -title: "Stellwerk: approve Claude Code permissions on a desk display" +title: "Stellwerk: approve Claude Code and Codex on a desk display" description: "A local desk display for Claude Code and Codex: every session at a glance, permission requests with full input, allow or deny on a second screen." eyebrow: A signal box for your AI agents h1: Approve Claude Code and Codex requests on a second screen diff --git a/src/styles/site.css b/src/styles/site.css index 53ed540..636a0d4 100644 --- a/src/styles/site.css +++ b/src/styles/site.css @@ -288,7 +288,7 @@ pre code { font-size: inherit; } /* Legal pages */ .legal { padding-block: 72px var(--space-section); } .legal .wrap { max-width: calc(760px + 2 * var(--space-lg)); } -.legal h1 { font-family: var(--font-brand); font-size: clamp(36px, 5vw, 52px); line-height: 1.08; margin-top: var(--space-md); } +.legal h1 { font-family: var(--font-brand); font-size: clamp(36px, 5vw, 52px); line-height: 1.08; margin-top: var(--space-md); hyphens: auto; overflow-wrap: anywhere; } .legal .subtitle { color: var(--text-subtle); margin-top: var(--space-md); } .legal .prose { margin-top: var(--space-2xl); } .legal .prose h2 { font-family: var(--font-brand); font-weight: 400; font-size: 30px; margin-top: var(--space-2xl); } From 27b236d557bf864a83e2c339adfd939163d4c2a0 Mon Sep 17 00:00:00 2001 From: Stefan Popp Date: Mon, 19 Oct 2026 20:19:40 +0200 Subject: [PATCH 2/3] Document email hosting and prepare analytics retention copy --- CHANGELOG.md | 3 +++ README.md | 34 ++++++++++++++++++++------------- src/content/legal/de/privacy.md | 6 ++++++ src/content/legal/en/privacy.md | 6 ++++++ 4 files changed, 36 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d283de1..eb70012 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,9 @@ - **Privacy texts in German and English:** describe scroll depth and active time, distinguish daily visitor identifiers from stored event/session records, explain email enquiries and hosting, and give the right to object its own section. Remove blanket claims about third parties and transfers. + Name Hetzner as the sole email provider, without forwarding to other email providers. + Prepare the 24-month analytics retention statement and explain the separate backup retention; + publication awaits confirmation of the server changes documented in the README. - **Image Update Monitor:** describe rollback images and supported database dumps precisely, explain that they do not replace a full backup, and qualify the default dump behaviour. - **Stellwerk:** name Codex alongside Claude Code in homepage copy and page metadata. diff --git a/README.md b/README.md index 6466470..9e5f377 100644 --- a/README.md +++ b/README.md @@ -68,21 +68,29 @@ gh attestation verify azentrius-website-VERSION.tar.gz --repo Azentrius/website `npm run pack` makes the same archive locally; the same `dist/` gives the same archive. -### Open facts for the legal text update +### Operational facts for the legal text update The text review of 2026-10-19 corrects the analytics description, email processing, objection rights -and product claims in both languages. Before publishing this update, resolve the following facts: - -- Add the operator's additional rapid contact channel to both legal notices, where § 5 DDG applies. - No phone number or contact form has been invented. -- Confirm the retention period or actual deletion criteria for Plausible event and session records - and add them to both privacy pages. Rotation of the daily salt does not delete those records. -- Verify the existing claims about anonymised server logs and a maximum retention of 14 days against - the active log format, rotation, error logs and analytics proxy logs. The repository only refers to - the server's `anonymized` format; it does not define it or the global retention settings. -- Confirm the email provider, any forwarding/other recipients and processing locations, then add - them to the recipient section. Public MX records point to Hetzner, but do not establish the full - processing chain. The newly drafted email deletion criteria must also match actual handling. +and product claims in both languages. + +The operator confirmed that email is hosted exclusively by Hetzner without forwarding to another +email provider. Both privacy pages now name that processing role. The operator also explicitly +chose to retain the existing email/postal contact details without adding another contact channel. +The legal notices are unchanged by that decision; this does not establish compliance with § 5 DDG. + +The privacy pages are prepared for the operator's target configuration: 24 months for Plausible +event/session records in the active database and anonymised server logs retained for at most 14 days. +The operator is implementing these settings in a separate session. The draft must not be published +until that implementation has been confirmed against the actual configuration. + +Before publishing this update: + +- Confirm deletion of Plausible event/session records after 24 months and anonymisation/expiry of + all logs relevant to website and analytics requests, including access, error and proxy logs. +- Confirm the final backup retention. The privacy pages separately describe up to six months for + database backups, as found by the server audit. Amend this if the implementation changes it; + deletion from the active database does not itself delete copies in backups. +- The newly drafted email deletion criteria must match actual handling. - Assess the actual Plausible setup under § 25 TDDDG and the GDPR, including scroll depth and active time measurement. Cookie-free operation alone does not resolve this question. The existing Art. 6 (1) (f) GDPR basis has not been independently approved by this text update. diff --git a/src/content/legal/de/privacy.md b/src/content/legal/de/privacy.md index bd7b667..79e3dd1 100644 --- a/src/content/legal/de/privacy.md +++ b/src/content/legal/de/privacy.md @@ -55,6 +55,8 @@ Plausible verarbeitet die IP-Adresse und den User-Agent, um den ungefähren Stan Plausible speichert einzelne Ereignis- und Sitzungsdatensätze, aus denen zusammengefasste Statistiken berechnet werden. Der tägliche Wechsel des Zufallswerts löscht diese Datensätze nicht. +Die Ereignis- und Sitzungsdatensätze werden für 24 Monate in der aktiven Analytics-Datenbank gespeichert und anschließend gelöscht. Sicherungskopien der Datenbank werden bis zu sechs Monate aufbewahrt. Bereits aus der aktiven Datenbank gelöschte Datensätze können deshalb noch bis zum Ablauf dieser Frist in Sicherungskopien enthalten sein. + Rechtsgrundlage ist Art. 6 Abs. 1 lit. f DSGVO. Unser berechtigtes Interesse ist, die Nutzung unserer Inhalte zu verstehen und das Angebot anhand zusammengefasster Statistiken zu verbessern. Dein Recht auf Widerspruch erläutern wir im gesonderten Abschnitt „Widerspruchsrecht“. ### Schriftarten @@ -69,6 +71,8 @@ Die Seiten verlinken auf die Repositorys der Projekte bei GitHub. Erst wenn du e Wenn du uns eine E-Mail schickst, verarbeiten wir deine E-Mail-Adresse, gegebenenfalls deinen Namen, den Inhalt der Nachricht und mitgesendete Anhänge. Diese Angaben verwenden wir, um deine Anfrage zu bearbeiten und dir zu antworten. +Unser E-Mail-Postfach wird ausschließlich bei der Hetzner Online GmbH betrieben. Eingehende Nachrichten werden nicht an einen anderen E-Mail-Anbieter weitergeleitet. + Rechtsgrundlage ist Art. 6 Abs. 1 lit. f DSGVO. Unser berechtigtes Interesse liegt darin, Fragen zu unseren Projekten und unserem Angebot zu beantworten. Geht es um einen Vertrag mit dir oder um vorvertragliche Maßnahmen auf deine Anfrage, ist Art. 6 Abs. 1 lit. b DSGVO die Rechtsgrundlage. Du entscheidest, welche Angaben du uns schickst. Ohne eine erreichbare Antwortadresse und die für dein Anliegen nötigen Informationen können wir deine Anfrage gegebenenfalls nicht beantworten. @@ -79,6 +83,8 @@ Wir löschen die Korrespondenz, sobald die Anfrage abschließend bearbeitet ist Die **Hetzner Online GmbH**, Industriestr. 25, 91710 Gunzenhausen, Deutschland, stellt die Server-Infrastruktur für diese Webseite und unsere Plausible-Instanz bereit. Dabei verarbeitet Hetzner Daten als Hosting-Dienstleister in unserem Auftrag. Die hierfür eingesetzten Server befinden sich in der EU. +Hetzner betreibt außerdem unser E-Mail-Postfach und verarbeitet die dort eingehenden Nachrichten in unserem Auftrag. + Plausible ist in dieser Konfiguration die von uns betriebene Software, kein externer Analytics-Dienst. Die Auswertung findet auf unserer Instanz statt. ## 5. Deine Rechte diff --git a/src/content/legal/en/privacy.md b/src/content/legal/en/privacy.md index 11958b8..59be0c3 100644 --- a/src/content/legal/en/privacy.md +++ b/src/content/legal/en/privacy.md @@ -55,6 +55,8 @@ Plausible processes the IP address and user agent to determine the approximate l Plausible stores individual event and session records from which aggregated statistics are calculated. The daily change of the random value does not delete these records. +Event and session records are stored in the active analytics database for 24 months and then deleted. Database backups are kept for up to six months. Records already deleted from the active database may therefore remain in backups until that retention period expires. + The legal basis is Art. 6 (1) (f) GDPR. Our legitimate interest is to understand how our content is used and to improve the website using aggregated statistics. We explain your right to object in the separate “Right to object” section. ### Fonts @@ -69,6 +71,8 @@ The pages link to the projects' repositories on GitHub. Your browser connects to If you send us an email, we process your email address, your name if provided, the message content and any attachments. We use these details to handle your enquiry and reply to you. +Our email mailbox is hosted exclusively by Hetzner Online GmbH. Incoming messages are not forwarded to another email provider. + The legal basis is Art. 6 (1) (f) GDPR. Our legitimate interest is to answer questions about our projects and services. If your enquiry concerns a contract with you or steps taken at your request before entering into a contract, the legal basis is Art. 6 (1) (b) GDPR. You decide which details to send us. Without a working reply address and the information needed for your enquiry, we may be unable to answer it. @@ -79,6 +83,8 @@ We delete the correspondence once the enquiry has been fully resolved and the da **Hetzner Online GmbH**, Industriestr. 25, 91710 Gunzenhausen, Germany, provides the server infrastructure for this website and our Plausible instance. Hetzner processes data on our behalf as a hosting provider. The servers used for these services are located in the EU. +Hetzner also hosts our email mailbox and processes incoming messages on our behalf. + In this setup, Plausible is software we operate, not an external analytics service. Analytics are processed on our own instance. ## 5. Your rights From f537f48c8b30877d60d1d430c6a0f8f1c3b82894 Mon Sep 17 00:00:00 2001 From: Stefan Popp Date: Mon, 19 Oct 2026 20:59:40 +0200 Subject: [PATCH 3/3] Align privacy copy with confirmed server log retention --- CHANGELOG.md | 5 +++-- README.md | 33 +++++++++++++++++---------------- src/content/legal/de/privacy.md | 10 +++++++--- src/content/legal/en/privacy.md | 10 +++++++--- 4 files changed, 34 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb70012..0b6369a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,8 +6,9 @@ visitor identifiers from stored event/session records, explain email enquiries and hosting, and give the right to object its own section. Remove blanket claims about third parties and transfers. Name Hetzner as the sole email provider, without forwarding to other email providers. - Prepare the 24-month analytics retention statement and explain the separate backup retention; - publication awaits confirmation of the server changes documented in the README. + State the confirmed 24-month analytics retention and separate backup retention. Distinguish + truncated IPs in access logs from full IPs in error/security logs (at most 14 days), with a + two-day limit for the separate fail2ban access logs. - **Image Update Monitor:** describe rollback images and supported database dumps precisely, explain that they do not replace a full backup, and qualify the default dump behaviour. - **Stellwerk:** name Codex alongside Claude Code in homepage copy and page metadata. diff --git a/README.md b/README.md index 9e5f377..e21b446 100644 --- a/README.md +++ b/README.md @@ -78,22 +78,23 @@ email provider. Both privacy pages now name that processing role. The operator a chose to retain the existing email/postal contact details without adding another contact channel. The legal notices are unchanged by that decision; this does not establish compliance with § 5 DDG. -The privacy pages are prepared for the operator's target configuration: 24 months for Plausible -event/session records in the active database and anonymised server logs retained for at most 14 days. -The operator is implementing these settings in a separate session. The draft must not be published -until that implementation has been confirmed against the actual configuration. - -Before publishing this update: - -- Confirm deletion of Plausible event/session records after 24 months and anonymisation/expiry of - all logs relevant to website and analytics requests, including access, error and proxy logs. -- Confirm the final backup retention. The privacy pages separately describe up to six months for - database backups, as found by the server audit. Amend this if the implementation changes it; - deletion from the active database does not itself delete copies in backups. -- The newly drafted email deletion criteria must match actual handling. -- Assess the actual Plausible setup under § 25 TDDDG and the GDPR, including scroll depth and active - time measurement. Cookie-free operation alone does not resolve this question. The existing - Art. 6 (1) (f) GDPR basis has not been independently approved by this text update. +The operator confirmed the server changes on 2026-10-19. Both privacy pages now reflect the +implementation recorded in the shared operational notes: + +- Website and analytics access logs use truncated IP addresses and are retained for at most 14 days. +- Error and security logs can contain full IP addresses and are retained for at most 14 days. + The separate access logs used by fail2ban are retained for at most two days. +- Plausible event/session records expire after 24 months in the active database. Database backups + are retained for up to six months, so deleted records can remain in backups for that period. + +This closes the pending confirmation of the logging and retention configuration. The source is the +operator's confirmation and implementation record; this text update did not rerun the server audit. +The disclosure concerns the website and analytics service, not every application's logs or data. + +The email deletion criteria remain an operational responsibility. The concrete Plausible setup still +needs assessment under § 25 TDDDG and the GDPR, including scroll depth and active time measurement. +Cookie-free operation alone does not resolve this question. The existing Art. 6 (1) (f) GDPR basis +has not been independently approved by this text update. The review does not change server configuration or publish a release. Its source references are [Plausible's data policy](https://plausible.io/data-policy), the diff --git a/src/content/legal/de/privacy.md b/src/content/legal/de/privacy.md index 79e3dd1..f521e4c 100644 --- a/src/content/legal/de/privacy.md +++ b/src/content/legal/de/privacy.md @@ -25,15 +25,19 @@ E-Mail: [support@azentrius.com](mailto:support@azentrius.com) ### Server-Logfiles -Unser Webserver erfasst beim Abruf dieser Webseite automatisch folgende Daten in Server-Logfiles: +Beim Abruf dieser Webseite und unseres Analytics-Dienstes erfasst unser Webserver automatisch folgende Daten in Zugriffsprotokollen: -- IP-Adresse des anfragenden Rechners (anonymisiert) +- Gekürzte IP-Adresse des anfragenden Rechners (bei IPv4 wird der letzte Block auf 0 gesetzt, bei IPv6 bleiben nur die ersten 32 Bit erhalten) - Datum und Uhrzeit des Zugriffs - Angefragte URL - HTTP-Statuscode - Übertragene Datenmenge -Diese Daten werden ausschließlich zur Sicherstellung des Betriebs und zur Fehleranalyse verarbeitet (Art. 6 Abs. 1 lit. f DSGVO). Die Speicherdauer beträgt maximal 14 Tage. +Diese Zugriffsprotokolle werden höchstens 14 Tage aufbewahrt. + +**Fehler- und Sicherheitsprotokolle:** Zur Fehleranalyse sowie zur Erkennung und Abwehr von Angriffen führen wir zusätzlich Protokolle, die vollständige IP-Adressen, Zeitpunkte und technische Angaben zur Anfrage oder zum Sicherheitsereignis enthalten können. Diese Protokolle werden ebenfalls höchstens 14 Tage aufbewahrt. Die gesonderten Zugriffsprotokolle für die automatische Angriffserkennung mit fail2ban werden höchstens zwei Tage aufbewahrt. + +Rechtsgrundlage ist Art. 6 Abs. 1 lit. f DSGVO. Unser berechtigtes Interesse besteht darin, den sicheren Betrieb der Webseite und des Analytics-Dienstes zu gewährleisten, Störungen zu beheben und Angriffe abzuwehren. ### Cookies diff --git a/src/content/legal/en/privacy.md b/src/content/legal/en/privacy.md index 59be0c3..9ba77b7 100644 --- a/src/content/legal/en/privacy.md +++ b/src/content/legal/en/privacy.md @@ -25,15 +25,19 @@ Email: [support@azentrius.com](mailto:support@azentrius.com) ### Server log files -When this website is accessed, our web server automatically records the following data in server log files: +When this website and our analytics service are accessed, our web server automatically records the following data in access logs: -- IP address of the requesting computer (anonymised) +- Truncated IP address of the requesting computer (the last IPv4 block is set to 0; for IPv6, only the first 32 bits are retained) - Date and time of access - Requested URL - HTTP status code - Amount of data transferred -This data is processed solely to keep the service running and to analyse errors (Art. 6 (1) (f) GDPR). It is kept for no more than 14 days. +These access logs are kept for no more than 14 days. + +**Error and security logs:** To analyse errors and detect and prevent attacks, we also keep logs that may contain full IP addresses, timestamps and technical details of the request or security event. These logs are also kept for no more than 14 days. The separate access logs used by fail2ban for automatic attack detection are kept for no more than two days. + +The legal basis is Art. 6 (1) (f) GDPR. Our legitimate interest is to keep the website and analytics service secure, resolve faults and prevent attacks. ### Cookies