import type { Metadata } from "next"; import Link from "next/link"; import { Hero } from "@/components/Hero"; import { Button } from "@/components/Button"; import { Section, SectionHeading } from "@/components/Section"; import { AngebotCard } from "@/components/AngebotCard"; import { ImagePlaceholder } from "@/components/ImagePlaceholder"; import { RichText } from "@/components/RichText"; import { CTA } from "@/components/CTA"; import { Reveal } from "@/components/Reveal"; import { EventTeaserCard } from "@/components/EventTeaserCard"; import { getOffers, getPosts, getUpcomingEvents } from "@/lib/payload/content"; import { getHomeGlobal, getSEOSettingsGlobal } from "@/lib/payload/globals"; import { groupOffersByCategory, moodForOffer } from "@/lib/angebote"; import { mediaAlt, mediaUrl } from "@/lib/payload/media"; import { siteConfig } from "@/lib/site"; 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"; export const dynamic = "force-dynamic"; export async function generateMetadata(): Promise { const [home, seoSettings] = await Promise.all([getHomeGlobal(), getSEOSettingsGlobal()]); const resolved = resolveSeo({ seo: home.seo, fallbackTitle: `${siteConfig.name} – Begleitung für dich und deine Familie`, fallbackDescription: () => home.heroSupporting || seoSettings.defaultDescription || "Prozessbegleitung, Doula-Begleitung, Kindergruppen und Singkreise — Räume für Verbindung mit dir selbst, miteinander und mit der Natur.", fallbackImage: home.heroImage, defaultOgImage: seoSettings.defaultOgImage, }); const meta = await buildMetadata({ title: resolved.title, description: resolved.description, path: "", ogImageUrl: resolved.ogImageUrl, keywords: resolved.keywords, }); // Homepage bypasses the "%s — Anouma" title template — the brand is // already part of the fallback/CMS title itself, avoiding "Anouma — Anouma". return { ...meta, title: { absolute: resolved.title } }; } export default async function Home() { const [home, offers, posts, events] = await Promise.all([ getHomeGlobal(), getOffers(), getPosts(3), getUpcomingEvents(3), ]); const groups = groupOffersByCategory(offers); const siteUrl = await getSiteUrl(); return ( <> } > {home.heroHighlight &&

{home.heroHighlight}

} {home.heroSupporting && (

{home.heroSupporting}

)}
{groups.map((group, i) => { const isSingle = group.offers.length === 1; const first = group.offers[0]; return ( ); })}
{(home.aboutTitle || home.aboutText) && (
{home.aboutEyebrow && (

{home.aboutEyebrow}

)} {home.aboutTitle && (

{home.aboutTitle}

)} {home.aboutText && (
)}
)} {home.values && home.values.length > 0 && (
{home.values.map((wert, i) => (

{wert.title}

„{wert.quote}“

))}
)} {events.length > 0 && (
{events.map((event, i) => ( ))}
)} {posts.length > 0 && (
{posts.map((post, i) => (

{new Date(post.publishDate ?? post.createdAt).toLocaleDateString("de-DE", { day: "2-digit", month: "long", year: "numeric", })}

{post.title}

{post.teaser}

))}
)}
{(["moss", "rose", "peach", "sand"] as const).map((mood, i) => ( ))}
Alle Impressionen ansehen
); }