From 7ebc72f3f5de24a293db144cd1745cea52c3e717 Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Wed, 27 May 2026 20:50:16 +0300 Subject: feat: add website release notes --- website/src/pages/blog/[slug].astro | 88 +++++++++++++++++++++++++++++ website/src/pages/blog/index.astro | 38 +++++++++++++ website/src/pages/compare.astro | 5 +- website/src/pages/releases/[...slug].astro | 89 ++++++++++++++++++++++++++++++ website/src/pages/releases/index.astro | 42 ++++++++++++++ 5 files changed, 261 insertions(+), 1 deletion(-) create mode 100644 website/src/pages/blog/[slug].astro create mode 100644 website/src/pages/blog/index.astro create mode 100644 website/src/pages/releases/[...slug].astro create mode 100644 website/src/pages/releases/index.astro (limited to 'website/src/pages') diff --git a/website/src/pages/blog/[slug].astro b/website/src/pages/blog/[slug].astro new file mode 100644 index 00000000..10939fd0 --- /dev/null +++ b/website/src/pages/blog/[slug].astro @@ -0,0 +1,88 @@ +--- +import { getCollection, render } from 'astro:content'; +import MarketingLayout from '../../components/MarketingLayout.astro'; + +export async function getStaticPaths() { + const posts = await getCollection('blog'); + return posts + .filter((post) => !post.data.draft) + .map((post) => { + const slug = post.id.replace(/\.(md|mdx)$/i, ''); + return { + params: { slug }, + props: { post, slug }, + }; + }); +} + +const { post, slug } = Astro.props; +const { Content, headings } = await render(post); +const sectionHeadings = headings.filter((heading) => heading.depth === 2); +--- + + +
+
+ + +
+
+ +

{post.data.title}

+

{post.data.description}

+
+
+ +
+
+
+
+ + +
diff --git a/website/src/pages/blog/index.astro b/website/src/pages/blog/index.astro new file mode 100644 index 00000000..8ca2ca10 --- /dev/null +++ b/website/src/pages/blog/index.astro @@ -0,0 +1,38 @@ +--- +import { getCollection } from 'astro:content'; +import MarketingLayout from '../../components/MarketingLayout.astro'; + +const posts = (await getCollection('blog')) + .filter((post) => !post.data.draft) + .map((post) => ({ ...post, slug: post.id.replace(/\.(md|mdx)$/i, '') })) + .sort((a, b) => b.data.date.valueOf() - a.data.date.valueOf()); +--- + + +
+
+

Blog

+

Notes from Herdr.

+

+ Product notes and implementation writeups for the terminal-native agent multiplexer. +

+
+ +
+
+ {posts.map((post) => ( + + ))} +
+
+
+
diff --git a/website/src/pages/compare.astro b/website/src/pages/compare.astro index 14f98a9c..0c173f6f 100644 --- a/website/src/pages/compare.astro +++ b/website/src/pages/compare.astro @@ -55,9 +55,12 @@ herdr