Apply minimal legal-review follow-ups

Privacy:
- Sentry: add Art. 44 ff. DSGVO third-country transfer note (Sentry
  is US-based; we rely on SCCs). Soften "no IPs" → "IP-Adressen
  werden nicht aktiv gespeichert" per reviewer's preferred wording.
  Drop the unverified "Frankfurt" hosting claim; keep
  Auftragsverarbeiter framing.
- SMTP → "externer SMTP-Dienst" per reviewer's phrasing.
- Storage-durations section: add explicit alpha-reset caveat so it
  aligns with Terms §4 (database resets).

Terms:
- § 1 service wording: "kostenloser Dienst" → "derzeit kostenloser
  Dienst" (leaves pricing model open without promising free-forever).
- § 7 acceptable use: scraping clause softened to "kein massenhaftes
  automatisiertes Auslesen von Daten" (drops the specific "to build
  competing services" qualifier).

Imprint:
- Normalise address formatting: multi-line across both DE blocks and
  the EN § 5 TMG block (§ 18 MStV and EN block previously used a
  comma-separated single line). One style only, everywhere.
- Add whitespace-nowrap to the mailto link so the email address
  never breaks mid-word on narrow viewports.

No changes to legal bases, server-logs section, storage durations
themselves, or any third-party other than Sentry + SMTP wording.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Ullrich Schäfer 2026-04-19 07:27:56 +02:00
parent c9758a65d2
commit bc311ab7bc
No known key found for this signature in database
GPG key ID: A32FF691A0F752D9
3 changed files with 52 additions and 26 deletions

View file

