diff --git a/apps/blog/src/content.config.ts b/apps/blog/src/content.config.ts index 4d660c3..d4eb3b2 100644 --- a/apps/blog/src/content.config.ts +++ b/apps/blog/src/content.config.ts @@ -6,7 +6,8 @@ const posts = defineCollection({ loader: glob({ pattern: '**/*.md', base: './src/content/posts' }), schema: z.object({ title: z.string(), - date: z.coerce.date() + date: z.coerce.date(), + pinned: z.boolean().optional() }) }); diff --git a/apps/blog/src/content/posts/hello-world.md b/apps/blog/src/content/posts/hello-world.md index 9c74d61..556a892 100644 --- a/apps/blog/src/content/posts/hello-world.md +++ b/apps/blog/src/content/posts/hello-world.md @@ -1,6 +1,7 @@ --- title: hello world date: 2026-01-01 +pinned: true --- This is my first blog post. :right[A sidenote appears here on wide screens.] diff --git a/apps/blog/src/pages/blog/index.astro b/apps/blog/src/pages/blog/index.astro index 4a83dc0..140f0a8 100644 --- a/apps/blog/src/pages/blog/index.astro +++ b/apps/blog/src/pages/blog/index.astro @@ -3,7 +3,11 @@ import { getCollection } from 'astro:content'; import '../../styles/global.css'; const posts = await getCollection('posts'); -const sorted = posts.sort((a, b) => b.data.date.getTime() - a.data.date.getTime()); +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(); +}); function formatDate(date: Date): string { const d = String(date.getDate()).padStart(2, '0'); @@ -22,7 +26,7 @@ function formatDate(date: Date): string {
blog -
 `${formatDate(post.data.date)}    ${post.data.title}`).join('\n')} />
+
 `${formatDate(post.data.date)}    ${post.data.title}${post.data.pinned ? ' [pinned]' : ''}`).join('\n')} />
 
diff --git a/apps/blog/src/pages/index.astro b/apps/blog/src/pages/index.astro index 08b605c..74337ea 100644 --- a/apps/blog/src/pages/index.astro +++ b/apps/blog/src/pages/index.astro @@ -19,7 +19,11 @@ interface TxtFile { } const posts = await getCollection('posts'); -const sorted = posts.sort((a, b) => b.data.date.getTime() - a.data.date.getTime()); +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(); +}); const bookmarks = (yaml.load(bookmarksRaw) as Bookmark[]) .sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()); @@ -75,7 +79,7 @@ function extractDomain(url: string): string {
blog
 `${formatDate(post.data.date)}    ${post.data.title}`),
+  ...sorted.slice(0, 10).map(post => `${formatDate(post.data.date)}    ${post.data.title}${post.data.pinned ? ' [pinned]' : ''}`),
   ...(sorted.length > 10 ? [`+${sorted.length - 10} more`] : [])
 ].join('\n')} />