diff --git a/apps/blog/src/pages/blog/index.astro b/apps/blog/src/pages/blog/index.astro
new file mode 100644
index 0000000..9aa9ca0
--- /dev/null
+++ b/apps/blog/src/pages/blog/index.astro
@@ -0,0 +1,28 @@
+---
+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());
+
+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}`;
+}
+---
+
+
+
blog - lewis m.w.
+
+
+
+
+ blog
+ `${formatDate(post.data.date)} ${post.data.title}`).join('\n')} />
+
+
+
diff --git a/apps/blog/src/pages/bookmarks/index.astro b/apps/blog/src/pages/bookmarks/index.astro
new file mode 100644
index 0000000..63a04d4
--- /dev/null
+++ b/apps/blog/src/pages/bookmarks/index.astro
@@ -0,0 +1,49 @@
+---
+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 bookmarks = (yaml.load(bookmarksRaw) as Bookmark[])
+ .sort((a, b) => new Date(b.date).getTime() - new Date(a.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}`;
+}
+
+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;
+ }
+}
+---
+
+
+bookmarks - lewis m.w.
+
+
+
+
+ bookmarks
+ `${formatBookmarkDate(b.date)} ${b.title} (${extractDomain(b.url)})`).join('\n')} />
+
+
+
diff --git a/apps/blog/src/pages/guestbook/index.astro b/apps/blog/src/pages/guestbook/index.astro
new file mode 100644
index 0000000..a86e6da
--- /dev/null
+++ b/apps/blog/src/pages/guestbook/index.astro
@@ -0,0 +1,74 @@
+---
+import '../../styles/global.css';
+import { getApprovedEntries, type GuestbookEntry } from '../../lib/db';
+
+let guestbookEntries: GuestbookEntry[] = [];
+try {
+ guestbookEntries = await getApprovedEntries();
+} catch {
+ // DB not available during dev without env vars
+}
+
+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}`;
+}
+---
+
+
+guestbook - lewis m.w.
+
+
+
+
+ guestbook
+
+ {guestbookEntries.map(e => (
+
+ {formatDate(e.createdAt)}
+ ${e.name}` : e.name} /> {e.message}
+
+ ))}
+
+
+
+
+
+
+
diff --git a/apps/blog/src/pages/index.astro b/apps/blog/src/pages/index.astro
index ad3566c..bc82599 100644
--- a/apps/blog/src/pages/index.astro
+++ b/apps/blog/src/pages/index.astro
@@ -74,30 +74,42 @@ function extractDomain(url: string): string {
blog
- `${formatDate(post.data.date)} ${post.data.title}`).join('\n')} />
+ `${formatDate(post.data.date)} ${post.data.title}`),
+ ...(sorted.length > 10 ? [`+${sorted.length - 10} more`] : [])
+].join('\n')} />
txt
- `${formatDate(f.mtime)} ${f.name}`).join('\n')} />
+ `${formatDate(f.mtime)} ${f.name}`),
+ ...(txtFiles.length > 10 ? [`+${txtFiles.length - 10} more`] : [])
+].join('\n')} />
bookmarks
- `${formatBookmarkDate(b.date)} ${b.title} (${extractDomain(b.url)})`).join('\n')} />
+ `${formatBookmarkDate(b.date)} ${b.title} (${extractDomain(b.url)})`),
+ ...(bookmarks.length > 10 ? [`+${bookmarks.length - 10} more`] : [])
+].join('\n')} />
guestbook
- {guestbookEntries.map(e => (
+ {guestbookEntries.slice(0, 10).map(e => (
- {formatDate(e.createdAt)}
- ${e.name}` : e.name}: ${e.message}`} />
+ {formatDate(e.createdAt)}
+ ${e.name}` : e.name} /> {e.message}
))}
+
+
{guestbookEntries.length > 10 && +{guestbookEntries.length - 10} more}
+
sign
+
- sign