Config: Impressum/Datenschutz aus .env.local befüllt

Persönliche Angaben (Name, Adresse, E-Mail, Hoster) werden zur
Build-Zeit aus .env.local gelesen und in die statischen Seiten
eingebettet. .env.local ist gitignoriert, .env.local.example
dokumentiert die benötigten Variablen.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Dieter Schlüter 2026-04-25 21:50:00 +02:00
commit 159c761633
3 changed files with 48 additions and 20 deletions

16
.env.local.example Normal file
View file

@ -0,0 +1,16 @@
# Persönliche Angaben für Impressum und Datenschutz
# Kopiere diese Datei nach .env.local und trage die echten Daten ein.
# .env.local wird NICHT ins Repository eingecheckt.
# Eigentümer
OWNER_NAME=Max Mustermann
OWNER_STREET=Musterstraße 1
OWNER_ZIP_CITY=12345 Musterstadt
OWNER_EMAIL=kontakt@example.de
# Hoster (für Datenschutzerklärung)
HOSTER_NAME=Muster-Hoster GmbH
HOSTER_STREET=Hosting-Straße 42
HOSTER_ZIP=98765
HOSTER_CITY=Serverstadt
HOSTER_COUNTRY=Deutschland

View file

@ -8,6 +8,13 @@ export const metadata = {
} }
export default function DatenschutzPage() { export default function DatenschutzPage() {
const email = process.env.OWNER_EMAIL ?? '[Emailadresse]'
const hosterName = process.env.HOSTER_NAME ?? '[Hoster]'
const hosterStreet = process.env.HOSTER_STREET ?? '[Straße Hausnummer]'
const hosterZip = process.env.HOSTER_ZIP ?? '[PLZ]'
const hosterCity = process.env.HOSTER_CITY ?? '[Ort]'
const hosterCountry= process.env.HOSTER_COUNTRY ?? '[Land]'
return ( return (
<main className="min-h-screen py-24 lg:py-32"> <main className="min-h-screen py-24 lg:py-32">
<div className="max-w-3xl mx-auto px-6 lg:px-8"> <div className="max-w-3xl mx-auto px-6 lg:px-8">
@ -19,14 +26,14 @@ export default function DatenschutzPage() {
</Button> </Button>
<h1 className="font-serif text-4xl lg:text-5xl mb-8">Datenschutz</h1> <h1 className="font-serif text-4xl lg:text-5xl mb-8">Datenschutz</h1>
<div className="prose prose-neutral dark:prose-invert max-w-none space-y-8"> <div className="prose prose-neutral dark:prose-invert max-w-none space-y-8">
<section> <section>
<h2 className="font-serif text-xl mb-4">1. Datenschutz auf einen Blick</h2> <h2 className="font-serif text-xl mb-4">1. Datenschutz auf einen Blick</h2>
<h3 className="font-medium mt-6 mb-2">Allgemeine Hinweise</h3> <h3 className="font-medium mt-6 mb-2">Allgemeine Hinweise</h3>
<p className="text-muted-foreground leading-relaxed"> <p className="text-muted-foreground leading-relaxed">
Die folgenden Hinweise geben einen einfachen Überblick darüber, Die folgenden Hinweise geben einen einfachen Überblick darüber,
was mit Ihren personenbezogenen Daten passiert, wenn Sie diese was mit Ihren personenbezogenen Daten passiert, wenn Sie diese
Website besuchen. Website besuchen.
</p> </p>
</section> </section>
@ -34,17 +41,17 @@ export default function DatenschutzPage() {
<section> <section>
<h2 className="font-serif text-xl mb-4">2. Hosting</h2> <h2 className="font-serif text-xl mb-4">2. Hosting</h2>
<p className="text-muted-foreground leading-relaxed"> <p className="text-muted-foreground leading-relaxed">
Diese Website wird bei [Hoster] gehostet. Der Anbieter ist Diese Website wird bei {hosterName} gehostet. Der Anbieter ist{' '}
[Name] , [Straße Hausnummer] , [PLZ] [Ort], [Land]. {hosterName}, {hosterStreet}, {hosterZip} {hosterCity}, {hosterCountry}.
</p> </p>
</section> </section>
<section> <section>
<h2 className="font-serif text-xl mb-4">3. Allgemeine Hinweise</h2> <h2 className="font-serif text-xl mb-4">3. Allgemeine Hinweise</h2>
<p className="text-muted-foreground leading-relaxed"> <p className="text-muted-foreground leading-relaxed">
Die Betreiber dieser Seiten nehmen den Schutz Ihrer persönlichen Die Betreiber dieser Seiten nehmen den Schutz Ihrer persönlichen
Daten sehr ernst. Wir behandeln Ihre personenbezogenen Daten Daten sehr ernst. Wir behandeln Ihre personenbezogenen Daten
vertraulich und entsprechend der gesetzlichen Datenschutzvorschriften vertraulich und entsprechend der gesetzlichen Datenschutzvorschriften
sowie dieser Datenschutzerklärung. sowie dieser Datenschutzerklärung.
</p> </p>
</section> </section>
@ -53,8 +60,8 @@ export default function DatenschutzPage() {
<h2 className="font-serif text-xl mb-4">4. Datenerfassung auf dieser Website</h2> <h2 className="font-serif text-xl mb-4">4. Datenerfassung auf dieser Website</h2>
<h3 className="font-medium mt-6 mb-2">Server-Log-Dateien</h3> <h3 className="font-medium mt-6 mb-2">Server-Log-Dateien</h3>
<p className="text-muted-foreground leading-relaxed"> <p className="text-muted-foreground leading-relaxed">
Der Provider dieser Seiten erhebt und speichert automatisch Der Provider dieser Seiten erhebt und speichert automatisch
Informationen in so genannten Server-Log-Dateien, die Ihr Browser Informationen in so genannten Server-Log-Dateien, die Ihr Browser
automatisch an uns übermittelt. automatisch an uns übermittelt.
</p> </p>
</section> </section>
@ -63,7 +70,7 @@ export default function DatenschutzPage() {
<h2 className="font-serif text-xl mb-4">5. Kontakt</h2> <h2 className="font-serif text-xl mb-4">5. Kontakt</h2>
<p className="text-muted-foreground leading-relaxed"> <p className="text-muted-foreground leading-relaxed">
Bei Fragen zum Datenschutz können Sie sich jederzeit an uns wenden:<br /> Bei Fragen zum Datenschutz können Sie sich jederzeit an uns wenden:<br />
E-Mail: [Emailadresse] E-Mail: {email}
</p> </p>
</section> </section>
</div> </div>

View file

@ -8,6 +8,11 @@ export const metadata = {
} }
export default function ImpressumPage() { export default function ImpressumPage() {
const name = process.env.OWNER_NAME ?? '[Name]'
const street = process.env.OWNER_STREET ?? '[Straße und Hausnummer]'
const zipCity = process.env.OWNER_ZIP_CITY ?? '[PLZ Ort]'
const email = process.env.OWNER_EMAIL ?? '[Emailadresse]'
return ( return (
<main className="min-h-screen py-24 lg:py-32"> <main className="min-h-screen py-24 lg:py-32">
<div className="max-w-3xl mx-auto px-6 lg:px-8"> <div className="max-w-3xl mx-auto px-6 lg:px-8">
@ -19,14 +24,14 @@ export default function ImpressumPage() {
</Button> </Button>
<h1 className="font-serif text-4xl lg:text-5xl mb-8">Impressum</h1> <h1 className="font-serif text-4xl lg:text-5xl mb-8">Impressum</h1>
<div className="prose prose-neutral dark:prose-invert max-w-none space-y-8"> <div className="prose prose-neutral dark:prose-invert max-w-none space-y-8">
<section> <section>
<h2 className="font-serif text-xl mb-4">Angaben gemäß § 5 TMG</h2> <h2 className="font-serif text-xl mb-4">Angaben gemäß § 5 TMG</h2>
<p className="text-muted-foreground"> <p className="text-muted-foreground">
[Name]<br /> {name}<br />
[Straße und Hausnummer]<br /> {street}<br />
[PLZ Ort]<br /> {zipCity}<br />
Deutschland Deutschland
</p> </p>
</section> </section>
@ -34,23 +39,23 @@ export default function ImpressumPage() {
<section> <section>
<h2 className="font-serif text-xl mb-4">Kontakt</h2> <h2 className="font-serif text-xl mb-4">Kontakt</h2>
<p className="text-muted-foreground"> <p className="text-muted-foreground">
E-Mail: [Emailadresse] E-Mail: {email}
</p> </p>
</section> </section>
<section> <section>
<h2 className="font-serif text-xl mb-4">Verantwortlich für den Inhalt</h2> <h2 className="font-serif text-xl mb-4">Verantwortlich für den Inhalt</h2>
<p className="text-muted-foreground"> <p className="text-muted-foreground">
[Name]<br /> {name}<br />
[Adresse] {street}, {zipCity}
</p> </p>
</section> </section>
<section> <section>
<h2 className="font-serif text-xl mb-4">Haftungsausschluss</h2> <h2 className="font-serif text-xl mb-4">Haftungsausschluss</h2>
<p className="text-muted-foreground leading-relaxed"> <p className="text-muted-foreground leading-relaxed">
Die Inhalte dieser Seiten wurden mit größter Sorgfalt erstellt. Die Inhalte dieser Seiten wurden mit größter Sorgfalt erstellt.
Für die Richtigkeit, Vollständigkeit und Aktualität der Inhalte Für die Richtigkeit, Vollständigkeit und Aktualität der Inhalte
kann jedoch keine Gewähr übernommen werden. kann jedoch keine Gewähr übernommen werden.
</p> </p>
</section> </section>