Abschnitt 06 uebergab die Eingaben bisher dem Mailprogramm der Besucherin. Jetzt geht der Inhalt per fetch an /api/contact beim Hoster; von dort stellt der Dienst site-mail die Nachricht ueber das Postfach info@anelia-wolf.com (Strato) zu - kein Formulardienst eines Dritten. Faellt der Endpunkt aus, bietet das Formular weiterhin den mailto-Weg an, damit keine Anfrage verloren geht. Ein unsichtbares Honeypot-Feld haelt automatisierte Sendungen ab. Die Datenschutzerklaerung zieht mit: neue Ziffer 5 (Kontaktformular) in beiden Sprachen, Ziffer 2 nennt jetzt drei statt zwei Verarbeitungsfaelle, die Folgeziffern sind neu durchnummeriert. README und HANDOVER beschreiben den Weg ebenfalls. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
307 lines
19 KiB
TypeScript
307 lines
19 KiB
TypeScript
/**
|
||
* Impressum & Datenschutzerklärung – aus docs/superpowers/specs/legal-templates.md.
|
||
* Platzhalter über ph("…") – sichtbar in --gold-deep, bis die Angaben vorliegen (LEGAL_TODO in @/lib/legal).
|
||
* Kein Link zur OS-Plattform (abgeschaltet 20.07.2025). „Bezeichnung“, nicht „Wortmarke“.
|
||
* Rechtstexte in Sie-Form (üblich, rechtlich gleichwertig).
|
||
*
|
||
* Zwei Sorten Absatz:
|
||
* – Pflichtangabe (String): muss vor dem Launch gefüllt sein, sonst bricht der
|
||
* Build ab (assertNoPlaceholders am Dateiende).
|
||
* – `opt("…")`: entfällt beim Launch-Flip vollständig, solange der Platzhalter
|
||
* steht. Nur für Absätze, die die Vorlage ausdrücklich als streichbar führt.
|
||
* Ein Platzhalter wird NIE aus einem Satz herausgeschnitten – das erzeugte Sätze
|
||
* wie „Anelia Wolf,,“ und ein Impressum ohne ladungsfähige Anschrift.
|
||
*/
|
||
import { assertNoPlaceholders, ph } from "@/lib/legal";
|
||
import { flags, site } from "@/lib/site";
|
||
|
||
/** Ein Absatz, der ohne seinen Platzhalter sinnlos ist und dann entfällt. */
|
||
export interface OptionalParagraph {
|
||
text: string;
|
||
optional: true;
|
||
}
|
||
|
||
export type LegalParagraph = string | OptionalParagraph;
|
||
|
||
const opt = (text: string): OptionalParagraph => ({ text, optional: true });
|
||
|
||
export interface LegalSection {
|
||
h2: string;
|
||
paragraphs: readonly LegalParagraph[];
|
||
}
|
||
|
||
export interface LegalPage {
|
||
meta: { title: string; description: string };
|
||
masthead: { center: string };
|
||
h1: string;
|
||
/** Meta-Zeile „Stand: …“ (DM Mono). */
|
||
stand: string;
|
||
sections: readonly LegalSection[];
|
||
}
|
||
|
||
const address = [ph("Straße und Hausnummer"), `${ph("PLZ")} ${ph("Ort")}`] as const;
|
||
|
||
export const impressum: LegalPage = {
|
||
meta: {
|
||
title: "Impressum",
|
||
description: "Impressum – Angaben gemäß § 5 DDG. Anelia Wolf, Keynote Speakerin, Trainerin und Coach.",
|
||
},
|
||
masthead: { center: "Impressum" },
|
||
h1: "Impressum",
|
||
stand: "Stand: September 2026",
|
||
sections: [
|
||
{
|
||
h2: "Angaben gemäß § 5 DDG",
|
||
paragraphs: [
|
||
site.name,
|
||
opt(
|
||
ph(
|
||
"Optional: Geschäftsbezeichnung, z. B. „Anelia Wolf – Sales Mentoring & Potential Development“ – nur, wenn sie tatsächlich so geführt wird",
|
||
),
|
||
),
|
||
address[0],
|
||
address[1],
|
||
"Deutschland",
|
||
],
|
||
},
|
||
{
|
||
h2: "Kontakt",
|
||
paragraphs: [`Telefon: ${site.phoneDisplay}`, `E-Mail: ${site.email}`],
|
||
},
|
||
{
|
||
h2: "Umsatzsteuer-Identifikationsnummer",
|
||
paragraphs: [
|
||
/* Beide Absätze streichbar: liegt keine Nummer vor, entfällt der ganze Abschnitt –
|
||
LegalPage rendert eine Sektion ohne Absätze nicht. */
|
||
opt(
|
||
`Umsatzsteuer-Identifikationsnummer gemäß § 27a Umsatzsteuergesetz: ${ph("DE XXXXXXXXX – oder Wirtschafts-Identifikationsnummer gemäß § 139c AO – oder diesen Abschnitt streichen")}`,
|
||
),
|
||
opt(ph("Optional, nur bei Kleinunternehmerin: „Gemäß § 19 UStG wird keine Umsatzsteuer berechnet.“")),
|
||
],
|
||
},
|
||
{
|
||
h2: "Berufshaftpflichtversicherung",
|
||
paragraphs: [
|
||
/* Besteht keine Versicherung, entfällt der Abschnitt vollständig. */
|
||
opt(
|
||
`Berufshaftpflichtversicherung: ${ph("Name und Anschrift des Versicherers")}, räumlicher Geltungsbereich: ${ph("z. B. Deutschland / Europa")} ${ph("– oder Abschnitt streichen, falls keine Versicherung besteht")}`,
|
||
),
|
||
],
|
||
},
|
||
{
|
||
h2: "Berufliche Tätigkeit",
|
||
paragraphs: [
|
||
"Keynote Speakerin, Trainerin und Coach (Persönlichkeits- und Verhaltensanalysen, 1:1 Coaching, Trainings & Workshops, Keynotes). Es handelt sich nicht um reglementierte Berufe; eine Kammerzugehörigkeit besteht nicht.",
|
||
],
|
||
},
|
||
{
|
||
h2: "Inhaltlich verantwortlich gemäß § 18 Abs. 2 MStV",
|
||
paragraphs: [`${site.name}, ${address[0]}, ${address[1]}`],
|
||
},
|
||
{
|
||
h2: "Verbraucherstreitbeilegung",
|
||
paragraphs: [
|
||
"Ich bin nicht bereit und nicht verpflichtet, an Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle im Sinne des Verbraucherstreitbeilegungsgesetzes (VSBG) teilzunehmen.",
|
||
],
|
||
},
|
||
{
|
||
h2: "Haftung für Inhalte",
|
||
paragraphs: [
|
||
"Die Inhalte dieser Website wurden mit größter Sorgfalt erstellt. Für die Richtigkeit, Vollständigkeit und Aktualität der Inhalte übernehme ich jedoch keine Gewähr. Als Diensteanbieterin bin ich für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich.",
|
||
],
|
||
},
|
||
{
|
||
h2: "Haftung für Links",
|
||
paragraphs: [
|
||
"Diese Website enthält Links zu externen Websites Dritter, auf deren Inhalte ich keinen Einfluss habe. Für diese fremden Inhalte ist stets der jeweilige Anbieter oder Betreiber der Seiten verantwortlich. Die verlinkten Seiten wurden zum Zeitpunkt der Verlinkung auf mögliche Rechtsverstöße überprüft; rechtswidrige Inhalte waren zu diesem Zeitpunkt nicht erkennbar. Bei Bekanntwerden von Rechtsverletzungen werde ich derartige Links umgehend entfernen.",
|
||
],
|
||
},
|
||
{
|
||
h2: "Urheberrecht",
|
||
paragraphs: [
|
||
/* Nur Urheberrecht: „WOLF-Prinzip“ ist nicht als Marke eingetragen (Spec §12.16 –
|
||
Dritte führen die Bezeichnung bereits), und Markenschutz zu behaupten wäre eine
|
||
abmahnfähige Schutzrechtsberühmung. Satz erst nach einer Eintragung erweitern. */
|
||
"Die auf dieser Website veröffentlichten Inhalte, Texte, Fotos, Grafiken sowie das Logo unterliegen dem deutschen Urheberrecht. Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der Grenzen des Urheberrechts bedürfen der schriftlichen Zustimmung von Anelia Wolf. Die Bezeichnung „Das WOLF-Prinzip“ wird von Anelia Wolf im geschäftlichen Verkehr verwendet.",
|
||
],
|
||
},
|
||
{
|
||
h2: "Bildnachweis",
|
||
paragraphs: [
|
||
/* Pflicht, sobald Fotos ausgeliefert werden (§ 13 UrhG); die beiden anderen nicht. */
|
||
`Porträtfotos: ${ph("Name Fotograf:in, ggf. Website")}`,
|
||
opt(`Logo und Gestaltung: ${ph("Designer:in / Agentur")}`),
|
||
opt(`Website: ${ph("Agentur, optional")}`),
|
||
],
|
||
},
|
||
],
|
||
};
|
||
|
||
export const datenschutz: LegalPage = {
|
||
meta: {
|
||
title: "Datenschutz",
|
||
description: "Datenschutzerklärung – keine Cookies, kein Tracking, keine Drittanbieter. Anelia Wolf.",
|
||
},
|
||
masthead: { center: "Datenschutz" },
|
||
h1: "Datenschutzerklärung",
|
||
stand: "Stand: September 2026",
|
||
sections: [
|
||
{
|
||
h2: "1. Verantwortliche",
|
||
paragraphs: [
|
||
"Verantwortliche im Sinne der Datenschutz-Grundverordnung (DSGVO) und anderer datenschutzrechtlicher Bestimmungen ist:",
|
||
site.name,
|
||
address[0],
|
||
address[1],
|
||
`Telefon: ${site.phoneDisplay}`,
|
||
`E-Mail: ${site.email}`,
|
||
"Eine Datenschutzbeauftragte bzw. ein Datenschutzbeauftragter ist nicht benannt, da die gesetzlichen Voraussetzungen für eine Benennungspflicht (Art. 37 DSGVO, § 38 BDSG) nicht vorliegen.",
|
||
],
|
||
},
|
||
{
|
||
h2: "2. Überblick: Was diese Website tut – und was nicht",
|
||
paragraphs: [
|
||
"Diese Website dient ausschließlich der Information über meine Leistungen. Sie",
|
||
"– setzt keine Cookies und speichert keine Informationen in Ihrem Endgerät (kein Local Storage, kein Session Storage),",
|
||
"– verwendet keine Analyse-, Tracking- oder Marketing-Dienste (kein Google Analytics, keine Pixel, kein Fingerprinting),",
|
||
"– bindet keine Inhalte von Drittanbietern ein (keine externen Schriftarten, keine Videos, keine Karten, keine Social-Media-Plugins),",
|
||
"– verschickt das Kontaktformular über den Server des Hosters unmittelbar an mein E-Mail-Postfach (Ziffer 5); ein Formularanbieter eines Dritten ist nicht eingebunden,",
|
||
"– enthält keinen Newsletter.",
|
||
"Alle Schriftarten, Skripte und Bilder werden vom Server des unten genannten Hosting-Anbieters ausgeliefert. Ein Cookie-Banner ist deshalb nicht erforderlich.",
|
||
"Personenbezogene Daten werden nur in drei Fällen verarbeitet: beim technischen Abruf der Seiten (Server-Logfiles, Ziffer 3), wenn Sie mich per E-Mail oder Telefon kontaktieren (Ziffer 4) und wenn Sie das Kontaktformular absenden (Ziffer 5).",
|
||
],
|
||
},
|
||
{
|
||
h2: "3. Hosting und Server-Logfiles",
|
||
paragraphs: [
|
||
"Diese Website wird gehostet bei:",
|
||
`${ph("Hosting-Anbieter: Firma, Anschrift, Land")} („Hoster“).`,
|
||
"Beim Aufruf dieser Website übermittelt Ihr Browser automatisch Daten an den Server des Hosters, die in sogenannten Server-Logfiles gespeichert werden:",
|
||
"– IP-Adresse des anfragenden Geräts,",
|
||
"– Datum und Uhrzeit des Zugriffs,",
|
||
"– aufgerufene Seite bzw. Datei und übertragene Datenmenge,",
|
||
"– HTTP-Statuscode,",
|
||
"– Referrer-URL (die zuvor besuchte Seite, sofern Ihr Browser sie übermittelt),",
|
||
"– Browsertyp und -version sowie Betriebssystem.",
|
||
"Diese Daten werden nicht mit anderen Datenquellen zusammengeführt und nicht ausgewertet, um einzelne Personen zu identifizieren.",
|
||
"Zweck: technischer Betrieb, Stabilität und Sicherheit der Website (z. B. Abwehr von Angriffen, Fehleranalyse).",
|
||
"Rechtsgrundlage: Art. 6 Abs. 1 lit. f DSGVO – berechtigtes Interesse an einem sicheren und funktionsfähigen Betrieb der Website.",
|
||
`Speicherdauer: Die Logfiles werden nach ${ph("Anzahl Tage – beim Hoster erfragen; üblich sind 7 bis 14 Tage")} Tagen gelöscht, sofern nicht ein sicherheitsrelevanter Vorfall eine längere Aufbewahrung erfordert.`,
|
||
"Empfänger: Der Hoster verarbeitet diese Daten in meinem Auftrag. Mit ihm besteht ein Vertrag zur Auftragsverarbeitung gemäß Art. 28 DSGVO.",
|
||
/* Die Vorlage verlangt „BEI EU-HOSTER DIESEN ABSATZ STREICHEN“ – das tut hier ein
|
||
Flag statt eines Platzhalters mitten im Satz. Sonst stand nach dem Launch-Flip
|
||
„Der Hoster hat seinen Sitz in.“ da: eine unrichtige Pflichtinformation über eine
|
||
Drittlandübermittlung (Art. 13 Abs. 1 lit. f DSGVO). */
|
||
...(flags.hostOutsideEu
|
||
? [
|
||
`Der Hoster hat seinen Sitz in ${ph("Land")}. Die Übermittlung personenbezogener Daten dorthin stützt sich auf ${ph("den Angemessenheitsbeschluss der EU-Kommission zum EU-US Data Privacy Framework, unter dem der Anbieter zertifiziert ist (Art. 45 DSGVO) / die Standardvertragsklauseln der EU-Kommission (Art. 46 Abs. 2 lit. c DSGVO)")}. Eine Kopie der Garantien stelle ich auf Anfrage zur Verfügung.`,
|
||
]
|
||
: []),
|
||
],
|
||
},
|
||
{
|
||
h2: "4. Kontaktaufnahme per E-Mail oder Telefon",
|
||
paragraphs: [
|
||
`Wenn Sie mich per E-Mail (${site.email}) oder telefonisch (${site.phoneDisplay}) kontaktieren, verarbeite ich die von Ihnen mitgeteilten Daten (z. B. Name, E-Mail-Adresse, Telefonnummer, Unternehmen, Inhalt Ihrer Anfrage), um Ihre Anfrage zu beantworten und – sofern gewünscht – ein Angebot zu erstellen oder einen Termin für ein Kennenlerngespräch zu vereinbaren.`,
|
||
"Rechtsgrundlage: Art. 6 Abs. 1 lit. b DSGVO, soweit Ihre Anfrage auf den Abschluss oder die Durchführung eines Vertrags (Coaching, Analyse, Training, Keynote) gerichtet ist; im Übrigen Art. 6 Abs. 1 lit. f DSGVO – berechtigtes Interesse an der Beantwortung von Anfragen.",
|
||
`Speicherdauer: Ich lösche Ihre Anfrage, sobald sie abschließend bearbeitet ist und keine weitere Kommunikation zu erwarten ist, spätestens jedoch nach ${ph("z. B. 12")} Monaten. Unterliegen Nachrichten gesetzlichen Aufbewahrungspflichten (Geschäftsbriefe: 6 Jahre, Buchungsbelege und Rechnungen: 8 Jahre nach § 147 AO bzw. § 257 HGB), werden sie erst nach Ablauf dieser Fristen gelöscht.`,
|
||
`Empfänger: Für E-Mail und Kalender nutze ich ${ph("E-Mail-/Office-Anbieter: Firma, Anschrift, Land")}. Mit dem Anbieter besteht ein Vertrag zur Auftragsverarbeitung gemäß Art. 28 DSGVO.`,
|
||
/* Derselbe Schnitt wie in Ziffer 3 – eigener Absatz, kein Platzhalter im Satz. */
|
||
...(flags.hostOutsideEu
|
||
? [
|
||
`Der Anbieter hat seinen Sitz in ${ph("Land")}. Die Übermittlung personenbezogener Daten dorthin stützt sich auf ${ph("Angemessenheitsbeschluss oder Standardvertragsklauseln – wie in Ziffer 3")}. Eine Kopie der Garantien stelle ich auf Anfrage zur Verfügung.`,
|
||
]
|
||
: []),
|
||
"Eine Weitergabe Ihrer Daten an sonstige Dritte erfolgt nicht.",
|
||
],
|
||
},
|
||
{
|
||
h2: "5. Kontaktformular",
|
||
paragraphs: [
|
||
"Wenn Sie das Kontaktformular auf der Startseite absenden, werden die von Ihnen eingegebenen Daten (Name, E-Mail-Adresse, freiwillig Ihre Firma sowie der Inhalt Ihrer Nachricht) verschlüsselt an den Server des Hosters (Ziffer 3) übertragen und von dort als E-Mail an mein Postfach zugestellt. In der E-Mail werden zusätzlich der Zeitpunkt des Absendens und die Unterseite vermerkt, von der aus Sie das Formular abgeschickt haben. Ein Formularanbieter eines Dritten ist nicht eingebunden; Cookies werden dabei nicht gesetzt.",
|
||
"Zweck: Entgegennahme und Beantwortung Ihrer Anfrage.",
|
||
"Rechtsgrundlage: Art. 6 Abs. 1 lit. b DSGVO, soweit Ihre Anfrage auf den Abschluss oder die Durchführung eines Vertrags gerichtet ist; im Übrigen Art. 6 Abs. 1 lit. f DSGVO – berechtigtes Interesse an der Beantwortung von Anfragen.",
|
||
"Speicherdauer: Der Server des Hosters legt die Formulardaten nicht dauerhaft ab, sondern stellt sie unmittelbar als E-Mail zu. Für diese E-Mail gelten anschließend dieselben Fristen wie in Ziffer 4.",
|
||
"Empfänger: der Hoster (Ziffer 3) und mein E-Mail-Anbieter (Ziffer 4), jeweils als Auftragsverarbeiter nach Art. 28 DSGVO. Eine Weitergabe an sonstige Dritte erfolgt nicht.",
|
||
"Zum Schutz vor automatisiert versendeten Nachrichten enthält das Formular ein für Sie unsichtbares Feld, das nur von Programmen ausgefüllt wird; außerdem begrenzt der Server die Zahl der Sendungen je IP-Adresse innerhalb kurzer Zeit. Ihre IP-Adresse wird dafür nur flüchtig im Arbeitsspeicher verarbeitet, nicht gespeichert und nicht in die E-Mail übernommen.",
|
||
"Die Angabe Ihrer Daten ist freiwillig. Ohne Name, E-Mail-Adresse und Nachricht kann ich Ihre Anfrage jedoch nicht beantworten; Sie können mich stattdessen jederzeit direkt per E-Mail oder Telefon erreichen (Ziffer 4).",
|
||
],
|
||
},
|
||
{
|
||
h2: "6. Externe Links",
|
||
paragraphs: [
|
||
"Diese Website enthält Links zu externen Websites (z. B. LinkedIn, herCAREER). Beim bloßen Anklicken eines Links werden von dieser Website keine Daten an den Betreiber der Zielseite übertragen; ab dem Aufruf der Zielseite gelten ausschließlich die Datenschutzbestimmungen des jeweiligen Anbieters. Social-Media-Plugins, Share-Buttons oder Tracking-Pixel dieser Anbieter sind auf dieser Website nicht eingebunden.",
|
||
"LinkedIn wird betrieben von der LinkedIn Ireland Unlimited Company, Wilton Place, Dublin 2, Irland. Datenschutzerklärung: https://www.linkedin.com/legal/privacy-policy",
|
||
],
|
||
},
|
||
{
|
||
h2: "7. Schriftarten",
|
||
paragraphs: [
|
||
"Die auf dieser Website verwendeten Schriftarten (Playfair Display, Source Sans 3, DM Mono) sind lokal auf dem Webserver gespeichert und werden ausschließlich von dort ausgeliefert. Es findet keine Verbindung zu Servern von Google (Google Fonts) oder anderen Schriftanbietern statt; Ihre IP-Adresse wird dadurch nicht an Dritte übermittelt.",
|
||
],
|
||
},
|
||
{
|
||
h2: "8. Verschlüsselung",
|
||
paragraphs: [
|
||
"Diese Website nutzt eine TLS-/SSL-Verschlüsselung (erkennbar an „https://“ und dem Schloss-Symbol in der Adresszeile Ihres Browsers). Daten, die zwischen Ihrem Browser und dem Server übertragen werden, können dadurch nicht von Dritten mitgelesen werden.",
|
||
],
|
||
},
|
||
{
|
||
h2: "9. Ihre Rechte als betroffene Person",
|
||
paragraphs: [
|
||
"Sie haben mir gegenüber folgende Rechte hinsichtlich der Sie betreffenden personenbezogenen Daten:",
|
||
"– Recht auf Auskunft (Art. 15 DSGVO),",
|
||
"– Recht auf Berichtigung (Art. 16 DSGVO),",
|
||
"– Recht auf Löschung (Art. 17 DSGVO),",
|
||
"– Recht auf Einschränkung der Verarbeitung (Art. 18 DSGVO),",
|
||
"– Recht auf Datenübertragbarkeit (Art. 20 DSGVO),",
|
||
"– Recht auf Widerruf einer erteilten Einwilligung mit Wirkung für die Zukunft (Art. 7 Abs. 3 DSGVO).",
|
||
],
|
||
},
|
||
{
|
||
h2: "Widerspruchsrecht (Art. 21 DSGVO)",
|
||
paragraphs: [
|
||
"Sie haben das Recht, aus Gründen, die sich aus Ihrer besonderen Situation ergeben, jederzeit gegen die Verarbeitung Sie betreffender personenbezogener Daten, die auf Grundlage von Art. 6 Abs. 1 lit. f DSGVO erfolgt, Widerspruch einzulegen. Ich verarbeite die personenbezogenen Daten dann nicht mehr, es sei denn, ich kann zwingende schutzwürdige Gründe für die Verarbeitung nachweisen, die Ihre Interessen, Rechte und Freiheiten überwiegen, oder die Verarbeitung dient der Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen.",
|
||
`Zur Ausübung Ihrer Rechte genügt eine formlose E-Mail an ${site.email}.`,
|
||
],
|
||
},
|
||
{
|
||
h2: "Beschwerderecht bei einer Aufsichtsbehörde (Art. 77 DSGVO)",
|
||
paragraphs: [
|
||
"Unbeschadet anderer Rechtsbehelfe haben Sie das Recht, sich bei einer Datenschutz-Aufsichtsbehörde zu beschweren, insbesondere in dem Mitgliedstaat Ihres Aufenthaltsorts, Ihres Arbeitsplatzes oder des Orts des mutmaßlichen Verstoßes. Die für mich zuständige Aufsichtsbehörde ist:",
|
||
ph("Aufsichtsbehörde des Bundeslandes, in dem Anelia Wolf ihren Sitz hat – Name, Anschrift, Website"),
|
||
"Eine Übersicht aller Landesbehörden: https://www.bfdi.bund.de/DE/Service/Anschriften/Laender/Laender-node.html",
|
||
],
|
||
},
|
||
{
|
||
h2: "10. Pflicht zur Bereitstellung, automatisierte Entscheidungen",
|
||
paragraphs: [
|
||
"Die Bereitstellung Ihrer personenbezogenen Daten ist weder gesetzlich noch vertraglich vorgeschrieben. Ohne Ihre Kontaktdaten kann ich eine Anfrage jedoch nicht beantworten. Eine automatisierte Entscheidungsfindung einschließlich Profiling (Art. 22 DSGVO) findet nicht statt.",
|
||
],
|
||
},
|
||
{
|
||
h2: "11. Änderungen dieser Datenschutzerklärung",
|
||
paragraphs: [
|
||
"Ich passe diese Datenschutzerklärung an, sobald sich die Website oder die Rechtslage ändert – etwa bei Einführung eines Newsletters, einer Online-Terminbuchung oder von Video-Einbettungen. Es gilt die jeweils auf dieser Seite veröffentlichte Fassung.",
|
||
],
|
||
},
|
||
],
|
||
};
|
||
|
||
export const legalPages = { impressum, datenschutz } as const;
|
||
|
||
/* Build-Guard: sobald `flags.showPlaceholders` false ist, darf in keiner PFLICHT-Angabe
|
||
mehr ein „[…]“ stehen. Optionale Absätze entfallen still, alles andere bricht den Build
|
||
ab – der Launch-Flip ist genau der Schritt, den sonst niemand mehr gegenliest. */
|
||
assertNoPlaceholders(
|
||
"src/content/legal.ts",
|
||
Object.values(legalPages).flatMap((page) => [
|
||
page.h1,
|
||
page.stand,
|
||
...page.sections.flatMap((section) => [
|
||
section.h2,
|
||
...section.paragraphs.filter((paragraph): paragraph is string => typeof paragraph === "string"),
|
||
]),
|
||
]),
|
||
);
|