Mystery Haunting’s routing and navigation are both data-driven — routes are registered in a centralDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/mystery-haunting/llms.txt
Use this file to discover all available pages before exploring further.
<Routes> block and nav items come from a plain array in the Layout component — so adding a new page requires only a few coordinated edits across the source before rebuilding.
Create the page component
Add a new React function component in the source. Follow the existing pattern: a full-height flex container with the
font-spooky heading in text-pumpkin and a font-mono subtitle in text-ghost-teal.Register the route in the Router
Inside the
<Routes> block, add a <Route> entry that maps your chosen path to the new component.Add to the navigation array
Locate the
navItems array in the Layout component and append a new object with the matching path and a display label.Create a static HTML export file
Add an HTML file to the
pages/ directory so the route is accessible as a standalone static export. Mirror the structure of the existing page files exactly, updating only the <title> and window.__STATIC_PAGE_ROUTE__ value.The nav link for your new page becomes active — highlighted with the ghost-teal glow — automatically when the current route matches the registered path. No extra styling or active-state logic is needed.
Spooky naming ideas for new pages
Spooky naming ideas for new pages
Give your route a spooky label that fits the existing naming pattern used across the site (The Foyer, The Attic, The Séance Room, etc.). Here are a few ideas mapped to common portfolio sections:
- The Crypt — Certifications and credentials
- The Dungeon — Side projects and experiments
- The Observatory — Blog or writing archive
- The Apothecary — Tools and tech stack
- The Reliquary — Awards and recognitions
/the-crypt) while using title-case labels in the navItems array (The Crypt).Layout Wrapper
Every page registered inside the<Routes> block is automatically wrapped by the <Layout> component. This means your new page inherits the sidebar navigation, global ambient effects (floating particles, background textures), and the Framer Motion AnimatePresence page transition with no additional setup required.