Files
mintel.me/apps/web/src/content/legal/privacy.tsx
T
mmintelandClaude Opus 5.5 75993100fa feat: German as the main language, English under /en, with a language switch
The site now exists in German (at the root, with /impressum and /datenschutz)
and English (/en). A request without a language follows the visitor's choice
from the language switch, then the browser language, then German; the old
English legal addresses move to /en for good.

All visible texts are data in src/content/de.ts and en.ts, so components hold
none of their own. The header carries a DE/EN switch whose bit curtain covers
the page while it is swapped and reopens at the same reading position. Title,
description, canonical, hreflang, Open Graph, the share image, the sitemap and
the structured data are per language. The privacy notice now describes the
cookie that remembers the chosen language.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 13:07:22 +02:00

236 lines
9.6 KiB
TypeScript

import { EmailLink } from "@/src/components/EmailLink";
import { LegalSection } from "@/src/components/LegalPage";
import { OWNER } from "@/src/content/site";
import { LOCALE_COOKIE, type Locale } from "@/src/domain/locale";
import type { LegalText } from "./types";
const LINK = "font-bold text-slate-900 underline-offset-4 hover:underline";
const address = (country: string): string =>
`${OWNER.name}, ${OWNER.street}, ${OWNER.postalCode} ${OWNER.locality}, ${country}.`;
/**
* The privacy notice in both languages. It describes what the code actually
* processes; keep it in step with the code (the language cookie is set by
* LanguageSwitch, the detection happens in proxy.ts).
*/
export const PRIVACY: Readonly<Record<Locale, LegalText>> = {
de: {
title: "Datenschutz",
description: "Wie mintel.me mit personenbezogenen Daten umgeht.",
Body: () => (
<>
<LegalSection heading="Verantwortlicher">
<p>
{address("Deutschland")}
<br />
E-Mail: <EmailLink className={LINK} />
</p>
</LegalSection>
<LegalSection heading="Kurz gesagt">
<p>
Diese Website zeigt keine Werbung und bindet keine Inhalte von
Dritten ein. Schriften und Bilder werden von dieser Website selbst
ausgeliefert. Ein Cookie wird nur gesetzt, wenn Sie die Sprache
umschalten (siehe „Sprache“).
</p>
</LegalSection>
<LegalSection heading="Server-Protokolle">
<p>
Wenn Sie eine Seite öffnen, verarbeitet der Server technische Daten,
die Ihr Browser sendet: Ihre IP-Adresse, den Zeitpunkt, die
angeforderte Seite und den Browsertyp. Das ist nötig, um die Website
auszuliefern und sicher zu betreiben. Rechtsgrundlage ist mein
berechtigtes Interesse am Betrieb der Website (Art. 6 Abs. 1 lit. f
DSGVO).
</p>
</LegalSection>
<LegalSection heading="Sprache">
<p>
Die Website gibt es auf Deutsch und Englisch. Welche Sprache Sie
zuerst sehen, richtet sich nach der Spracheinstellung, die Ihr
Browser bei jedem Seitenaufruf mitsendet. Sie wird dafür nicht
gespeichert.
</p>
<p>
Wenn Sie die Sprache selbst umschalten, speichert die Website Ihre
Wahl in einem Cookie namens „{LOCALE_COOKIE}“, damit Sie nicht
wieder zurückgeleitet werden. Es enthält nur das Sprachkürzel („de“
oder „en“), gilt ein Jahr und wird für nichts anderes verwendet. Es
ist für die von Ihnen gewünschte Funktion erforderlich (§ 25 Abs. 2
Nr. 2 TDDDG).
</p>
</LegalSection>
<LegalSection heading="Besucherstatistik">
<p>
Ich zähle Seitenaufrufe mit Umami, das ich auf meinem eigenen Server
betreibe. Es arbeitet ohne Cookies und erstellt keine Profile
einzelner Besucher. Die Daten werden nicht an Dritte weitergegeben.
Rechtsgrundlage ist mein berechtigtes Interesse zu verstehen, wie
die Website genutzt wird (Art. 6 Abs. 1 lit. f DSGVO).
</p>
</LegalSection>
<LegalSection heading="Fehlerberichte">
<p>
Wenn auf dieser Website technisch etwas fehlschlägt, wird ein
Fehlerbericht an einen Dienst zur Fehlererfassung gesendet, den ich
auf meinem eigenen Server betreibe. Er enthält technische Angaben
wie die Seite, den Browser und die Fehlermeldung. Sitzungen werden
nicht aufgezeichnet. Rechtsgrundlage ist mein berechtigtes Interesse
an einer funktionierenden Website (Art. 6 Abs. 1 lit. f DSGVO).
</p>
</LegalSection>
<LegalSection heading="Speicherung in Ihrem Browser">
<p>
Wenn das Laden einer Seite fehlschlägt, speichert die Website einen
Zeitstempel im Session Storage Ihres Browsers, damit sie nur einmal
neu lädt. Er wird gelöscht, wenn Sie den Tab schließen, und
nirgendwohin übertragen.
</p>
</LegalSection>
<LegalSection heading="Wenn Sie mir schreiben">
<p>
Wenn Sie mir eine E-Mail senden, verarbeite ich Ihre Nachricht und
Ihre Adresse, um Ihnen zu antworten und gegebenenfalls einen Vertrag
vorzubereiten (Art. 6 Abs. 1 lit. b DSGVO). Ich bewahre die
Korrespondenz so lange auf, wie es dafür nötig ist oder das Gesetz
es verlangt.
</p>
</LegalSection>
<LegalSection heading="Ihre Rechte">
<p>Sie haben das Recht,</p>
<ul>
<li>
Auskunft darüber zu verlangen, welche Daten ich über Sie habe
</li>
<li>unrichtige Daten berichtigen zu lassen</li>
<li>
Ihre Daten löschen oder deren Verarbeitung einschränken zu lassen
</li>
<li>
einer Verarbeitung zu widersprechen, die auf berechtigtem
Interesse beruht
</li>
<li>Ihre Daten in einem übertragbaren Format zu erhalten</li>
<li>sich bei einer Datenschutz-Aufsichtsbehörde zu beschweren</li>
</ul>
<p>
Um eines dieser Rechte auszuüben, schreiben Sie an{" "}
<EmailLink className={LINK} />.
</p>
</LegalSection>
</>
),
},
en: {
title: "Privacy",
description: "How mintel.me handles personal data.",
Body: () => (
<>
<LegalSection heading="Who is responsible">
<p>
{address("Germany")}
<br />
Email: <EmailLink className={LINK} />
</p>
</LegalSection>
<LegalSection heading="In short">
<p>
This website shows no advertising and includes no content from third
parties. Fonts and images are served from this website itself. A
cookie is only set when you switch the language (see
&quot;Language&quot;).
</p>
</LegalSection>
<LegalSection heading="Server logs">
<p>
When you open a page, the server processes technical data that your
browser sends: your IP address, the time, the page requested and the
browser type. This is necessary to deliver the website and to keep
it secure. The legal basis is my legitimate interest in running the
website (Article 6(1)(f) GDPR).
</p>
</LegalSection>
<LegalSection heading="Language">
<p>
The website exists in German and English. Which language you see
first depends on the language setting your browser sends with every
page request. It is not stored for that.
</p>
<p>
If you switch the language yourself, the website stores your choice
in a cookie named &quot;{LOCALE_COOKIE}&quot; so that you are not
sent back. It contains only the language code (&quot;de&quot; or
&quot;en&quot;), lasts one year and is used for nothing else. It is
necessary for the function you asked for (section 25(2) no. 2
TDDDG).
</p>
</LegalSection>
<LegalSection heading="Visitor statistics">
<p>
I count page views with Umami, which I run on my own server. It
works without cookies and does not create profiles of individual
visitors. The data is not passed on to third parties. The legal
basis is my legitimate interest in understanding how the website is
used (Article 6(1)(f) GDPR).
</p>
</LegalSection>
<LegalSection heading="Error reports">
<p>
If something on this website fails technically, an error report is
sent to an error tracking service that I run on my own server. It
contains technical details such as the page, the browser and the
error message. Sessions are not recorded. The legal basis is my
legitimate interest in a working website (Article 6(1)(f) GDPR).
</p>
</LegalSection>
<LegalSection heading="Storage in your browser">
<p>
If loading a page fails, the website stores a timestamp in your
browser&apos;s session storage so that it reloads only once. It is
deleted when you close the tab and is not sent anywhere.
</p>
</LegalSection>
<LegalSection heading="When you write to me">
<p>
If you send me an email, I process what you write and your address
in order to answer you and, if it comes to that, to prepare a
contract (Article 6(1)(b) GDPR). I keep the correspondence for as
long as it is needed for that purpose or as the law requires.
</p>
</LegalSection>
<LegalSection heading="Your rights">
<p>You have the right to:</p>
<ul>
<li>ask what data I hold about you</li>
<li>have incorrect data corrected</li>
<li>have your data deleted or its processing restricted</li>
<li>object to processing that is based on legitimate interest</li>
<li>receive your data in a portable format</li>
<li>complain to a data protection supervisory authority</li>
</ul>
<p>
To use any of these rights, write to <EmailLink className={LINK} />.
</p>
</LegalSection>
</>
),
},
};