import { loader } from "fumadocs-core/source"; import { changelog } from "@/.source/server"; import { formatDate } from "@/lib/utils"; import { getMDXComponents } from "@/mdx-components"; const source = loader({ baseUrl: "/changelog", source: changelog.toFumadocsSource(), }); interface ChangelogData { title: string; date: string; version?: string; tags?: string[]; body: React.ComponentType<{ components?: Record }>; } interface ChangelogPageItem { url: string; data: ChangelogData; } export default async function ChangelogPage() { const allPages = source.getPages() as ChangelogPageItem[]; const sortedChangelogs = allPages.sort((a, b) => { const dateA = new Date(a.data.date).getTime(); const dateB = new Date(b.data.date).getTime(); return dateB - dateA; }); return (
{/* Header */}

Changelog

Stay up to date with the latest updates and improvements to SurfSense.

{/* Timeline */}
{sortedChangelogs.map((changelog) => { const MDX = changelog.data.body; const date = new Date(changelog.data.date); const formattedDate = formatDate(date); return (
{changelog.data.version && (
{changelog.data.version}
)}
{/* Right side - Content */}
{/* Vertical timeline line */}
{/* Timeline dot */}

{changelog.data.title}

{/* Tags */} {changelog.data.tags && changelog.data.tags.length > 0 && (
{changelog.data.tags.map((tag: string) => ( {tag} ))}
)}
); })}
); }