Files
Anelia-Wolf/README.md
Kenso Grimm 33ec0df7e3 Messe-Landingpage /her-career/ zur herCAREER Expo 2026
Ziel des QR-Codes auf der Rückwandgrafik. Der gedruckte Code zeigt auf
https://her-career.anelia-wolf.com – die Adresse ist damit unveränderlich.
Die Seite liegt als /her-career/ im normalen Export, die Subdomain liefert
dieselbe Datei aus demselben Docroot aus; DNS, Zertifikat, Vhosts für nginx
und Apache und die Prüfbefehle stehen in docs/SUBDOMAIN-HERCAREER.md.

Aufbau in beiden Sprachen: Hero (ink) → 01 Messe-Special → 02 Themen →
03 Auf der Messe → 04 Kontakt mit dem Formular. Die vier Themenblöcke der
Rückwand liegen auf den drei Leistungsseiten, wie in der Navigation; jede
Zeile verlinkt absolut auf die Hauptdomain.

Der Wortlaut des Messe-Specials fehlt noch und steht sichtbar als „[…]“ auf
der Seite. Der Build-Guard hält den Launch-Flip an, bis er da ist
(CONTENT_TODO in src/lib/legal.ts, docs/OFFENE-DATEN.md Punkte 2.7–2.9).
Deadline ist nicht der Livegang, sondern der 22.10.2026.

- Canonical auf anelia-wolf.com/her-career/, damit die Subdomain-Kopie nicht
  ein zweites Mal im Index steht
- flags.showHerCareer trägt Termine-Ledger, Sitemap-Eintrag und die
  Meta-Beschreibung mit Stand und Uhrzeit. Ab dem 24.10.2026 auf false
- ServiceHero: facts und cta sind optional – ohne beides und ohne Foto
  entfällt die rechte Spalte
- ProcessContact: optionaler Zähler, die Messeseite nummeriert ihre Abschnitte
- Kopf-CTA auf dieser Seite ausgeblendet. Das macht eine Regel in globals.css,
  weil der Kopf außerhalb von <main> liegt und auf der Subdomain der Pfad
  ohnehin „/“ ist

Enthält außerdem die bis dahin nicht committeten Änderungen an Header,
LangSwitch, OverlayMenu, Wordmark und globals.css.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-07 22:39:32 +02:00

95 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Anelia Wolf Website
Statische Website für Anelia Wolf (Keynote Speakerin, Trainerin, Coach).
Vierzehn Routen in zwei Sprachen: Startseite, drei Leistungsseiten, die Messeseite
zur herCAREER Expo, 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
```bash
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 |
| `docs/SUBDOMAIN-HERCAREER.md` | `her-career.anelia-wolf.com` Ziel des QR-Codes auf der Rückwandgrafik: DNS, Zertifikat, Vhost |
## 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 |
| `showHerCareer` | `true`, solange die herCAREER Expo bevorsteht: nur dann trägt `/her-career/` die Termin-Angaben und steht in der Sitemap. Ab 24.10.2026 auf `false`. |
## 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.