import type { Metadata } from "next"; import { PageHeader } from "@/components/PageHeader"; import { Section, SectionHeading } from "@/components/Section"; import { ContactForm } from "@/components/ContactForm"; import { AngebotCard } from "@/components/AngebotCard"; import { Reveal } from "@/components/Reveal"; import { getBookingGlobal, getSEOSettingsGlobal } from "@/lib/payload/globals"; import { getOffers } from "@/lib/payload/content"; import { moodForOffer } from "@/lib/angebote"; import { mediaUrl } from "@/lib/payload/media"; import { resolveSeo } from "@/lib/seo/resolve"; import { buildMetadata } from "@/lib/seo/metadata"; import { getSiteUrl } from "@/lib/seo/config"; import { JsonLd, webPageJsonLd } from "@/lib/seo/jsonld"; import { siteConfig } from "@/lib/site"; export const dynamic = "force-dynamic"; const FALLBACK_DESCRIPTION = "Kennenlernen & Termine vereinbaren."; const turnstileSiteKey = process.env.TURNSTILE_SITE_KEY ?? ""; export async function generateMetadata(): Promise { const [booking, seoSettings] = await Promise.all([getBookingGlobal(), getSEOSettingsGlobal()]); const resolved = resolveSeo({ seo: booking.seo, fallbackTitle: `Termin buchen - ${siteConfig.name}`, fallbackDescription: () => booking.lead || seoSettings.defaultDescription || FALLBACK_DESCRIPTION, defaultOgImage: seoSettings.defaultOgImage, }); return buildMetadata({ title: resolved.title, description: resolved.description, path: "/termin-buchen", ogImageUrl: resolved.ogImageUrl, keywords: resolved.keywords, }); } export default async function TerminBuchenPage() { const [booking, offers] = await Promise.all([getBookingGlobal(), getOffers()]); const bookableOffers = offers.filter((offer) => offer.bookable); const siteUrl = await getSiteUrl(); return ( <>

Direkt buchen

Freien Termin auswählen

Wähle ein Angebot, einen freien Tag und eine passende Uhrzeit im Kalender.

Zum Kalender

Persönlich abstimmen

Anfrage stellen

Wenn du keinen freien Kalendertermin brauchst oder etwas Besonderes besprechen möchtest.

Zur Kontaktseite
{bookableOffers.length > 0 && (
{bookableOffers.map((offer, i) => ( ))}
)} {booking.steps && booking.steps.length > 0 && (
{booking.steps.map((s, i) => (

{String(i + 1).padStart(2, "0")}

{s.title}

{s.text}

))}
)}
0 ? "Für einen konkreten Termin wähle oben ein Angebot - hier kannst du auch einfach eine allgemeine Nachricht schreiben." : undefined } align="left" />
); }