first publish

This commit is contained in:
knso committed 2026-09-06 17:21:52 +02:00
commit b8e41b4d55
147 files changed
+19367

No files matched your search

+173
View File
@@ -0,0 +1,173 @@
/**
* /leistungen/keynotes/ – Keynotes & Speaking (Spec §7.4). Copy 1:1, Du-Form.
* Zweiter Vortrag („Unlock your Sales-DNA“) bleibt weg (flags.showSecondTalk: false).
* Speaker-Profil-Zeile nur mit flags.showSpeakerPdf bzw. vorhandener Datei (assets.getSpeakerPdf()).
* FAQ-Antworten: kurz, aus den Spec-Fakten abgeleitet (Spec A.8).
*/
import { mailto } from "@/lib/site";
import type { Widen } from "./widen";
import { assertNoPlaceholders, collectStrings, ph } from "@/lib/legal";
import type { ColumnItem, Cta, FactItem, FaqItem, GoalRow, Headline } from "./home";
import { termine } from "./home";
export interface TalkRow {
numeral: string;
title: string;
message: string;
audience: string;
meta: string;
}
/** Labels der Vortrags-Zeile (Kernbotschaft / Für wen). */
export const talkLabels = { message: "Kernbotschaft", audience: "Für wen" } as const;
export const keynotes = {
meta: {
title: "Keynotes & Speaking",
description:
"Keynotes nach dem WOLF-Prinzip für Firmen-Events, Kick-offs und Kongresse. Ein Impuls, der nachwirkt – auf Deutsch oder Englisch, live oder online. Anelia Wolf, Keynote Speakerin.",
},
numeral: "03",
masthead: {
role: "Keynote Speakerin · Trainerin · Coach",
center: "Keynotes & Speaking",
lang: "Deutsch & Englisch",
},
/* No-break space before the separator: at 390 px this label wraps and a line must never open with „·“. */
eyebrow: "Keynotes nach dem WOLF-Prinzip · Deutsch & Englisch",
/** Das kursive Wort darf hier zusätzlich `.gold-text` tragen (das eine Gradient-Wort der Seite). */
h1: { before: "Mut zum ", em: "Erfolg", after: "." } satisfies Headline,
h1GoldEm: true,
subline:
"Keynotes nach dem WOLF-Prinzip für Firmen-Events, Kick-offs und Kongresse. Ein Impuls, der nachwirkt – auf Deutsch oder Englisch, live oder online.",
cta: { label: "Keynote anfragen", href: mailto.keynote } satisfies Cta,
/** Nur rendern, wenn die PDF-Datei existiert (assets.getSpeakerPdf()). */
secondary: { label: "Speaker-Profil (PDF)", href: "/speaker-profil.pdf", external: true },
facts: [
{ label: "Dauer", value: "20–60 Minuten" },
{ label: "Format", value: "Live, online, hybrid" },
{ label: "Sprache", value: "Deutsch / Englisch" },
{ label: "Ort", value: "Deutschlandweit, Europa auf Anfrage" },
] satisfies readonly FactItem[],
alt: "Anelia Wolf auf der Bühne",
caption: `Anelia Wolf · Foto: ${ph("Name der Fotografin")}`,
folio: { next: { label: "Der Vortrag", href: "#vortrag" } },
talk: {
id: "vortrag",
eyebrow: "Signature Talk",
h2: { before: "Der Vortrag.", em: "", after: "" } satisfies Headline,
rows: [
{
numeral: "01",
/* U+2011 (non-breaking hyphen) keeps „WOLF-Prinzip“ on one line. */
title: "Das WOLF‑Prinzip – Mut zum Erfolg!",
message:
"Starke Persönlichkeit, souveräne Wirkung, maximaler Erfolg: wie du dein Potenzial erkennst und selbstbewusst einsetzt – im Leben und im Business.",
audience: "Mitarbeitende, Vertriebsteams, Führungskräfte, Karriere-Publikum",
meta: "20–60 Min. · DE/EN · live & online",
},
] satisfies readonly TalkRow[],
},
/* Spec §7.4 wörtlich. Die vorherige Fassung („Ein Impuls, der nachwirkt.“) stand nicht
in Abschnitt A und brach zugleich Spec §0 Kritik #4: der Satz darf EINMAL pro
Keynote-Seite vorkommen und stand dann in Subline, Meta-Description und in der
Unterbrechung – die eine große typografische Pause wiederholte, was 400 px darüber
schon zu lesen war. */
interruption: {
id: "mut",
text: "Mut zum Erfolg.",
mono: "Keynote · herCAREER Expo 2026 · 23.10. · 10:30 · Auditorium 2",
},
occasions: {
id: "anlaesse",
eyebrow: "Anlässe",
h2: { before: "Drei Bühnen.", em: "", after: "" } satisfies Headline,
/* U+2011 (geschützter Trennstrich) hält „Kick-offs“ und „Hochschul-Event“ in einer Zeile. */
columns: [
{
title: "Firmen-Events & Kick‑offs",
lines: ["Jahresauftakt", "Vertriebs-Kick‑off", "Führungskreis"],
},
{
title: "Vertriebstagungen & Kongresse",
lines: ["Vertriebstagung", "Branchenkongress", "Messeauftritt"],
},
{
title: "Karriere-Events & Frauennetzwerke",
lines: ["Karrieremesse", "Frauennetzwerk", "Hochschul‑Event"],
},
] satisfies readonly ColumnItem[],
},
takeaways: {
id: "publikum",
eyebrow: "Was dein Publikum mitnimmt",
h2: { before: "Was bleibt.", em: "", after: "" } satisfies Headline,
rows: [
{ text: "Klarheit darüber, wer man ist und wofür man steht." },
{ text: "Ein konkretes Vorgehen für souveränes Auftreten – im Kundengespräch wie im Team." },
{ text: "Den Mut, die nächste Entscheidung selbst zu treffen." },
] satisfies readonly GoalRow[],
},
speakerFacts: {
id: "speaker-facts",
items: [
{ label: "Sprachen", value: "DE / EN" },
{ label: "Dauer", value: "20–60 Min." },
{ label: "Format", value: "live, online, hybrid" },
{ label: "Technik", value: "Headset, Präsentation optional" },
{ label: "Reise", value: "deutschlandweit, Europa auf Anfrage" },
{ label: "Anfrage", value: "unverbindlich" },
] satisfies readonly FactItem[],
},
termine,
veranstalter: {
id: "veranstalter",
eyebrow: "Für Veranstalter",
h2: { before: "Alles Wichtige vorab.", em: "", after: "" } satisfies Headline,
speakerPdf: { label: "Speaker-Profil (PDF)", text: "Kurzvita, Themen, Fotos, Technik", href: "/speaker-profil.pdf" },
},
faq: {
id: "faq",
eyebrow: "FAQ",
items: [
{
q: "Wie lange im Voraus anfragen?",
a: "So früh wie möglich – Termine vergebe ich nach Eingang der Anfrage. Frag unverbindlich an, dann prüfe ich die Verfügbarkeit.",
},
{
q: "Auch als Workshop nach der Keynote?",
a: "Ja. Die Keynote lässt sich mit einem Workshop oder Training kombinieren – am selben Tag oder als Folgetermin.",
},
{
q: "Auf Englisch?",
a: "Ja. Keynotes halte ich auf Deutsch oder Englisch – live, online oder hybrid.",
},
{
q: "Gibt es Video oder Referenzen?",
a: "Auf Anfrage. Sprich mich an, dann schicke ich dir Unterlagen zum Vortrag.",
},
] satisfies readonly FaqItem[],
},
band: {
h2: { before: "Hol das WOLF-Prinzip auf deine Bühne.", em: "", after: "" } satisfies Headline,
cta: { label: "Keynote anfragen", href: mailto.keynote } satisfies Cta,
micro: "Unverbindlich · Antwort auf Deutsch oder Englisch",
},
} as const;
/* Build-Guard: der Launch-Flip (`flags.showPlaceholders: false`) darf keine sichtbaren
„[…]“ übrig lassen. Der Scan läuft über das ganze Objekt, damit die Liste nicht
auseinanderläuft – offene Punkte stehen in CONTENT_TODO (src/lib/legal.ts). */
assertNoPlaceholders("src/content/keynotes.ts", collectStrings(keynotes));
/** Struktur, nicht Wortlaut – die englische Fassung erfüllt denselben Typ. */
export type KeynotesContent = Widen<typeof keynotes>;