import Link from "next/link"; import Image from "next/image"; import { getBlogPosts } from "../lib/payload"; import { Reveal, RevealGroup, RevealItem } from "./Reveal"; import { ArrowRightIcon } from "./ArrowRightIcon"; export async function Blog() { const posts = await getBlogPosts(3); if (posts.length === 0) return null; const featured = { ...posts[0], href: `/blog/${posts[0].slug}` }; const secondary = posts .slice(1, 3) .map((post) => ({ ...post, href: `/blog/${post.slug}` })); return (
{/* Section header */}

Neue Impulse

Gedanken, Methoden & Impulse

{/* Posts grid */} {/* Featured post — image on top on Mobile, side-by-side from sm+ */}
{featured.thumbnail && ( )}
{featured.categories.join(", ")} {featured.readTime} Min

{featured.title}

{featured.excerpt}

{/* flex + arrow as its own span — see Tools.tsx's comment on this same fix (→'s glyph baseline sits low next to text). */} Zum Beitrag
{/* Secondary posts — image on top through lg (1024px), side-by-side only from lg+. These sit 2-up (sm:grid-cols-2 below) well before lg, so each card's own available width through the 640-1023px tablet range is too narrow for image+text side by side — was sm:grid-cols-5, squeezing the text column. */}
{secondary.map((post) => (
{post.thumbnail && ( )}
{post.categories.join(", ")} {post.readTime} Min

{post.title}

{post.excerpt}

{/* flex + arrow as its own span — see the featured post's own Link above / Tools.tsx's comment on this same fix. */} Zum Beitrag
))}
); }