From d121bd616a6ad1c7f6b5bb2d870d7a73a8deee30 Mon Sep 17 00:00:00 2001
From: Kieron Lanning
Date: Fri, 18 Sep 2026 09:36:10 +0100
Subject: [PATCH 1/4] feat: updated styles and filtering
---
src/astro.config.ts | 15 ++
src/src/components/SiteFooter.astro | 36 ++-
src/src/components/islands/InstallPanel.tsx | 56 +++--
.../components/islands/PackageVersions.tsx | 197 ++++++++++++----
src/src/components/islands/ProjectFilter.tsx | 27 ++-
src/src/components/starlight/Sidebar.astro | 9 +
.../components/starlight/TopicSelect.astro | 67 ++++++
src/src/data/projects.yml | 2 +-
src/src/lib/site.ts | 2 +-
src/src/pages/index.astro | 98 ++++----
src/src/pages/projects/[project].astro | 213 ++++++++----------
src/src/pages/projects/index.astro | 52 ++---
src/src/styles/global.css | 165 ++++++++++++++
13 files changed, 661 insertions(+), 278 deletions(-)
create mode 100644 src/src/components/starlight/Sidebar.astro
create mode 100644 src/src/components/starlight/TopicSelect.astro
diff --git a/src/astro.config.ts b/src/astro.config.ts
index 76ac6eb..9b62644 100644
--- a/src/astro.config.ts
+++ b/src/astro.config.ts
@@ -110,6 +110,20 @@ export default defineConfig({
customCss: ['./src/styles/global.css'],
expressiveCode: {
themes: ['starlight-light', 'starlight-dark'],
+ styleOverrides: {
+ borderRadius: '0.75rem',
+ codeFontFamily: 'var(--font-mono)',
+ uiFontFamily: 'var(--font-sans)',
+ frames: {
+ // Literal hex, not `var(--color-brand)`: Expressive Code parses these
+ // as colors (e.g. for opacity/contrast math), which breaks on CSS
+ // custom properties. #8b3dff is the brand purple in both themes.
+ editorActiveTabIndicatorTopColor: '#8b3dff',
+ editorActiveTabIndicatorBottomColor: '#8b3dff',
+ terminalTitlebarDotsForeground: '#8b3dff',
+ terminalTitlebarDotsOpacity: '0.6',
+ },
+ },
},
components: {
Header: './src/components/starlight/Header.astro',
@@ -117,6 +131,7 @@ export default defineConfig({
EditLink: './src/components/starlight/EditLink.astro',
PageTitle: './src/components/starlight/PageTitle.astro',
Search: './src/components/starlight/Search.astro',
+ Sidebar: './src/components/starlight/Sidebar.astro',
},
plugins: [
starlightSidebarTopics(sidebarTopics),
diff --git a/src/src/components/SiteFooter.astro b/src/src/components/SiteFooter.astro
index d661e88..d6ccbec 100644
--- a/src/src/components/SiteFooter.astro
+++ b/src/src/components/SiteFooter.astro
@@ -1,13 +1,20 @@
---
import SiteBrand from '~/components/SiteBrand.astro';
import { NAV_ITEMS } from '~/components/SiteNav.astro';
+import { loadProjects } from '~/lib/manifest/load';
import { SITE } from '~/lib/site';
import { withBase } from '~/lib/urls';
+
+// Shuffled at build time so the footer doesn't always spotlight the same projects.
+const footerProjects = loadProjects()
+ .filter((project) => project.status !== 'archived')
+ .toSorted(() => Math.random() - 0.5)
+ .slice(0, 3);
---
+
+ v{version}
+
Built with Astro and
)}
+ {row.installAnchor && (
+
+ Install ↓
+
+ )}
{showProjectColumn && (
@@ -265,7 +272,7 @@ export default function PackageVersions({ packages, showProject = true }: Props)
|