Digital Coven’s navigation is built on React Router v6 withDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/digital-coven/llms.txt
Use this file to discover all available pages before exploring further.
HashRouter as the history strategy — every URL becomes a fragment (/#/about, /#/projects, …) so the static host never needs to handle server-side redirects. An inline bootstrap script in index.html normalises any bare URL to its hash equivalent before the React bundle mounts, ensuring deep links always resolve correctly on a static file host such as GitHub Pages.
Router stack
The root component (yt in main.js) composes three React Router v6 primitives:
In the compiled bundle,
HashRouter is imported as H from components/home/CardsOfFate.js, Routes as R, and Route as a. The router primitives are co-bundled with the home-page components because CardsOfFate.js is the first chunk listed in index.html’s modulepreload sequence.The seven routes
| Path | Page component (minified name) | Page heading |
|---|---|---|
/ | ct — HomePage | Home (SummoningCircle + HeroText + CardsOfFate) |
/about | dt — AboutPage | Origin Story |
/projects | mt — ProjectsPage | Grimoire of Repos |
/skills | ut — SkillsPage | Skill Constellation |
/writing | ft — WritingPage | The Scrolls |
/case-studies | ht — CaseStudiesPage | Project: HexWeaver |
/contact | gt — ContactPage | Summon Me |
Navigation links array
The header navigation is driven by theot array defined in main.js. It intentionally omits the home route — the DC logotype link serves as the home button:
/about, /skills, etc., echoing a Unix filesystem aesthetic.
The AppShell layout wrapper
AppShell (minified as it) is the persistent layout that wraps <Routes>. It renders on every page and is responsible for:
- Fixed header — Positioned
top-0withz-50, usesmix-blend-differenceso theDClogotype inverts whatever content is below it. DClogotype link — A<Link to="/">styled withfont-display(Cinzel Decorative) intext-neon-limewith a drop-shadow glow. Hovering transitions totext-cyan.- Nav links — Maps over
ot, applyingtext-electric-purplewith a purple glow on the active path (detected viauseLocation().pathname), andtext-slate-400otherwise. CustomCursorandBackgroundAtmosphere— Shared visual layers mounted once at the layout level.AnimatePresencewrapping<Routes>— Enables exit animations when routes change.
Hash routing bootstrap script
index.html embeds a small IIFE before the module scripts execute:
https://example.com/digital-coven/about, the server looks for an about file, finds nothing, and returns a 404. By forcing the hash prefix — so the URL becomes https://example.com/digital-coven/#/about — the browser never sends /about to the server; index.html is always served, and React Router interprets the hash fragment.
The guard condition !window.location.hash || window.location.hash === "#" prevents a redirect loop: if a hash is already present (e.g., the user followed a link to /#/projects), the script does nothing.
Page transition: blur + slide
AnimatePresence receives mode="wait", which means React Router’s exiting page fully completes its exit animation before the entering page mounts. The motion.main element is keyed by location.pathname so Framer Motion treats each route change as a distinct component unmount/mount pair.
y: 20 while un-blurring, and leave by sliding further up to y: -20 while blurring out — giving a sense of pages rising through a void.