diff --git a/app/blog/[slug]/page.tsx b/app/blog/[slug]/page.tsx index f4e00e0..7747da7 100644 --- a/app/blog/[slug]/page.tsx +++ b/app/blog/[slug]/page.tsx @@ -55,15 +55,17 @@ export default async function BlogDetailPage({ {post.readTime} Min - {/* text-display + Playfair, not text-h-feature + Lora — matches - the actual Figma title exactly (Playfair Display SemiBold, - 44px), same "hero headline" treatment as Hero.tsx/ - TodoKartenHero.tsx/WeeklyImpulsesHero.tsx use, not the Lora - section-heading style the legal pages use. text-display's - clamp floors at exactly 2.75rem (44px) at the 768px Tablet - breakpoint, matching the Figma value precisely. */} + {/* Playfair (not Lora), matching the actual Figma title's font — + same "hero headline" family as Hero.tsx/TodoKartenHero.tsx/ + WeeklyImpulsesHero.tsx use, not the Lora section-heading style + the legal pages use. Sized down from text-display (Figma's + literal 44px), but text-h-feature (max 40px) read too small — + no named token sits between the two, so this is a one-off + fluid(36, 48) clamp using the project's own fluid.ts formula + (768px Tablet floor → 1440px Desktop cap), landing between + them instead of jumping all the way back to text-display. */}

{post.title} diff --git a/app/blog/page.tsx b/app/blog/page.tsx new file mode 100644 index 0000000..3fcd265 --- /dev/null +++ b/app/blog/page.tsx @@ -0,0 +1,136 @@ +import type { Metadata } from "next"; +import Link from "next/link"; +import Image from "next/image"; +import { Reveal, RevealGroup, RevealItem } from "../components/Reveal"; +import { Newsletter } from "../components/Newsletter"; +import { Footer } from "../components/Footer"; +import { getBlogPosts } from "../lib/payload"; +import { formatDate } from "../lib/format"; + +export const metadata: Metadata = { + title: "Blog", + description: "Gedanken, Methoden und Impulse für einen leichteren und klareren Alltag.", + alternates: { canonical: "/blog" }, +}; + +export default async function BlogOverviewPage() { + const posts = await getBlogPosts(100); + const [featured, ...rest] = posts; + + return ( + <> +

+ {/* Header — copy left, photo bleeds to the viewport edge on the + right with a left-edge fade into bg-base, matching Figma's + hero-fade-left/hero-fade-bottom overlays (node 4577:330). */} + +
+

+ Blog +

+

+ Gedanken, Methoden und Impulse für einen leichteren und klareren Alltag. +

+
+
+ +
+
+
+ + + {featured && ( + + +
+ {featured.thumbnail && ( + + )} +
+
+
+ {featured.category} + + {featured.readTime} Min +
+

+ {featured.title} +

+

{featured.excerpt}

+ + Zum Beitrag + + +
+ +
+ )} + + {rest.length > 0 && ( + + {rest.map((post) => ( + + +
+ {post.thumbnail && ( + + )} +
+
+
+ {post.category} + + {post.readTime} Min + + {formatDate(post.publishedAt)} +
+

+ {post.title} +

+

{post.excerpt}

+ + Zum Beitrag + + +
+ +
+ ))} +
+ )} + + +
+