Sorcerer handles all navigation entirely in the browser using React Router v6. When a visitor clicks a link or types a URL directly, React Router intercepts the navigation, reads the path, and swaps the rendered page component without ever making a new HTTP request for an HTML document. This means transitions are instantaneous and Framer Motion’s exit and entrance animations play smoothly between pages. The router is initialised once at the application root, wrapped around the sharedDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/sorcerer/llms.txt
Use this file to discover all available pages before exploring further.
Layout component so that chrome elements like the navigation bar and cursor trail remain mounted and stable throughout every route change.
Route Table
| Path | Component | Description |
|---|---|---|
/ | HomePage | Animated hero landing |
/about | AboutPage | Personal bio and philosophy |
/projects | ProjectsPage | Portfolio project cards |
/skills | SkillsPage | Skill constellation graph |
/work | WorkHistoryPage | Career timeline |
/case-studies | CaseStudiesPage | Deep-dive technical case studies |
/blog | BlogPage | Blog post cards |
/testimonials | TestimonialsPage | Testimonial carousel |
/contact | ContactPage | Contact form |
Router Setup
The router is declared at the application root.BrowserRouter provides the routing context, Layout renders the persistent chrome, and the Routes block contains all nine Route declarations. React Router v6 matches routes exclusively by default, so only the first matching Route renders its element.
Navigation
MoonPhaseNav is the primary navigation component rendered by Layout. It uses React Router’s built-in navigation primitives — either <Link> elements or the useNavigate hook — to trigger client-side route transitions. Because these are React Router navigations rather than native anchor tags pointing to separate HTML files, the browser never performs a full page reload. The current Layout stays mounted, CursorTrail and MoonPhaseNav remain visible and interactive, and only the content inside the <main> region is swapped out as Framer Motion plays the outgoing page’s exit animation and the incoming page’s entrance animation.
Adding a New Route
Create a new page component
Write a new React component — for example,
GalleryPage — with its own layout, data arrays, and Framer Motion animations. Because all page data lives as const arrays in the source, define your content at the top of the file alongside the component.Add a Route entry in the Routes block
Import your new component and add a
<Route> entry inside the <Routes> block in the application root, choosing a URL path that follows the existing lowercase, hyphenated convention: