From f736030f0114387aaabf527dc2de881cd63d2cff Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Sun, 22 Feb 2026 21:42:10 -0600 Subject: [PATCH] feat(web): add custom 404 pages for global and authenticated routes Refs #466 --- .../web/src/app/(authenticated)/not-found.tsx | 160 ++++++++++++++++ apps/web/src/app/not-found.tsx | 175 ++++++++++++++++++ 2 files changed, 335 insertions(+) create mode 100644 apps/web/src/app/(authenticated)/not-found.tsx create mode 100644 apps/web/src/app/not-found.tsx diff --git a/apps/web/src/app/(authenticated)/not-found.tsx b/apps/web/src/app/(authenticated)/not-found.tsx new file mode 100644 index 0000000..b4d41af --- /dev/null +++ b/apps/web/src/app/(authenticated)/not-found.tsx @@ -0,0 +1,160 @@ +import type { ReactElement } from "react"; +import Link from "next/link"; + +export default function AuthenticatedNotFound(): ReactElement { + return ( +
+
+ {/* Compass icon in blue-tinted icon well */} +
+ +
+ + {/* 404 badge pill */} + + 404 + + + {/* Heading + description */} +
+

+ Page not found +

+

+ This page doesn't exist or you may not have permission to view it. +

+
+ + {/* Action buttons */} +
+ {/* Primary: Dashboard */} + + Dashboard + + + {/* Ghost: Settings */} + + Settings + +
+
+
+ ); +} diff --git a/apps/web/src/app/not-found.tsx b/apps/web/src/app/not-found.tsx new file mode 100644 index 0000000..31930ba --- /dev/null +++ b/apps/web/src/app/not-found.tsx @@ -0,0 +1,175 @@ +import type { Metadata } from "next"; +import type { ReactElement } from "react"; +import Link from "next/link"; + +export const metadata: Metadata = { + title: "404 — Page Not Found | Mosaic Stack", +}; + +export default function NotFound(): ReactElement { + return ( +
+ {/* Mosaic logo mark — inline spans replicating the 5-element logo */} +
+ {/* Top-left: blue */} + + {/* Top-right: purple */} + + {/* Bottom-right: teal */} + + {/* Bottom-left: amber */} + + {/* Center: pink circle */} + +
+ + {/* 404 gradient text */} +

+ 404 +

+ + {/* Heading + description */} +
+

+ Page not found +

+

+ The page you're looking for doesn't exist or has been moved. +

+
+ + {/* Dashboard link styled as button */} + + Go to Dashboard + + + {/* Subtle status footer */} +

+ HTTP 404 — Not Found +

+
+ ); +} -- 2.49.1