diff --git a/app/agb/page.tsx b/app/agb/page.tsx new file mode 100644 index 0000000..33acfd9 --- /dev/null +++ b/app/agb/page.tsx @@ -0,0 +1,37 @@ +import type { Metadata } from "next"; +import { LegalPage, Todo } from "../components/legal"; + +export const metadata: Metadata = { + title: "Allgemeine Geschäftsbedingungen", + description: "Allgemeine Geschäftsbedingungen für die Nutzung von Kumasy.", + alternates: { canonical: "/agb" }, + robots: { index: false, follow: true }, +}; + +export default function AgbPage() { + return ( + +
+

+ + Die AGB sind noch nicht verfasst. Sie sollten von einer + Rechtsanwältin oder einem Rechtsanwalt erstellt werden — ein + Vorlagentext führt bei einem SaaS-Vertrag mit Zahlungsabwicklung + und Auftragsverarbeitung erfahrungsgemäß zu unwirksamen Klauseln. + +

+

+ Folgende Punkte sind typischerweise zu regeln: Vertragsgegenstand + und Leistungsumfang, Zustandekommen des Vertrags, Preise und + Zahlungsbedingungen, Laufzeit und Kündigung, Verfügbarkeit und + Wartungsfenster, Pflichten der Nutzerin, Haftung und + Haftungsbeschränkung, Datenschutz und Auftragsverarbeitung, + Änderungen der AGB sowie Schlussbestimmungen und Gerichtsstand. +

+
+
+ ); +} diff --git a/app/apple-icon.png b/app/apple-icon.png new file mode 100644 index 0000000..dbea313 Binary files /dev/null and b/app/apple-icon.png differ diff --git a/app/components/hero.tsx b/app/components/hero.tsx index e9bfce5..57b501b 100644 --- a/app/components/hero.tsx +++ b/app/components/hero.tsx @@ -137,7 +137,11 @@ export function Hero() { {/* Per-character entrance. The

carries the readable text for assistive tech; the animated spans are aria-hidden. */} -

+ {/* The floor is 2.1rem, not 2.75rem: the longest line ("und + bezahlen sich") has to fit 321px of usable width on a 353px + Samsung viewport. 10.2vw carries it from there up to the + 5.25rem ceiling. */} +

Deine Kurse füllen und bezahlen sich von selbst. @@ -171,7 +175,7 @@ export function Hero() {
- +
diff --git a/app/components/legal.tsx b/app/components/legal.tsx new file mode 100644 index 0000000..618f2de --- /dev/null +++ b/app/components/legal.tsx @@ -0,0 +1,60 @@ +import type { ReactNode } from "react"; +import { Footer } from "./sections"; +import { Nav } from "./ui"; + +/** + * Shared shell for the legal pages. The root layout renders only + * {children}, so each page has to bring its own chrome — same reasoning + * as not-found.tsx. + */ +export function LegalPage({ + title, + intro, + children, +}: { + title: string; + intro?: string; + children: ReactNode; +}) { + return ( + <> +