diff --git a/apps/web/app/error.tsx b/apps/web/app/error.tsx
new file mode 100644
index 0000000..b7fd949
--- /dev/null
+++ b/apps/web/app/error.tsx
@@ -0,0 +1,67 @@
+"use client";
+
+import { useEffect } from "react";
+import * as Sentry from "@sentry/nextjs";
+import { Button } from "../src/components/Button";
+
+export default function Error({
+ error,
+ reset,
+}: {
+ error: Error & { digest?: string };
+ reset: () => void;
+}) {
+ useEffect(() => {
+ // Log the error to Sentry/GlitchTip
+ Sentry.captureException(error);
+ console.error("Caught in error.tsx:", error);
+ }, [error]);
+
+ return (
+
+
+
+ Error 500
+
+
+ Kritischer Fehler.
+
+
+ Ein unerwartetes Problem ist aufgetreten. Unsere Systeme haben den
+ Vorfall protokolliert.
+
+
+
+
+
+
+
+
+
+
+ STATUS
+
+
+ FAIL
+
+
+
+ TRACKING
+ GLITCHTIP_LOGGED
+
+ {error.digest && (
+
+ DIGEST
+ {error.digest}
+
+ )}
+
+
+
+
+ );
+}
diff --git a/apps/web/app/global-error.tsx b/apps/web/app/global-error.tsx
new file mode 100644
index 0000000..9d9344a
--- /dev/null
+++ b/apps/web/app/global-error.tsx
@@ -0,0 +1,59 @@
+"use client";
+
+import * as Sentry from "@sentry/nextjs";
+import Error from "next/error";
+import { useEffect } from "react";
+import { Inter, Newsreader } from "next/font/google";
+import "./globals.css";
+
+const inter = Inter({ subsets: ["latin"], variable: "--font-inter" });
+const newsreader = Newsreader({
+ subsets: ["latin"],
+ variable: "--font-newsreader",
+ style: "italic",
+ display: "swap",
+});
+
+export default function GlobalError({
+ error,
+ reset,
+}: {
+ error: Error & { digest?: string };
+ reset: () => void;
+}) {
+ useEffect(() => {
+ Sentry.captureException(error);
+ }, [error]);
+
+ return (
+
+
+
+
+
+ Root Level Error
+
+
+ Systemausfall der Hauptebene.
+
+
+ Ein kritischer Fehler auf der Root-Layout Ebene hat das Rendering
+ blockiert. Der Vorfall wurde zur Untersuchung protokolliert.
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/apps/web/app/not-found.tsx b/apps/web/app/not-found.tsx
new file mode 100644
index 0000000..ce9d53a
--- /dev/null
+++ b/apps/web/app/not-found.tsx
@@ -0,0 +1,52 @@
+export const metadata = {
+ title: "404 - Seite nicht gefunden | Marc Mintel",
+ description: "Diese Seite konnte leider nicht gefunden werden.",
+};
+
+import Link from "next/link";
+import { Button } from "../src/components/Button";
+
+export default function NotFound() {
+ return (
+
+
+
+ Error 404
+
+
+ System-Anomalie.
+
+
+ Die angeforderte URL existiert nicht in dieser Zeitleiste.
+ Möglicherweise wurde die Seite verschoben oder gelöscht.
+
+
+
+
+
+
+
+
+
+
+ STATUS
+ 404 NOT_FOUND
+
+
+ ACTION
+ REROUTE_SUGGESTED
+
+
+ SYSTEM
+ ONLINE
+
+
+
+
+
+ );
+}