From 7e501c399b5d94645b5a8c70af8f5fd5bbc55f0e Mon Sep 17 00:00:00 2001
From: itsfinniii <102350242+itsfinniii@users.noreply.github.com>
Date: Sat, 28 Mar 2026 16:40:54 +0100
Subject: [PATCH] Add the Project and Blog index pages (no pagination just yet)
---
astro/src/components/blogs/BlogIndex.astro | 45 ++++++++++-
.../components/projects/ProjectIndex.astro | 45 ++++++++++-
astro/src/content/blogs/blogs.ts | 74 +++++++++++++++++++
astro/src/content/projects/projects.ts | 72 ++++++++++++++++++
.../graphql/blogs/getPaginatedBlogs.graphql | 39 ++++++++++
.../projects/getPaginatedProjects.graphql | 39 ++++++++++
astro/src/pages/[...route].astro | 4 +-
7 files changed, 315 insertions(+), 3 deletions(-)
create mode 100644 astro/src/graphql/blogs/getPaginatedBlogs.graphql
create mode 100644 astro/src/graphql/projects/getPaginatedProjects.graphql
diff --git a/astro/src/components/blogs/BlogIndex.astro b/astro/src/components/blogs/BlogIndex.astro
index 4c4ad3f..cfa5182 100644
--- a/astro/src/components/blogs/BlogIndex.astro
+++ b/astro/src/components/blogs/BlogIndex.astro
@@ -1,9 +1,52 @@
---
+import { getAllPaginatedBlogs } from '@/content/blogs/blogs';
+import { getSettings } from '@/content/settings/settings';
+import CalendarIcon from '@/icons/CalendarIcon.astro';
+import { getImageUrl } from '@/lib/images';
+import { markdownToHtml } from '@/lib/markdown';
+import { getBlogRoute } from '@/lib/routing';
+import { Image } from 'astro:assets';
+
interface Props {
page: BlogIndex;
}
const { page } = Astro.props;
+const { pageNumber } = page;
+
+const settings = await getSettings();
+const blogs = await getAllPaginatedBlogs(settings, pageNumber);
---
-
+
+
{ settings.blog.title }
+ { settings.blog.subtext !== null && (
+
+ ) }
+
+
+
+ { blogs.map((blog) => (
+
+
+
+
+ )) }
+
+
diff --git a/astro/src/components/projects/ProjectIndex.astro b/astro/src/components/projects/ProjectIndex.astro
index 34dcd2c..95de3b1 100644
--- a/astro/src/components/projects/ProjectIndex.astro
+++ b/astro/src/components/projects/ProjectIndex.astro
@@ -1,9 +1,52 @@
---
+import { getSettings } from '@/content/settings/settings';
+import { getAllPaginatedProjects } from '@/content/projects/projects';
+import { markdownToHtml } from '@/lib/markdown';
+import { Image } from 'astro:assets';
+import { getProjectRoute } from '@/lib/routing';
+import CalendarIcon from '@/icons/CalendarIcon.astro';
+import { getImageUrl } from '@/lib/images';
+
interface Props {
page: ProjectIndex;
}
const { page } = Astro.props;
+const { pageNumber } = page;
+
+const settings = await getSettings();
+const projects = await getAllPaginatedProjects(settings, pageNumber);
---
-
+
+
{ settings.project.title }
+ { settings.project.subtext !== null && (
+
+ ) }
+
+
+
+ { projects.map((project) => (
+
+
+
+
+ )) }
+
+
diff --git a/astro/src/content/blogs/blogs.ts b/astro/src/content/blogs/blogs.ts
index 6f83001..ae7e7d8 100644
--- a/astro/src/content/blogs/blogs.ts
+++ b/astro/src/content/blogs/blogs.ts
@@ -3,6 +3,7 @@ import { print } from 'graphql';
import getBlogs from '@/graphql/blogs/getBlogs.graphql';
import getBlogPost from '@/graphql/blogs/getBlog.graphql';
import getLastBlogPosts from '@/graphql/blogs/getLastBlogPosts.graphql';
+import getPaginatedBlogs from '@/graphql/blogs/getPaginatedBlogs.graphql';
import { formatDate } from "@/lib/dates";
export async function getAllBlogs(settings: GlobalSettings): Promise