Add Datenschutzerklärung, two blog posts, and a /uses colophon

- datenschutz.astro: DSGVO privacy policy (server logfiles, Hetzner as
  Auftragsverarbeiter per Art. 28, cookieless Umami, self-hosted fonts,
  data-subject rights, supervisory-authority complaint).
- consts.ts: extract shared LEGAL entity data; Impressum now reads from it.
- blog: "Why my calendar app has no internet permission" and
  "Open standards as a constraint, not a checkbox".
- uses.astro: colophon of the site stack, Floret apps, and self-hosted infra.
- Footer: add Uses + Datenschutz links alongside Impressum.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-28 14:54:49 +02:00
parent 108e790621
commit d1acda5a93
7 changed files with 353 additions and 16 deletions

138
src/pages/datenschutz.astro Normal file
View File

@@ -0,0 +1,138 @@
---
import BaseLayout from '../layouts/BaseLayout.astro';
import { SITE, LEGAL } from '../consts';
// Contact data is shared with the Impressum via the LEGAL object in consts.ts.
// Hosting provider (Auftragsverarbeiter): Hetzner Online GmbH — an AVV per
// Art. 28 DSGVO must be concluded (Hetzner provides one in the customer panel).
---
<BaseLayout
title="Datenschutzerklärung"
description={`Datenschutzerklärung nach DSGVO für ${SITE.url}.`}
width="narrow"
>
<article class="prose">
<h1 class="page-title">Datenschutzerklärung</h1>
<h2>1. Verantwortlicher</h2>
<p>
Verantwortlicher im Sinne der Datenschutz-Grundverordnung (DSGVO) ist:
</p>
<p>
{LEGAL.business}<br />
{LEGAL.street}<br />
{LEGAL.city}<br />
E-Mail: <a href={`mailto:${LEGAL.email}`}>{LEGAL.email}</a>
</p>
<h2>2. Grundsätzliches</h2>
<p>
Der Schutz Ihrer personenbezogenen Daten ist mir wichtig. Diese Website ist
bewusst datensparsam aufgebaut: Es werden keine Cookies gesetzt, keine
Inhalte von Drittanbietern (z.&nbsp;B. Google Fonts, CDNs oder Werbenetze)
nachgeladen und keine geräteübergreifenden Profile gebildet. Schriftarten
werden vom eigenen Server ausgeliefert, sodass beim Seitenaufruf keine
Verbindung zu Dritten entsteht.
</p>
<h2>3. Hosting und Server-Logfiles</h2>
<p>
Diese Website wird auf selbst verwalteter Infrastruktur betrieben, die bei
der <strong>Hetzner Online GmbH</strong>, Industriestr.&nbsp;25,
91710&nbsp;Gunzenhausen, Deutschland, angemietet ist. Hetzner verarbeitet
die nachfolgend genannten Daten als Auftragsverarbeiter auf Grundlage eines
Vertrags zur Auftragsverarbeitung gemäß Art.&nbsp;28 DSGVO. Die Server
stehen in Rechenzentren innerhalb der Europäischen Union (Deutschland bzw.
Finnland); eine Datenübermittlung in ein Drittland findet nicht statt.
</p>
<p>
Beim Aufruf der Seiten erhebt und speichert der Server automatisch
Informationen in sogenannten Server-Logfiles, die Ihr Browser übermittelt:
</p>
<ul>
<li>IP-Adresse des anfragenden Geräts,</li>
<li>Datum und Uhrzeit des Zugriffs,</li>
<li>Name und URL der abgerufenen Datei,</li>
<li>übertragene Datenmenge sowie Meldung über erfolgreichen Abruf,</li>
<li>verwendeter Browsertyp und dessen Version,</li>
<li>Betriebssystem sowie die zuvor besuchte Seite (Referrer), sofern übermittelt.</li>
</ul>
<p>
Diese Verarbeitung erfolgt zum Zweck der technischen Bereitstellung,
Stabilität und Sicherheit der Website. Rechtsgrundlage ist das berechtigte
Interesse an einem fehlerfreien und sicheren Betrieb gemäß
Art.&nbsp;6&nbsp;Abs.&nbsp;1&nbsp;lit.&nbsp;f DSGVO. Die Logfiles werden
nicht mit anderen Datenquellen zusammengeführt und nach kurzer Zeit
gelöscht, soweit sie nicht zur Aufklärung eines konkreten
Missbrauchsfalls benötigt werden.
</p>
<h2>4. Webanalyse mit Umami</h2>
<p>
Zur Reichweitenmessung nutze ich <strong>Umami</strong>, eine
datenschutzfreundliche Analyse-Software, die ich selbst hoste. Umami
arbeitet <strong>ohne Cookies</strong> und ohne über mehrere Websites
hinweg wiedererkennbare Kennungen. Erhoben werden ausschließlich
aggregierte, anonymisierte Nutzungsdaten etwa aufgerufene Seiten,
ungefähre Herkunft (Land), Gerätetyp und Verweisquelle. Es werden keine
personenbezogenen Profile gebildet und keine Daten an Dritte weitergegeben.
</p>
<p>
Rechtsgrundlage ist das berechtigte Interesse an einer datensparsamen
Auswertung der Websitenutzung gemäß
Art.&nbsp;6&nbsp;Abs.&nbsp;1&nbsp;lit.&nbsp;f DSGVO. Da keine Cookies oder
vergleichbaren Technologien zum Einsatz kommen und keine
personenbeziehbaren Daten gespeichert werden, ist hierfür keine
Einwilligung erforderlich.
</p>
<h2>5. Kontaktaufnahme</h2>
<p>
Wenn Sie mich per E-Mail kontaktieren, werden die von Ihnen mitgeteilten
Daten (Ihre E-Mail-Adresse sowie der Inhalt Ihrer Nachricht) zur
Bearbeitung Ihrer Anfrage verarbeitet und gespeichert. Rechtsgrundlage ist
Art.&nbsp;6&nbsp;Abs.&nbsp;1&nbsp;lit.&nbsp;f DSGVO (Beantwortung Ihrer
Anfrage) bzw. Art.&nbsp;6&nbsp;Abs.&nbsp;1&nbsp;lit.&nbsp;b DSGVO, sofern
die Anfrage auf den Abschluss eines Vertrags gerichtet ist. Die Daten
werden gelöscht, sobald sie für die Bearbeitung nicht mehr erforderlich
sind und keine gesetzlichen Aufbewahrungspflichten entgegenstehen.
</p>
<h2>6. SSL-/TLS-Verschlüsselung</h2>
<p>
Diese Seite nutzt aus Sicherheitsgründen eine SSL-/TLS-Verschlüsselung. Eine
verschlüsselte Verbindung erkennen Sie am Schloss-Symbol in der
Adresszeile Ihres Browsers und am Präfix „https://“.
</p>
<h2>7. Ihre Rechte</h2>
<p>Ihnen stehen nach der DSGVO gegenüber dem Verantwortlichen folgende Rechte zu:</p>
<ul>
<li>Auskunft über die zu Ihrer Person gespeicherten Daten (Art.&nbsp;15 DSGVO),</li>
<li>Berichtigung unrichtiger Daten (Art.&nbsp;16 DSGVO),</li>
<li>Löschung Ihrer Daten (Art.&nbsp;17 DSGVO),</li>
<li>Einschränkung der Verarbeitung (Art.&nbsp;18 DSGVO),</li>
<li>Datenübertragbarkeit (Art.&nbsp;20 DSGVO),</li>
<li>
Widerspruch gegen die Verarbeitung, soweit diese auf
Art.&nbsp;6&nbsp;Abs.&nbsp;1&nbsp;lit.&nbsp;f DSGVO beruht
(Art.&nbsp;21 DSGVO).
</li>
</ul>
<p>
Zur Ausübung Ihrer Rechte genügt eine formlose Nachricht an die oben
genannte E-Mail-Adresse.
</p>
<h2>8. Beschwerderecht bei der Aufsichtsbehörde</h2>
<p>
Unbeschadet eines anderweitigen verwaltungsrechtlichen oder gerichtlichen
Rechtsbehelfs steht Ihnen das Recht auf Beschwerde bei einer
Datenschutz-Aufsichtsbehörde zu, insbesondere in dem Mitgliedstaat Ihres
Aufenthaltsorts, Ihres Arbeitsplatzes oder des Orts des mutmaßlichen
Verstoßes, wenn Sie der Ansicht sind, dass die Verarbeitung Ihrer Daten
gegen die DSGVO verstößt (Art.&nbsp;77 DSGVO).
</p>
</article>
</BaseLayout>