@ -39,7 +39,10 @@ export default function ImprintPage() {
<h2 className="text-lg font-semibold text-gray-900">Kontakt</h2>
<p className="mt-2">
E-Mail:{" "}
<a className="text-blue-600 hover:underline" href={`mailto:${operator.email}`}>
<a
className="whitespace-nowrap text-blue-600 hover:underline"
href={`mailto:${operator.email}`}
>
{operator.email}
</a>
</p>
@ -52,8 +55,9 @@ export default function ImprintPage() {
<address className="mt-2 not-italic">
{operator.responsiblePerson}
<br />
{operator.address.street}, {operator.address.postalCode}{" "}
{operator.address.city}
{operator.address.street}
<br />
{operator.address.postalCode} {operator.address.city}
</address>
</div>
@ -100,8 +104,12 @@ export default function ImprintPage() {
Service provider (§ 5 TMG)
</h3>
<address className="mt-2 not-italic text-sm">
{operator.name}, {operator.address.street},{" "}
{operator.address.postalCode} {operator.address.city},{" "}
{operator.name}
<br />
{operator.address.street}
<br />
{operator.address.postalCode} {operator.address.city}
<br />
{operator.address.country}
</address>
</div>
@ -110,7 +118,10 @@ export default function ImprintPage() {
<h3 className="text-base font-semibold text-gray-900">Contact</h3>
<p className="mt-2 text-sm">
Email:{" "}
<a className="text-blue-600 hover:underline" href={`mailto:${operator.email}`}>
<a
className="whitespace-nowrap text-blue-600 hover:underline"
href={`mailto:${operator.email}`}
>
{operator.email}
</a>
</p>

View file

@ -98,7 +98,8 @@ export default function PrivacyPage() {
Fehlermeldungen, Browser-/OS-Information aus dem User-Agent,
Performance-Metriken. Bei eingeloggten Journal-Nutzer:innen
zusätzlich die Nutzer-ID (keine E-Mail, kein Benutzername).
Keine IP-Adressen, keine Cookies, keine Formulareingaben.
IP-Adressen werden nicht aktiv gespeichert, ebenso keine Cookies
und keine Formulareingaben.
</li>
</ul>
<p className="mt-3 text-sm text-gray-600">
@ -182,10 +183,19 @@ export default function PrivacyPage() {
<li>Server-Logfiles: maximal 14 Tage</li>
<li>Fehlerdaten (Sentry): 90 Tage</li>
</ul>
<p className="mt-3 text-sm text-gray-700">
Hinweis Alpha: Während der Alpha-Phase behält sich der Betreiber
ausdrücklich vor, die Datenbank zurückzusetzen oder einzelne
Datensätze zu löschen. Dies kann zu Datenverlust führen, bevor Sie
eine Löschung veranlassen. Details dazu in den Nutzungsbedingungen.
</p>
<p className="mt-3 text-sm text-gray-600">
<em>English.</em> Account and content kept until you delete them.
Ephemeral data (sessions, magic-link tokens, logs, Sentry events)
deleted automatically on the schedules above.
deleted automatically on the schedules above. Alpha caveat: the
operator may reset the database or delete individual records
during alpha, which can cause data loss before you request
deletion. See the Terms of Service.
</p>
</section>
@ -205,10 +215,16 @@ export default function PrivacyPage() {
Performance-Monitoring. Was übermittelt wird: Stacktraces,
Fehlertext, Browser-/OS-Informationen aus dem User-Agent,
Performance-Daten; bei eingeloggten Journal-Nutzer:innen
zusätzlich die Nutzer-ID. <strong>Nicht</strong> übermittelt:
IP-Adresse, Cookies, vollständige HTTP-Header
(<code>sendDefaultPii</code> ist deaktiviert). Keine
Session-Replays. Hosting innerhalb der EU (Frankfurt).
zusätzlich die Nutzer-ID. IP-Adressen werden nicht aktiv
gespeichert (<code>sendDefaultPii</code> ist deaktiviert), ebenso
keine Cookies und keine vollständigen HTTP-Header. Keine
Session-Replays. Sentry agiert als externer Dienstleister
(Auftragsverarbeiter) für die Fehlerbehandlung. Da Sentry ein
Anbieter mit Sitz in den USA ist, kann im Einzelfall eine
Übermittlung personenbezogener Daten in ein Drittland im Sinne
der Art. 44 ff. DSGVO stattfinden; wir stützen uns hierbei auf
die von Sentry bereitgestellten
Standardvertragsklauseln.
</li>
<li>
<strong>OpenStreetMap</strong> Kartenkacheln werden beim Anzeigen
@ -237,10 +253,11 @@ export default function PrivacyPage() {
selbst gehosteten Instanz. Keine Weitergabe an Dritte.
</li>
<li>
<strong>SMTP-Versand</strong> Transaktions-E-Mails (Magic Link,
Willkommensnachricht) werden über einen SMTP-Dienst versendet.
Dabei wird die E-Mail-Adresse der Empfänger:in an den SMTP-Dienst
übergeben.
<strong>E-Mail-Versand</strong> Transaktions-E-Mails (Magic
Link, Willkommensnachricht) werden über einen konfigurierten
externen SMTP-Dienst versendet. Dabei wird die E-Mail-Adresse
der Empfänger:in an diesen Dienst übergeben. Selbst-betriebene
Instanzen konfigurieren ihren eigenen Mailserver.
</li>
<li>
<strong>Hosting</strong> Die Dienste werden in Rechenzentren
@ -250,7 +267,7 @@ export default function PrivacyPage() {
</ul>
<p className="mt-3 text-sm text-gray-600">
<em>English.</em> Third parties and what they receive: Sentry (error
details, no IPs/cookies, EU-hosted); OpenStreetMap tile servers
details, no IPs/cookies); OpenStreetMap tile servers
(your IP and user-agent, directly from your browser, to load map
tiles); Overpass (via our server-side proxy, so upstream only sees
our server); BRouter (self-hosted, no third party involved); SMTP
@ -366,7 +383,7 @@ export default function PrivacyPage() {
<li>Journal server: always on</li>
<li>Journal browser: only after login, torn down on logout</li>
<li>Planner: server only; the browser never loads Sentry</li>
<li>No IPs, no cookies, no headers (<code>sendDefaultPii: false</code>)</li>
<li>IPs not actively stored, no cookies, no full headers (<code>sendDefaultPii: false</code>)</li>
<li>No replays (replay integration not installed, sample rates 0)</li>
<li>User ID only (no email/username) on Journal-logged-in events</li>
</ul>

View file

@ -23,7 +23,7 @@ export default function TermsPage() {
1. Gegenstand und Alpha-Status
</h2>
<p className="mt-2 text-sm">
trails.cool ist ein experimenteller, kostenloser Dienst zur Planung
trails.cool ist ein experimenteller, derzeit kostenloser Dienst zur Planung
und Dokumentation von Outdoor-Aktivitäten. Der Dienst befindet sich
in aktiver Entwicklung (Alpha). Funktionen, Schnittstellen und
gespeicherte Daten können jederzeit ohne Vorankündigung geändert,
@ -31,7 +31,8 @@ export default function TermsPage() {
Verfügbarkeitsgarantie besteht nicht.
</p>
<p className="mt-2 text-xs text-gray-600">
<em>English.</em> trails.cool is an experimental, free service in
<em>English.</em> trails.cool is an experimental service,
currently free of charge, in
active alpha development. Features, data, and availability can
change at any time without notice. No availability is guaranteed.
</p>
@ -136,15 +137,12 @@ export default function TermsPage() {
Abfragen, Denial-of-Service)
</li>
<li>Kein Umgehen technischer Schutzmaßnahmen</li>
<li>
Keine Verwendung des Dienstes zum Aufbau konkurrierender
Angebote durch massenhaftes Abziehen von Daten
</li>
<li>Kein massenhaftes automatisiertes Auslesen von Daten</li>
</ul>
<p className="mt-2 text-xs text-gray-600">
<em>English.</em> No illegal content, no abuse (spam, flooding,
DoS), no circumvention of technical protections, no bulk scraping
to build competing services.
DoS), no circumvention of technical protections, no bulk
automated data extraction.
</p>
</div>