From cbfdb92be4d09449ced70299e06af31f9feb1fff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Kr=C3=BCger?= Date: Tue, 18 Aug 2026 08:32:18 +0200 Subject: [PATCH] feat: add themed 404 page Flatlined pulse trace mirrors the PulseNode brand mark - a route that isn't monitored here reads as "no pulse" rather than a generic error page. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01WpxhtQY3CExQdMs4j7MmJe --- app/globals.css | 14 ++++++++++++ app/not-found.tsx | 55 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 app/not-found.tsx diff --git a/app/globals.css b/app/globals.css index 4f141da..e9bb0dd 100644 --- a/app/globals.css +++ b/app/globals.css @@ -133,8 +133,22 @@ body { animation: pulse-glow 2s ease-in-out infinite; } +@keyframes pulse-glow-down { + 0%, + 100% { + box-shadow: 0 0 0 0 color-mix(in srgb, var(--pn-status-down) 55%, transparent); + } + 50% { + box-shadow: 0 0 0 4px color-mix(in srgb, var(--pn-status-down) 0%, transparent); + } +} +.status-pulse-down { + animation: pulse-glow-down 2s ease-in-out infinite; +} + @media (prefers-reduced-motion: reduce) { .status-pulse, + .status-pulse-down, .pn-toast, .pn-spin-in { animation: none; diff --git a/app/not-found.tsx b/app/not-found.tsx new file mode 100644 index 0000000..5095170 --- /dev/null +++ b/app/not-found.tsx @@ -0,0 +1,55 @@ +import Link from "next/link"; +import type { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Not Found", + description: "No pulse on this route.", +}; + +export default function NotFound() { + return ( +
+ + +
+

404

+

No pulse on this route.

+

Nothing here is being monitored.

+
+ + + Back to dashboard + +
+ ); +}