View File

@@ -1,20 +1,6 @@
---
import BaseLayout from '../layouts/BaseLayout.astro';
import { SITE } from '../consts';
// ─── Legal data ──────────────────────────────────────────────────────────────
// REPLACE the «…» placeholders with real, legally accurate values before going
// live. A German Impressum (§ 5 DDG) requires a summonable postal address —
// a P.O. box / Postfach is NOT sufficient. Leave `phone` empty to omit it.
const IMPRESSUM = {
business: 'IT-Dienstleister | Jean-Luc Makiola', // full Gewerbe name (§ 5 DDG)
person: SITE.author, // natural person responsible — 'Jean-Luc Makiola' (§ 18 MStV)
street: 'Mahlerstraße 10',
city: '14772 Brandenburg an der Havel',
email: 'mail@jeanlucmakiola.de',
phone: '', // e.g. '+49 ...' — rendered only if set
};
// ─────────────────────────────────────────────────────────────────────────────
import { SITE, LEGAL as IMPRESSUM } from '../consts';
---
<BaseLayout

75
src/pages/uses.astro Normal file
View File

@@ -0,0 +1,75 @@
---
import BaseLayout from '../layouts/BaseLayout.astro';
// A /uses colophon — the stack behind this site and the Floret apps.
// Add a "Desk / hardware" section here if you'd like to list your machine,
// editor, and peripherals — left out for now to avoid guessing.
---
<BaseLayout
title="Uses"
description="The stack behind this site, the Floret apps, and the infrastructure they run on."
width="narrow"
>
<article class="prose">
<h1 class="page-title">Uses</h1>
<p>
A running colophon of the tools and stack behind this site, the
<a href="/work">Floret apps</a>, and the infrastructure they run on. The
throughline: open, self-hostable standards, and as little reliance on
third-party services as I can manage.
</p>
<h2>This website</h2>
<ul>
<li>
Built with <a href="https://astro.build" rel="noopener">Astro</a> — a
static site, no client-side framework, content authored as Markdown in
the repo.
</li>
<li>
Typefaces are <a href="https://rsms.me/inter/" rel="noopener">Inter</a>
and <a href="https://www.jetbrains.com/lp/mono/" rel="noopener">JetBrains
Mono</a>, self-hosted via Fontsource — no Google Fonts CDN, so no
third-party request on page load.
</li>
<li>
Analytics is self-hosted <a href="https://umami.is" rel="noopener">Umami</a>:
cookieless, no cross-site tracking, no personal profiles. See the
<a href="/datenschutz">Datenschutzerklärung</a> for what that means.
</li>
<li>Icons from <a href="https://iconify.design" rel="noopener">Iconify</a> (Material Design Icons + Simple Icons).</li>
</ul>
<h2>The Floret apps</h2>
<ul>
<li><strong>Kotlin</strong> and <strong>Jetpack Compose</strong>, designed in <strong>Material 3 Expressive</strong>.</li>
<li>
No reinvented sync stack — each app is a front-end over a platform
provider (<code>CalendarContract</code>, the OpenTasks
<code>TaskContract</code>) and open standards like CalDAV, iCalendar, and
DecSync.
</li>
<li>
A shared design system, <a href="/work/floret-kit">floret-kit</a>, wired
in as a git submodule via a Gradle composite build — no published
artifacts, so every app stays reproducible.
</li>
<li>Released on <a href="https://f-droid.org" rel="noopener">F-Droid</a>, MIT-licensed, zero telemetry.</li>
</ul>
<h2>Self-hosted infrastructure</h2>
<p>Code, translations, builds, and this site all run on infrastructure I host myself.</p>
<ul>
<li><a href="https://gitea.jeanlucmakiola.de/makiolaj" rel="noopener">Gitea</a> for source hosting and as the home for smaller experiments.</li>
<li><a href="https://weblate.org" rel="noopener">Weblate</a> for community translations of the apps.</li>
<li><a href="https://coolify.io" rel="noopener">Coolify</a> to build and deploy this site.</li>
<li>Umami for the privacy-respecting analytics above.</li>
</ul>
<p class="muted">
This list grows as the stack does. Spotted something you'd ask about?
<a href="mailto:mail@jeanlucmakiola.de">Get in touch</a>.
</p>
</article>
</BaseLayout>