From 6497f485e1b408452285e5ebb957654746dbe0e6 Mon Sep 17 00:00:00 2001 From: lew Date: Fri, 23 Jan 2026 19:22:21 +0000 Subject: [PATCH] feat: update homepage to show posts grouped by category --- apps/blog/src/pages/index.astro | 36 +++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/apps/blog/src/pages/index.astro b/apps/blog/src/pages/index.astro index cd98b44..845308e 100644 --- a/apps/blog/src/pages/index.astro +++ b/apps/blog/src/pages/index.astro @@ -19,11 +19,26 @@ interface TxtFile { } const posts = await getCollection('posts'); -const sorted = posts.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(); -}); + +// 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(); + }); +} const bookmarks = (yaml.load(bookmarksRaw) as Bookmark[]) .sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()); @@ -70,13 +85,18 @@ function extractDomain(url: string): string { --- +{sortedCategories.map(category => { + const categoryPosts = grouped[category]; + return (
- blog + {category}
 `${formatDate(post.data.date)}    ${post.data.title}${post.data.pinned ? ' [pinned]' : ''}`),
-  ...(sorted.length > 10 ? [`+${sorted.length - 10} more`] : [])
+  ...categoryPosts.slice(0, 10).map(post => `${formatDate(post.data.date)}    ${post.data.title}${post.data.pinned ? ' [pinned]' : ''}`),
+  ...(categoryPosts.length > 10 ? [`+${categoryPosts.length - 10} more`] : [])
 ].join('\n')} />
 
+ ); +})}
txt