Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,19 @@
# 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.
Name Hetzner as the sole email provider, without forwarding to other email providers.
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.
- **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.
Expand Down
33 changes: 33 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,39 @@ 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.

### 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.

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 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
[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
Expand Down
12 changes: 6 additions & 6 deletions src/components/HomePage.astro
Original file line number Diff line number Diff line change
Expand Up @@ -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: [
Expand All @@ -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",
Expand All @@ -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: [
Expand All @@ -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",
Expand Down
4 changes: 2 additions & 2 deletions src/components/ProjectsPage.astro
Original file line number Diff line number Diff line change
Expand Up @@ -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: {
Expand All @@ -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: {
Expand Down
68 changes: 46 additions & 22 deletions src/content/legal/de/privacy.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -25,34 +25,43 @@ E-Mail: [[email protected]](mailto:[email protected])

### 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

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

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.

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.

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.
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 unser berechtigtes Interesse an einer datensparsamen Reichweitenmessung (Art. 6 Abs. 1 lit. f DSGVO).
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

Expand All @@ -62,21 +71,30 @@ 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.

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.

- **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
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.

## 4. Drittanbieter
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.

- **Hetzner Online GmbH** (Server-Hosting, Deutschland/Finnland)
- **Plausible Analytics (selbst gehostet):** Reichweitenmessung der Webseite, betrieben von Azentrius auf eigenem Server, kein externer Drittanbieter
## 4. Hosting und Datenempfänger

Es werden keine Daten in Drittländer außerhalb der EU/EWR übermittelt.
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

Unter den jeweiligen gesetzlichen Voraussetzungen hast du folgende Rechte:

- Auskunft (Art. 15 DSGVO)
- Berichtigung (Art. 16 DSGVO)
- Löschung (Art. 17 DSGVO)
Expand All @@ -87,8 +105,14 @@ Es werden keine Daten in Drittländer außerhalb der EU/EWR übermittelt.

Kontakt: [[email protected]](mailto:[email protected])

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 [[email protected]](mailto:[email protected]).

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

[[email protected]](mailto:[email protected])
Loading
Loading