webklar b9e1d4d15c Anfragen landen im Ordner web-anfragen
Der Formular-Endpunkt legt die Mail jetzt per IMAP direkt als ungelesene
Nachricht im Ordner web-anfragen ab, statt sie in den Posteingang zu schicken;
faellt die Ablage aus, geht sie weiterhin per SMTP in den Posteingang. Nur
Dokumentation - die Seite selbst aendert sich nicht.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-07 19:37:35 +00:00
2026-09-06 17:21:52 +02:00
2026-09-06 17:21:52 +02:00
2026-09-07 18:48:17 +00:00
2026-09-06 17:21:52 +02:00
2026-09-06 17:21:52 +02:00
2026-09-06 17:21:52 +02:00
2026-09-06 17:21:52 +02:00
2026-09-06 17:21:52 +02:00
2026-09-06 17:21:52 +02:00
2026-09-06 17:21:52 +02:00
2026-09-06 17:21:52 +02:00
2026-09-06 17:21:52 +02:00

Anelia Wolf Website

Statische Website für Anelia Wolf (Keynote Speakerin, Trainerin, Coach). Zwölf Routen in zwei Sprachen: Startseite, drei Leistungsseiten, Impressum und Datenschutz deutsch auf /, englisch unter /en/ plus die 404.

Next.js 16 (App Router) im Static Export, Tailwind v4, GSAP + Lenis, TypeScript. Kein Backend, keine Datenbank, keine Formulare.

Entwickeln und bauen

npm install
npm run dev     # http://localhost:3000
npm run build   # erzeugt out/
npm run lint
npx tsc --noEmit

next.config.ts setzt output: "export" und trailingSlash: true. Der Build schreibt den fertigen Ordner out/ das ist das komplette Deployment: rein statische Dateien für einen beliebigen Webhoster (Apache, nginx, Uberspace, Netlify, …). Kein Node-Prozess auf dem Server, kein next start.

Was diese Seite bewusst nicht tut

Diese Regeln sind nicht kosmetisch die Datenschutzerklärung sagt sie zu:

  • keine externen Requests: keine Google Fonts, keine CDNs, keine Videos, keine Karten, keine Social-Plugins, keine Analytics. Schriften werden über next/font zur Build-Zeit selbst gehostet.
  • kein Storage: kein localStorage, kein sessionStorage, keine Cookies deshalb auch kein Cookie-Banner.
  • Kontaktformular mit Serverversand, kein Newsletter. Abschnitt 06 sendet an /api/contact beim Hoster; die Anfrage landet im Postfach info@anelia-wolf.com im Ordner web-anfragen (kein Formulardienst eines Dritten). Alle übrigen Kontaktwege laufen weiter über mailto: und Telefon.

Wer eine dieser Zusagen ändert, muss src/content/legal.ts (Ziffer 2, 3 und 6) mit ändern.

Wo was liegt

Pfad Inhalt
src/app/(de)/ deutsche Routen (page.tsx je Seite) und ihr Wurzel-Layout mit <html lang="de">
src/app/en/ englische Routen und ihr Wurzel-Layout mit <html lang="en">
src/app/global-not-found.tsx 404 für unbekannte Adressen wird zu out/404.html
src/components/pages/ Der Aufbau jeder Seite, einmal für beide Sprachen
src/content/en/ die englischen Texte, Datei für Datei dieselbe Struktur
src/lib/i18n.ts Pfade beider Sprachen, Sprachumschalter, hreflang
src/content/*.ts Sämtliche Texte. Wer Copy ändert, ändert nur hier nie im JSX.
src/lib/site.ts Stammdaten (Name, E-Mail, Telefon, LinkedIn), Navigation, Routen, Flags
src/lib/legal.ts Platzhalter-Logik, Build-Guard, LEGAL_TODO / CONTENT_TODO
src/lib/assets.ts Build-Zeit-Prüfung der Drop-in-Dateien (fehlt eine, rendert die dokumentierte Variante B)
src/components/ layout/, motion/ (GSAP-Primitiven), ui/, brand/, home/, services/
public/brand/, public/photos/ Drop-in-Slots für Logo und Fotos (je eigene README)
docs/superpowers/ Spec und Build-Plan

Drop-in-Assets

Fehlt eine Datei, bricht nichts die Seite rendert die dokumentierte Alternative:

Datei Fehlt sie, dann …
public/brand/logo-mark.svg typografisches <WolfMark/>-Monogramm statt des echten Logos
public/brand/logo-full.png kein Social-Preview-Bild in den OpenGraph-Daten
public/photos/anelia-hero.jpg Hero ohne Foto (Monogramm trägt die Fläche)
public/photos/anelia-portrait.jpg „Über Anelia“ ohne Foto
public/photos/anelia-stage.jpg Keynotes-Seite ohne Bühnenfoto
public/speaker-profil.pdf Speaker-Profil-Zeile entfällt (zusätzlich flags.showSpeakerPdf)

Das gelieferte Logo-SVG wird inline eingebettet. Enthält es ein <script>, bricht der Build ab dann eine Export-Variante ohne Interaktivität liefern.

Flags (src/lib/site.ts)

Flag Bedeutung
showPlaceholders true bis zum Launch: offene Angaben stehen sichtbar als „[…]“ in Gold
hostOutsideEu nur true, wenn Hoster/Office-Anbieter außerhalb EU/EWR sitzen (Drittland-Absatz)
showFaq, showStimmen, showSpeakerPdf, showSecondTalk, show24hPromise, showIndustry, showTwins schalten einzelne Blöcke frei, sobald die Inhalte freigegeben sind

Vor dem Livegang

  1. LEGAL_TODO und CONTENT_TODO in src/lib/legal.ts abarbeiten Anschrift, USt-IdNr., Hoster, Aufsichtsbehörde, Bildnachweise, Dauer-/Paketangaben.
  2. Erst dann flags.showPlaceholders auf false setzen. Steht danach irgendwo noch ein „[…]“ in einer Pflichtangabe, bricht der Build mit einer Fundstelle ab der Flip geht nicht ungelesen live.
  3. npm run build und den Inhalt von out/ hochladen.
Description
Anelia Wolf
Readme 554 KiB
Languages
TypeScript 97.5%
CSS 2.4%
JavaScript 0.1%