From 4bb3fa367180b8d65630886183e446b7df5981f1 Mon Sep 17 00:00:00 2001
From: itsfinniii <102350242+itsfinniii@users.noreply.github.com>
Date: Fri, 20 Mar 2026 16:40:21 +0100
Subject: [PATCH] Add page types, index components, and layout
---
astro/src/components/blogs/BlogIndex.astro | 9 +
.../components/projects/ProjectIndex.astro | 9 +
astro/src/content/pages/pages.ts | 23 ++-
astro/src/layouts/WebpageLayout.astro | 27 +--
astro/src/lib/pages.ts | 27 ++-
astro/src/pages/[...route].astro | 158 +++++++++++++++++-
astro/src/types/layouts/webpageLayout.d.ts | 3 +
astro/src/types/pages/page.d.ts | 44 ++---
8 files changed, 258 insertions(+), 42 deletions(-)
create mode 100644 astro/src/components/blogs/BlogIndex.astro
create mode 100644 astro/src/components/projects/ProjectIndex.astro
create mode 100644 astro/src/types/layouts/webpageLayout.d.ts
diff --git a/astro/src/components/blogs/BlogIndex.astro b/astro/src/components/blogs/BlogIndex.astro
new file mode 100644
index 0000000..4c4ad3f
--- /dev/null
+++ b/astro/src/components/blogs/BlogIndex.astro
@@ -0,0 +1,9 @@
+---
+interface Props {
+ page: BlogIndex;
+}
+
+const { page } = Astro.props;
+---
+
+
Blog Index
diff --git a/astro/src/components/projects/ProjectIndex.astro b/astro/src/components/projects/ProjectIndex.astro
new file mode 100644
index 0000000..34dcd2c
--- /dev/null
+++ b/astro/src/components/projects/ProjectIndex.astro
@@ -0,0 +1,9 @@
+---
+interface Props {
+ page: ProjectIndex;
+}
+
+const { page } = Astro.props;
+---
+
+Project Index
diff --git a/astro/src/content/pages/pages.ts b/astro/src/content/pages/pages.ts
index f35ab48..f8d0c05 100644
--- a/astro/src/content/pages/pages.ts
+++ b/astro/src/content/pages/pages.ts
@@ -287,6 +287,7 @@ export function dataToPage(pageRecord: any): WebPage {
let page: WebPage = {
type: "Webpage",
+ exists: true,
id: pageRecord["id"],
lastModified: lastModified,
url: pageRecord["url"],
@@ -330,5 +331,25 @@ export async function getWebpage(route: string): Promise {
route: route
});
- return dataToPage(result["Pages"][0]);
+ if (result["Pages"].length === 0) {
+ return {
+ type: "Webpage",
+ exists: false
+ };
+ }
+
+ const page = dataToPage(result["Pages"][0]);
+
+ if (!page.exists) {
+ return {
+ type: "Webpage",
+ exists: false
+ };
+ }
+
+ return {
+ ...page,
+ type: "Webpage",
+ exists: true
+ }
}
diff --git a/astro/src/layouts/WebpageLayout.astro b/astro/src/layouts/WebpageLayout.astro
index 80a680f..127c269 100644
--- a/astro/src/layouts/WebpageLayout.astro
+++ b/astro/src/layouts/WebpageLayout.astro
@@ -2,6 +2,11 @@
import '@/styles/global.css';
import { getSettings } from "@/content/settings/settings";
+interface Props {
+ settings: WebpageLayoutProps;
+}
+
+const pageSettings = Astro.props.settings.searchEngine;
const settings = await getSettings();
---
@@ -9,45 +14,43 @@ const settings = await getSettings();
-
+
- {settings.website.titleTemplate.replaceAll("%T", "")}
+ {settings.website.titleTemplate.replaceAll("%T", pageSettings.title)}
-
+
-
+
-
-
-
+
+
-
-
-
+
+
-
+
@@ -59,6 +62,6 @@ const settings = await getSettings();
-
+