- Customer accounts now require email verification (hashed, single-use, time-limited tokens) before they can request/confirm bookings, with resend flows on login/account/booking widget and rate limiting. - Admins get a private, rotatable iCalendar (ICS) subscription feed of their confirmed bookings and public events, timezone-correct for Europe/Berlin including DST, never exposing meeting passwords. - Adds a full SEO layer: per-page canonical/OG/Twitter metadata with CMS-editable overrides and content-derived fallbacks, a dynamic sitemap.xml and robots.txt driven by real published content, JSON-LD (Organization/LocalBusiness, WebSite, WebPage, BreadcrumbList, Service, Event, BlogPosting) that never fabricates data, and a CMS-managed redirect table for changed slugs. - Global ANOUMA-naming audit: the brand name is never used to label personal account/calendar areas anywhere in the app, CMS, or emails. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
77 lines
3.2 KiB
TypeScript
77 lines
3.2 KiB
TypeScript
import type { Metadata } from "next";
|
|
import { PageHeader } from "@/components/PageHeader";
|
|
import { Section } from "@/components/Section";
|
|
import { PlaceholderNote } from "@/components/PlaceholderNote";
|
|
import { getContactGlobal } from "@/lib/payload/globals";
|
|
import { getSiteUrl } from "@/lib/seo/config";
|
|
|
|
export const dynamic = "force-dynamic";
|
|
|
|
export async function generateMetadata(): Promise<Metadata> {
|
|
const siteUrl = await getSiteUrl();
|
|
return {
|
|
title: "Datenschutz",
|
|
description: "Datenschutzerklärung von Anouma.",
|
|
robots: { index: false, follow: true },
|
|
alternates: { canonical: `${siteUrl}/datenschutz` },
|
|
};
|
|
}
|
|
|
|
export default async function DatenschutzPage() {
|
|
const contact = await getContactGlobal();
|
|
return (
|
|
<>
|
|
<PageHeader title="Datenschutzerklärung" crumbs={[{ title: "Datenschutz" }]} />
|
|
<Section tone="plain">
|
|
<div className="mx-auto max-w-2xl space-y-8">
|
|
<PlaceholderNote>
|
|
Diese Seite ist eine strukturelle Vorlage. Bitte die Angaben zu verantwortlicher Stelle,
|
|
Hosting, eingesetzten Diensten und Cookies mit den tatsächlich genutzten Tools ergänzen
|
|
und rechtlich prüfen lassen, bevor die Seite live geht.
|
|
</PlaceholderNote>
|
|
|
|
<div>
|
|
<h2 className="font-serif text-2xl font-medium text-anouma-plum">Verantwortliche Stelle</h2>
|
|
<p className="mt-4 leading-relaxed text-anouma-plum">
|
|
[Platzhalter — Vor- und Nachname]
|
|
<br />
|
|
[Platzhalter — Anschrift]
|
|
<br />
|
|
E-Mail: {contact.email}
|
|
</p>
|
|
</div>
|
|
|
|
<div>
|
|
<h2 className="font-serif text-2xl font-medium text-anouma-plum">
|
|
Erhebung und Speicherung personenbezogener Daten
|
|
</h2>
|
|
<p className="mt-4 leading-relaxed text-anouma-plum">
|
|
Beim Besuch dieser Website werden aus technischen Gründen automatisch Informationen
|
|
erfasst, die dein Browser übermittelt (z. B. IP-Adresse, Datum und Uhrzeit des
|
|
Zugriffs). [Platzhalter — Details zum verwendeten Hosting-Anbieter ergänzen.]
|
|
</p>
|
|
</div>
|
|
|
|
<div>
|
|
<h2 className="font-serif text-2xl font-medium text-anouma-plum">Kontaktformular</h2>
|
|
<p className="mt-4 leading-relaxed text-anouma-plum">
|
|
Wenn du uns per Formular oder E-Mail Anfragen zukommen lässt, werden deine Angaben aus
|
|
dem Formular inklusive der von dir dort angegebenen Kontaktdaten zwecks Bearbeitung der
|
|
Anfrage bei uns gespeichert. Diese Daten geben wir nicht ohne deine Einwilligung weiter.
|
|
</p>
|
|
</div>
|
|
|
|
<div>
|
|
<h2 className="font-serif text-2xl font-medium text-anouma-plum">Deine Rechte</h2>
|
|
<p className="mt-4 leading-relaxed text-anouma-plum">
|
|
Du hast jederzeit das Recht auf Auskunft, Berichtigung, Löschung und Einschränkung der
|
|
Verarbeitung deiner gespeicherten personenbezogenen Daten sowie ein Recht auf
|
|
Datenübertragbarkeit und Widerspruch. Wende dich hierzu gerne an {contact.email}.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</Section>
|
|
</>
|
|
);
|
|
}
|