Trainings + Keynotes: Terminanfrage statt Kontakt-Band, Doppeltes raus
Beide Leistungsseiten enden jetzt mit der Terminanfrage: dasselbe Formular wie auf der Startseite (an /api/contact), mit zwei freiwilligen Feldern – Trainings: Wunschtermin/Zeitraum und Teamgröße, Keynotes: Datum und Veranstaltung & Ort. Das Anliegen („Terminanfrage Training“ / „… Keynote“) geht als `topic` mit und wird beim Hoster zum Mail-Betreff, die Felder als `details` in die Mail. Der Knopf im Hero („Training anfragen“, „Keynote anfragen“) springt dorthin statt ein Mailprogramm zu öffnen. Entfallen, weil es schon auf der Seite stand: - Trainings: „Typische Ziele“ (Spiegel der drei Bremsen), der Rahmen-Abschnitt (= Hero-Fakten), die Randspalte im Ablauf (wiederholte die Schritte), die FAQ zur Teilnehmerzahl; Subline ohne die Format-/Sprach-Wiederholung. - Keynotes: die Unterbrechung „Mut zum Erfolg.“ (= H1 und Vortragstitel), die Speaker-Facts (= Hero-Fakten; „Technik“ steht jetzt dort), die FAQ „Auf Englisch?“; die Termine hängen direkt unter dem Vortrag. Datenschutzerklärung Ziffer 2 und 5 (DE/EN): mehrere Formulare, die neuen freiwilligen Felder. Ungenutzt und entfernt: TrainingsGoals, TrainingsRahmen, TrainingsBand, FactsStrip, Interruption, `mailto` in site.ts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
a37e48e4ef
commit
f825e74222
20 files changed
+268
-400
No files matched your search
+25
-40
@@ -1,10 +1,15 @@
|
||||
/**
|
||||
* /leistungen/keynotes/ – Keynotes & Speaking (Spec §7.4). Copy 1:1, Du-Form.
|
||||
* Entschlackt am 02.10.2026: Die typografische Unterbrechung („Mut zum Erfolg.“ – stand
|
||||
* schon als H1 und im Vortragstitel), die Speaker-Facts (wiederholten die Hero-Fakten;
|
||||
* nur „Technik“ war neu und steht jetzt dort) und die FAQ „Auf Englisch?“ sind
|
||||
* entfallen. Die Termine hängen unter dem Vortrag. Statt des Kontakt-Bands mit
|
||||
* mailto-Knopf schließt die Seite mit der Terminanfrage (Formular).
|
||||
* 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 { routes } 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";
|
||||
@@ -39,8 +44,9 @@ export const keynotes = {
|
||||
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,
|
||||
"Keynotes nach dem WOLF-Prinzip für Firmen-Events, Kick-offs und Kongresse. Ein Impuls, der nachwirkt.",
|
||||
/* Springt zur Terminanfrage am Fuß der Seite (vorher: mailto). */
|
||||
cta: { label: "Keynote anfragen", href: `${routes.keynotes}#terminanfrage` } satisfies Cta,
|
||||
/** Nur rendern, wenn die PDF-Datei existiert (assets.getSpeakerPdf()). */
|
||||
secondary: { label: "Speaker-Profil (PDF)", href: "/speaker-profil.pdf", external: true },
|
||||
facts: [
|
||||
@@ -48,6 +54,7 @@ export const keynotes = {
|
||||
{ label: "Format", value: "Live, online, hybrid" },
|
||||
{ label: "Sprache", value: "Deutsch / Englisch" },
|
||||
{ label: "Ort", value: "Deutschlandweit, Europa auf Anfrage" },
|
||||
{ label: "Technik", value: "Headset, Präsentation optional" },
|
||||
] satisfies readonly FactItem[],
|
||||
alt: "Anelia Wolf auf der Bühne",
|
||||
caption: `Anelia Wolf · Foto: ${ph("Name der Fotografin")}`,
|
||||
@@ -70,17 +77,6 @@ export const keynotes = {
|
||||
] 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",
|
||||
@@ -113,26 +109,10 @@ export const keynotes = {
|
||||
] 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" },
|
||||
},
|
||||
/** Zeile unter dem Vortrag – nur, wenn die PDF-Datei geliefert wurde (assets.getSpeakerPdf()). */
|
||||
speakerPdf: { label: "Speaker-Profil (PDF)", text: "Kurzvita, Themen, Fotos, Technik", href: "/speaker-profil.pdf" },
|
||||
|
||||
faq: {
|
||||
id: "faq",
|
||||
@@ -146,10 +126,6 @@ export const keynotes = {
|
||||
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.",
|
||||
@@ -157,10 +133,19 @@ export const keynotes = {
|
||||
] 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",
|
||||
/**
|
||||
* Terminanfrage (ink) – das Formular der Startseite mit zwei freiwilligen Feldern.
|
||||
* `topic` wird zum Mail-Betreff; `mailLabel` beschriftet die Felder in der Mail.
|
||||
*/
|
||||
anfrage: {
|
||||
id: "terminanfrage",
|
||||
eyebrow: "Terminanfrage",
|
||||
h2: { before: "Lass uns einen ", em: "Termin", after: " finden." } satisfies Headline,
|
||||
topic: "Terminanfrage Keynote",
|
||||
fields: [
|
||||
{ name: "datum", label: "Datum der Veranstaltung", mailLabel: "Datum" },
|
||||
{ name: "veranstaltung", label: "Veranstaltung & Ort", mailLabel: "Veranstaltung & Ort" },
|
||||
],
|
||||
},
|
||||
} as const;
|
||||
|
||||
|
||||
Reference in new issue
Block a user