--- import { getCollection } from 'astro:content'; import Layout from '../layouts/Layout.astro'; import { getApprovedEntries, type GuestbookEntry } from '../lib/db'; import { formatDate, extractDomain, formatListItem } from '../lib/format'; import { organizePostsByCategory, getSlug } from '../lib/md'; import { getTxtFiles } from '../lib/txt'; const posts = await getCollection('md', ({ data }) => data.draft !== true); const { grouped, categories: sortedCategories } = organizePostsByCategory(posts); const bookmarksCollection = await getCollection('bookmarks'); const bookmarks = bookmarksCollection .sort((a, b) => b.data.date.getTime() - a.data.date.getTime()); const txtFiles = getTxtFiles(); let guestbookEntries: GuestbookEntry[] = []; try { guestbookEntries = await getApprovedEntries(); } catch { // DB not available during dev without env vars } --- {sortedCategories.map(category => { const categoryPosts = grouped[category]; return (
{category}
 formatListItem(post.data.date, `/md/${getSlug(post.id)}`, post.data.title, { pinned: post.data.pinned })),
  ...(categoryPosts.length > 10 ? [`+${categoryPosts.length - 10} more`] : [])
].join('\n')} />
); })}
txt
 formatListItem(f.date, `/txt/${f.name}`, f.name, { pinned: f.pinned })),
  ...(txtFiles.length > 10 ? [`+${txtFiles.length - 10} more`] : [])
].join('\n')} />
bookmarks
 formatListItem(b.data.date, b.data.url, b.data.title, { suffix: `(${extractDomain(b.data.url)})` })),
  ...(bookmarks.length > 10 ? [`+${bookmarks.length - 10} more`] : [])
].join('\n')} />
guestbook
{guestbookEntries.slice(0, 10).map(e => (
{formatDate(e.createdAt)} ${e.name}` : e.name} /> {e.message}
))}
{guestbookEntries.length > 10 && +{guestbookEntries.length - 10} more} sign