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}
{yearPosts.map(({ slug, dateISO, dateTitle, dateDisplay, title, htmlTitle }) => (
-
))}
,
);
});
// grouped posts enter this component ordered chronologically -- we want reverse chronological
return <>{sections.toReversed()}>;
};
const Page = () => (
Notes
);
export default Page;