Auf der Messeseite stehen unter dem Knopf kein Hinweis und kein Datenschutz-Link mehr (Kundenwunsch). Beides folgt jetzt dem Inhalt: leere Texte in src/content/her-career.ts, keine Zeile – die Startseite bleibt unverändert. Rückmeldung und Rückfall-Link hängen NICHT daran. Antwortet /api/contact nicht, erscheint auch auf der Messeseite „Das hat gerade nicht geklappt“ samt Mail-Link; dessen Betreff ist „herCAREER Expo 2026“. Das <p> bleibt immer im Dokument, weil ein aria-live-Bereich, den es beim Absenden noch nicht gab, von Screenreadern nicht zuverlässig vorgelesen wird. Offen und vor dem Livegang zu entscheiden (docs/OFFENE-DATEN.md 3.17): Seit dem Formular-Umbau überträgt das Formular an den Server, die Datenschutzerklärung beschreibt das in Ziffer 5. Die entfernte Zeile war damit die Information nach Art. 13 DSGVO am Ort der Erhebung; erreichbar bleibt die Erklärung nur noch über den Fuß. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
152 lines
7.2 KiB
TypeScript
152 lines
7.2 KiB
TypeScript
/**
|
||
* /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).
|
||
Rückmeldung und Rückfall-Link beim Absenden bleiben. ACHTUNG: Seit dem Umbau
|
||
des Formulars („Kontaktformular verschickt wirklich“) gehen die Eingaben an
|
||
/api/contact – die Datenschutzerklärung beschreibt das in Ziffer 5. Damit ist
|
||
der Hinweis neben dem Formular eine Information nach Art. 13 DSGVO zum
|
||
Zeitpunkt der Erhebung; erreichbar bleibt sie nur über den Fuß. Vor dem
|
||
Livegang mit Anelia klären (docs/OFFENE-DATEN.md, Punkt 3.17). */
|
||
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>;
|