Spooky Developer uses React Router v6 (Documentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/spooky-developer/llms.txt
Use this file to discover all available pages before exploring further.
react-router-dom) for all client-side navigation. There are ten registered routes — nine visible pages and a wildcard 404 catch-all — all rendered inside a shared Layout parent. The navigation bar is driven by a LINKS array that mirrors these routes, minus the catch-all.
Provider Nesting
The component tree at the application root is:HauntProvider sits outside BrowserRouter so that scare components and page components can both read context without restriction. BrowserRouter uses the HTML5 History API — URLs are clean paths like /about, not hash-based like /#/about.
Route Table
All routes are defined as children of the root"/" route whose element is <Layout />. React Router renders Layout for every URL and fills its <Outlet /> with the matching child route component.
"/" child uses the index prop (i.e., no path) so it matches exactly when the URL is /.
The Layout Outlet
Layout.js is the parent route element. It renders the full page shell and uses React Router’s <Outlet /> to inject the active page component:
<Outlet /> content; the Nav, Background, Footer, and scare components remain mounted.
The Nav LINKS Array
TheNav component drives its tombstone buttons from a static LINKS array (internally Tp in the compiled output). It contains the nine user-facing routes — the wildcard "*" is intentionally excluded:
<NavLink> styled as a tombstone. React Router’s NavLink receives an isActive boolean via its className callback, which is used to apply the raised / glowing active state (-translate-y-4, border-haunt-moon/50 text-haunt-moon).
Adding a New Route
React Router v6 resolves child route
path values relative to the parent. Because the parent route is "/", child paths like "about" and "blog" resolve to /about and /blog respectively — no leading slash is needed on child routes.