From a88af69ffdc3e61e81a3542fcfc479303704b89d Mon Sep 17 00:00:00 2001 From: lew Date: Fri, 23 Jan 2026 01:28:19 +0000 Subject: [PATCH] feat: add bookmarks data file and render in index Create bookmarks.yaml data file with sample entries and update index.astro to import, parse, and display bookmarks with format DD/MM/YY Site Name (domain.com) --- apps/blog/package.json | 4 +++- apps/blog/src/data/bookmarks.yaml | 7 +++++++ apps/blog/src/pages/index.astro | 25 +++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 apps/blog/src/data/bookmarks.yaml diff --git a/apps/blog/package.json b/apps/blog/package.json index cfb0745..565fd26 100644 --- a/apps/blog/package.json +++ b/apps/blog/package.json @@ -7,9 +7,11 @@ "preview": "astro preview" }, "dependencies": { - "astro": "^5.16.13" + "astro": "^5.16.13", + "js-yaml": "^4.1.1" }, "devDependencies": { + "@types/js-yaml": "^4.0.9", "remark-directive": "^3.0.0", "remark-gfm": "^4.0.0", "remark-slug": "^7.0.1", diff --git a/apps/blog/src/data/bookmarks.yaml b/apps/blog/src/data/bookmarks.yaml new file mode 100644 index 0000000..03b693e --- /dev/null +++ b/apps/blog/src/data/bookmarks.yaml @@ -0,0 +1,7 @@ +- date: 2026-01-15 + title: Hacker News + url: https://news.ycombinator.com + +- date: 2026-01-10 + title: Astro Documentation + url: https://docs.astro.build/en/getting-started/ diff --git a/apps/blog/src/pages/index.astro b/apps/blog/src/pages/index.astro index 3d133ee..f8fabfc 100644 --- a/apps/blog/src/pages/index.astro +++ b/apps/blog/src/pages/index.astro @@ -1,21 +1,46 @@ --- import { getCollection } from 'astro:content'; import '../styles/global.css'; +import yaml from 'js-yaml'; +import bookmarksRaw from '../data/bookmarks.yaml?raw'; + +interface Bookmark { + date: string; + title: string; + url: string; +} const posts = await getCollection('posts'); const sorted = posts.sort((a, b) => b.data.date.getTime() - a.data.date.getTime()); +const bookmarks = yaml.load(bookmarksRaw) as Bookmark[]; + 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}`; } + +function formatBookmarkDate(dateStr: string): string { + const date = new Date(dateStr); + return formatDate(date); +} + +function extractDomain(url: string): string { + try { + const parsed = new URL(url); + return parsed.hostname.replace(/^www\./, ''); + } catch { + return url; + } +} --- Blog
 `${formatDate(post.data.date)}    ${post.data.title}`).join('\n')} />
+
 `${formatBookmarkDate(b.date)}    ${b.title} (${extractDomain(b.url)})`).join('\n')} />