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 — capped at the same max-w-[75rem] the rest of the site
uses (e.g. ProductSpotlight.tsx), not full-bleed w-full. Without
it, the featured card's fixed-height-turned-h-full image column
kept stretching wider on very wide screens while its height
stayed pinned to the text column's content height, so the photo
got progressively more elongated/squashed the wider the
viewport — capping the card's own width caps that. */}
{/* 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