From b71a780ef82dacd18f76f4aa2e75e2e7e14af448 Mon Sep 17 00:00:00 2001 From: lew Date: Fri, 23 Jan 2026 19:15:35 +0000 Subject: [PATCH] feat: add md index page with category grouping --- apps/blog/src/pages/md/index.astro | 42 ++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 apps/blog/src/pages/md/index.astro diff --git a/apps/blog/src/pages/md/index.astro b/apps/blog/src/pages/md/index.astro new file mode 100644 index 0000000..e3d7ad0 --- /dev/null +++ b/apps/blog/src/pages/md/index.astro @@ -0,0 +1,42 @@ +--- +import { getCollection } from 'astro:content'; +import Layout from '../../layouts/Layout.astro'; + +const posts = await getCollection('posts'); + +// Group by category (default: "posts") +const grouped = posts.reduce((acc, post) => { + const category = post.data.category ?? 'posts'; + if (!acc[category]) acc[category] = []; + acc[category].push(post); + return acc; +}, {} as Record); + +// Sort categories alphabetically +const sortedCategories = Object.keys(grouped).sort(); + +// Sort posts within each category: pinned first, then by date descending +for (const category of sortedCategories) { + grouped[category].sort((a, b) => { + if (a.data.pinned && !b.data.pinned) return -1; + if (!a.data.pinned && b.data.pinned) return 1; + return b.data.date.getTime() - a.data.date.getTime(); + }); +} + +function formatDate(date: Date): string { + const d = String(date.getDate()).padStart(2, '0'); + const m = String(date.getMonth() + 1).padStart(2, '0'); + const y = String(date.getFullYear()).slice(-2); + return `${d}/${m}/${y}`; +} +--- + + +{sortedCategories.map(category => ( +
+ {category} +
 `${formatDate(post.data.date)}    ${post.data.title}${post.data.pinned ? ' [pinned]' : ''}`).join('\n')} />
+
+))} +