--- import Layout from '../../layouts/BaseLayout.astro'; import TerminalWindow from '../../components/ui/TerminalWindow.astro'; import CommandPrompt from '../../components/ui/CommandPrompt.astro'; import FilterPill from '../../components/ui/FilterPill.astro'; import { api, DEFAULT_SITE_SETTINGS } from '../../lib/api/client'; import { getI18n, formatReadTime } from '../../lib/i18n'; import type { Post } from '../../lib/types'; import { getAccentVars, getCategoryTheme, getPostTypeTheme } from '../../lib/utils'; export const prerender = false; let siteSettings = DEFAULT_SITE_SETTINGS; let posts: Post[] = []; const { locale, t } = getI18n(Astro); try { [siteSettings, posts] = await Promise.all([ api.getSiteSettings(), api.getPosts(), ]); } catch (error) { console.error('Failed to load timeline:', error); } const groupedByYear = posts.reduce((acc: Record, post) => { const year = new Date(post.date).getFullYear(); if (!acc[year]) acc[year] = []; acc[year].push(post); return acc; }, {}); const years = Object.keys(groupedByYear).sort((a, b) => Number(b) - Number(a)); const latestYear = years[0] || 'all'; ---
activity trace

{t('timeline.title')}

{t('timeline.subtitle', { count: posts.length, ownerName: siteSettings.ownerName })}

{t('timeline.allYears')} {years.map(year => ( {year} [{groupedByYear[Number(year)].length}] ))}