prime8dev

prime8dev
git clone https://git.prime8.dev/prime8dev.git
Log | Files | Refs | README | LICENSE

commit 365ad2fddf40c8d7be197fa6abb02656b2219db4
parent dec29a24645c98de6c2132234172f36129997f81
Author: Damian Myrda <damian@prime8.dev>
Date:   Sat, 31 Jan 2026 18:35:06 -0600

feat(blog): derive dates from file system metadata instead of frontmatter

Diffstat:
Mwebsite/src/blogs/index.ts | 32+++++++++++++++++++-------------
1 file changed, 19 insertions(+), 13 deletions(-)

diff --git a/website/src/blogs/index.ts b/website/src/blogs/index.ts @@ -1,6 +1,11 @@ +import { statSync } from "node:fs"; +import { resolve, dirname } from "node:path"; +import { fileURLToPath } from "node:url"; import matter from "gray-matter"; import { parseMarkdown, removeFirstH1 } from "../utils/markdown"; +const __dirname = dirname(fileURLToPath(import.meta.url)); + export interface Blog { id: string; title: string; @@ -13,32 +18,33 @@ export interface Blog { tags?: string[]; } -const blogModules = import.meta.glob<string>("./*.md", { +const blogModules = import.meta.glob("./*.md", { eager: true, query: "?raw", import: "default", }); -export const blogs = Object.values(blogModules) - .map(parseBlog) +export const blogs = Object.entries(blogModules) + .map(([path, content]) => + parseBlog(resolve(__dirname, path), content as string), + ) .sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()); -function parseBlog(markdown: string): Blog { +function formatDate(date: Date): string { + return date.toISOString().split("T")[0]; +} + +function parseBlog(path: string, markdown: string): Blog { + const stats = statSync(path); + const { data, content } = matter(markdown); const blog: Partial<Blog> = { id: data.id as string | undefined, title: data.title as string | undefined, description: data.description as string | undefined, - date: - data.date instanceof Date - ? data.date.toISOString().split("T")[0] - : (data.date as string | undefined), - modifiedDate: data.modifiedDate - ? data.modifiedDate instanceof Date - ? data.modifiedDate.toISOString().split("T")[0] - : (data.modifiedDate as string) - : undefined, + date: formatDate(stats.birthtime), + modifiedDate: formatDate(stats.mtime), url: data.url as string | undefined, content: parseMarkdown(removeFirstH1(content)), image: data.image as string | undefined,