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>
This commit is contained in:
2026-09-07 22:39:26 +02:00
parent b9e1d4d15c
commit 33ec0df7e3
21 changed files with 941 additions and 50 deletions

147
src/content/her-career.ts Normal file
View File

@@ -0,0 +1,147 @@
/**
* /her-career/ Messe-Landingpage zur herCAREER Expo 2026.
*
* Diese Seite ist das Ziel des QR-Codes auf der Rückwandgrafik am Stand
* (`AneliaWolf_Rueckwandgrafik_1980x1240`). Der Code zeigt auf
* `https://her-career.anelia-wolf.com` die Adresse ist gedruckt und damit
* unveränderlich; wie die Subdomain diese Datei ausliefert, steht in
* docs/SUBDOMAIN-HERCAREER.md.
*
* Wer hier landet, steht mit dem Handy am Stand. Deshalb ist die Seite kurz und
* beantwortet in dieser Reihenfolge: Wo bin ich, was war das Special, worüber
* reden wir, wie erreiche ich dich. Alle weiterführenden Links gehen ABSOLUT auf
* die Hauptdomain ein Klick, und der Besucher ist auf anelia-wolf.com.
*
* Die vier Themenblöcke der Rückwand (Analysen, Trainings, 1:1 Coaching,
* Keynotes) liegen hier auf den drei Leistungsseiten der Website, wie in der
* Navigation: „Coaching & Analysen“ trägt die Analysen mit.
*/
import { routes, site } from "@/lib/site";
import type { Widen } from "./widen";
import { assertNoPlaceholders, collectStrings, ph } from "@/lib/legal";
import type { FactItem, Headline, TocRow } from "./home";
import { contact as contactHome, termine } from "./home";
/**
* Absolute Adresse auf der Hauptdomain. Die Seite wird unter zwei Hosts
* ausgeliefert (anelia-wolf.com/her-career/ und her-career.anelia-wolf.com);
* ein relativer Link würde auf der Subdomain in deren eigenem Pfadraum landen.
*/
const main = (path: string): string => `${site.url}${path}`;
export const herCareer = {
meta: {
title: "herCAREER Expo 2026",
/** Ohne Terminangaben stimmt auch nach der Messe (`flags.showHerCareer: false`). */
description:
"Anelia Wolf zur herCAREER Expo 2026: das Messe-Special, die Themen vom Stand und der direkte Draht zur Keynote Speakerin, Trainerin und Coach.",
/** Mit Stand und Keynote-Termin. Nur solange die Messe bevorsteht die Route wählt. */
descriptionMesse:
"Anelia Wolf auf der herCAREER Expo 2026 im MOC München: Stand P.10.2 in Halle 3, Keynote am 23.10. um 10:30 im Auditorium 2. Messe-Special, Themen und der direkte Draht.",
},
numeral: "2026",
/* Wie auf den Leistungsseiten: steht in der Inhaltsdatei, wird im Hero nicht gerendert. */
masthead: {
role: "Keynote Speakerin · Trainerin · Coach",
center: "herCAREER Expo 2026",
lang: "Deutsch & Englisch",
},
eyebrow: "herCAREER Expo 2026 · MOC München",
h1: { before: "Schön, dass du ", em: "hier", after: " bist." } satisfies Headline,
subline:
"Du hast den Code an der Rückwand gescannt. Hier steht, worüber wir am Stand sprechen das Messe-Special, meine drei Themen und der kürzeste Weg zu einem Gespräch.",
/* Kein Knopf im Hero (Kundenwunsch, 07.09.2026): Die eine Aufforderung steht im
Kontakt-Band am Fuß der Seite dort mit Mail-Betreff „herCAREER Expo 2026“. */
/* Kein Fakten-Stapel im Hero (Kundenwunsch, 07.09.2026): Stand, Messetermin und
Themen standen dort ein zweites Mal Standnummer und Termin trägt der
Termine-Ledger weiter unten, die Themen der Abschnitt „Worüber wir reden“. */
folio: { next: { label: "Messe-Special", href: "#messe-special" } },
/* ---------- 01 Messe-Special (ivory) ---------- */
special: {
id: "messe-special",
eyebrow: "Messe-Special",
h2: { before: "Dein Vorteil.", em: "", after: "" } satisfies Headline,
title: "Das Special",
/* Wortlaut kommt von Anelia (docs/OFFENE-DATEN.md, Punkt 2.7). Bis dahin stehen die
Zeilen sichtbar als „[…]“ auf der Seite, und der Build-Guard hält den Launch-Flip an. */
rows: [
{ label: "Das Angebot", value: ph("Messe-Special: Was bekommt, wer den Code scannt?") },
{ label: "Gültig bis", value: ph("Frist, z. B. Anfragen bis 30.11.2026") },
{ label: "So einlösen", value: ph("Bedingung, z. B. Stichwort in der Anfrage") },
] satisfies readonly FactItem[],
},
/* ---------- 02 Themen (ivory) ---------- */
themen: {
id: "themen",
eyebrow: "Themen",
h2: { before: "Worüber wir reden.", em: "", after: "" } satisfies Headline,
rows: [
{
numeral: "01",
title: "Coaching & Analysen",
oneLiner:
"Wer bin ich, wo stehe ich, wo will ich hin? Persönlichkeits- und Verhaltensanalyse als Grundlage, dann die Arbeit zu zweit.",
keywords: ["Potenzialanalyse", "1:1 Coaching", "Neuorientierung", "Leadership"],
link: { label: "Zum Coaching", href: main(routes.coaching) },
},
{
numeral: "02",
title: "Trainings & Workshops",
oneLiner:
"B2B-Vertriebstraining: Umsatzwachstum durch Neukundengewinnung und Bestandskundenaufbau, typgerechte Kommunikation im Team.",
keywords: ["Neukundengewinnung", "Bestandskunden", "Teamkommunikation"],
link: { label: "Zu den Trainings", href: main(routes.trainings) },
},
{
numeral: "03",
title: "Keynotes & Speaking",
oneLiner:
"Inspirierende Vorträge für Firmen-Events und Veranstaltungen Impulse, die im Gedächtnis bleiben.",
keywords: ["WOLF-Prinzip", "Mut zum Erfolg", "Deutsch & Englisch"],
link: { label: "Zu den Keynotes", href: main(routes.keynotes) },
},
] satisfies readonly TocRow[],
},
/* ---------- 03 Auf der Messe (ivory) nur mit flags.showHerCareer ---------- */
messe: {
id: "auf-der-messe",
eyebrow: "Auf der Messe",
/* Eine Quelle für beide Seiten: derselbe Ledger steht auf der Startseite. */
termine,
},
/* ---------- 04 Kontakt (ink) ---------- */
/** Ziel des Datenschutz-Links im Formular absolut, wie jeder Link von hier weg. */
privacyHref: main(routes.datenschutz),
/**
* Derselbe Block wie Sektion 06 der Startseite: Formular links, Mail, Telefon und
* LinkedIn rechts. Feldbeschriftungen, Links und Abbinder kommen unverändert von
* dort eine Quelle. Eigen sind nur die Nummer, die Überschrift und der Betreff:
* Mit „herCAREER Expo 2026“ ist im Postfach ohne Nachfrage zu sehen, welche
* Anfrage von der Messe kommt.
*/
contact: {
...contactHome,
numeral: "04",
h2: { before: "Lass uns ", em: "weiterreden", after: "." } satisfies Headline,
/* Hinweiszeile und Datenschutz-Link entfallen hier (Kundenwunsch, 07.09.2026);
die Rückmeldung nach dem Absenden („opened“) bleibt. Beide Rechtstexte stehen
weiter im Fuß jeder Seite. */
form: { ...contactHome.form, subject: "herCAREER Expo 2026", note: "", privacy: "" },
},
} as const;
/* Build-Guard: der Launch-Flip (`flags.showPlaceholders: false`) darf keine sichtbaren
„[…]“ übrig lassen. Offene Punkte stehen in CONTENT_TODO (src/lib/legal.ts). */
assertNoPlaceholders("src/content/her-career.ts", collectStrings(herCareer));
/** Struktur, nicht Wortlaut die englische Fassung erfüllt denselben Typ. */
export type HerCareerContent = Widen<typeof herCareer>;