From 60e2aed9f9b7a18da5e3038aa9b390c28d7a4f0a Mon Sep 17 00:00:00 2001 From: Mike Karl Date: Mon, 29 Jun 2026 20:46:52 +0200 Subject: [PATCH] 404 page --- src/App.tsx | 9 ++++ src/data/site.ts | 14 +++++ src/pages/NotFoundPage.tsx | 104 +++++++++++++++++++++++++++++++++++++ 3 files changed, 127 insertions(+) create mode 100644 src/pages/NotFoundPage.tsx diff --git a/src/App.tsx b/src/App.tsx index d753e06..b4747ad 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -10,6 +10,7 @@ import ContactPage from "./pages/ContactPage"; import RaycasterPage from "./pages/project/RaycasterPage"; import RaytracerPage from "./pages/project/RaytracerPage"; import EmulatorPage from "./pages/project/EmulatorPage"; +import NotFoundPage from "./pages/NotFoundPage"; export default function App() { return ( @@ -86,6 +87,14 @@ export default function App() { )} /> + ( + + + + )} + /> ); } diff --git a/src/data/site.ts b/src/data/site.ts index b74c0d5..84c079c 100644 --- a/src/data/site.ts +++ b/src/data/site.ts @@ -32,6 +32,20 @@ export const homeMetadata = { "Mike Karl — Systementwickler & Creative Technologist aus Grafenau. Portfolio mit Projekten aus Systems Programming, Computer Graphics und Low-Level-Entwicklung.", }; +export const notFoundPage = { + metadata: { + title: "404 — Seite nicht gefunden", + description: "Die angeforderte Seite existiert nicht.", + }, + label: "404 — Seite nicht gefunden", + title: "404", + subtitle: "Die angeforderte Route existiert nicht oder wurde verschoben.", + terminalPrompt: "$ navigate", + terminalError: "ENOENT — route not found", + homeCta: "Zur Startseite", + browseLabel: "Oder schau dich um:", +}; + export const heroContent = { subtitle: [ "Full-Stack Entwickler", diff --git a/src/pages/NotFoundPage.tsx b/src/pages/NotFoundPage.tsx new file mode 100644 index 0000000..5b7d4c6 --- /dev/null +++ b/src/pages/NotFoundPage.tsx @@ -0,0 +1,104 @@ +import { A, useLocation } from "@solidjs/router"; +import { For } from "solid-js"; +import { ArrowRight, Home } from "lucide-solid"; +import { usePageMeta } from "@/lib/meta"; +import { navLinks, notFoundPage } from "@/data/site"; + +export default function NotFoundPage() { + const location = useLocation(); + + usePageMeta( + notFoundPage.metadata.title, + notFoundPage.metadata.description + ); + + return ( +
+
+
+ +
+
+ + +

+ {notFoundPage.title} +

+ +
+
+

+ Not Found +

+
+
+ +

+ {notFoundPage.subtitle} +

+ +
+

+ {notFoundPage.terminalPrompt}{" "} + {location.pathname} +

+

+ Error + {": "} + ENOENT + — + {notFoundPage.terminalError} +

+
+ + + +
+

+ {notFoundPage.browseLabel} +

+
+ + {(link) => ( + + {link.label} + + + )} + +
+
+
+
+
+ ); +}