import Link from "next/link"; import { Suspense, ViewTransition } from "react"; import { PageTitle } from "@/components/layout/page-title"; import { DirectionalTransition } from "@/components/page-transition"; import { PostStats, PostStatsSkeleton } from "@/components/post-stats"; import authorConfig from "@/lib/config/author"; import { createMetadata } from "@/lib/metadata"; import { type FrontMatter, getFrontMatter, POSTS_DIR } from "@/lib/posts"; export const metadata = createMetadata({ title: "Notes", description: `Recent posts by ${authorConfig.name}.`, canonical: `/${POSTS_DIR}`, }); const PostsList = () => { const posts = getFrontMatter(); const formattedPosts = posts.map((post) => { const d = new Date(post.date); return Object.assign(post, { year: d.getUTCFullYear(), dateISO: d.toISOString(), dateTitle: d.toLocaleString("en-US", { month: "short", day: "numeric", year: "numeric", hour: "numeric", minute: "2-digit", timeZoneName: "short", }), dateDisplay: d.toLocaleDateString("en-US", { month: "short", day: "numeric", }), }); }); const postsByYear: { [year: string]: (FrontMatter & { year: number; dateISO: string; dateTitle: string; dateDisplay: string; })[]; } = {}; for (const post of formattedPosts) { if (!postsByYear[post.year]) { postsByYear[post.year] = []; } postsByYear[post.year].push(post); } const sections: React.ReactNode[] = []; Object.entries(postsByYear).forEach(([year, yearPosts]) => { sections.push(

{year}

, ); }); // grouped posts enter this component ordered chronologically -- we want reverse chronological return <>{sections.toReversed()}; }; const Page = () => ( Notes ); export default Page;