TheDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/a-master-artificer/llms.txt
Use this file to discover all available pages before exploring further.
AstrolabeNav component is the primary navigation control for the A Master Artificer theme. Rather than a traditional top bar or sidebar, it presents itself as a single Compass button fixed to the bottom-right corner of every page. When activated, the button opens an animated astrolabe-style ring that fans all nine portfolio destinations around a full 360ยฐ arc. Each link sits at a fixed radius from the centre, positioned using polar coordinates so the ring feels like a navigational instrument rather than an ordinary menu.
Route Map
The component uses a hardcodedrs array that defines every destination in the portfolio. Each entry carries a path matching the React Router route, a display label shown in a tooltip on hover, and a Unicode icon displayed on the circular button face.
| Icon | Label | Path |
|---|---|---|
| โ | Cover | / |
| ๐ | The Practitioner | /about |
| โง | Conjurings | /projects |
| โ | Athenaeum | /skills |
| ๐ | Past Covens | /work |
| โพ | Field Notes | /case-studies |
| ๐ชถ | Loose Pages | /blog |
| โ | Whispers | /testimonials |
| โ | Send Familiar | /contact |
Route Config Array
The full array as it appears inAstrolabeNav.js:
Visual Behaviour
Toggle Button
Renders as a
w-16 h-16 rounded button anchored at fixed bottom-8 right-8 z-50. Uses the Lucide Compass icon at 32px. When the ring is closed, a border-grimoire-glow animate-ping overlay pulses at 20% opacity to draw attention. When the ring is open, the ping disappears and the compass icon rotates 180ยฐ via a spring transition (duration 0.5s).Outer Ring
A
w-80 h-80 absolute circle centred on the toggle button. The outer border uses animate-spin-slow (clockwise). An inner ring at inset-4 is dashed, rendered with border-dashed border-grimoire-accent/30, and spins in reverse at 30s duration.Ring Entry Animation
The ring container itself is wrapped in Framer MotionAnimatePresence with Up (the AnimatePresence component). Entry and exit use spring physics:
Link Positioning
Each link<div> is positioned at the centre of the ring container and then translated outward to a radius of 120px using the polar-to-Cartesian formula:
{ opacity: 0, x: 0, y: 0 } to its computed { x, y } position with a stagger delay of index * 0.05 seconds.
Active State
When the current browser pathname matches a routeโspath, the link receives these additional CSS classes:
border-grimoire-glow/30 and bg-grimoire-dark.
Hover State
On hover, each circular button transitions toborder-grimoire-glow (full brightness) and hover:box-glow. The icon text gains the text-glow class. The tooltip label (absolute -top-8) fades in with opacity-0 group-hover:opacity-100 and uses font-title text-grimoire-glow tracking-wider text-sm.
Adding or Removing Routes
Edit thers array directly in components/grimoire/AstrolabeNav.js. To add a route, append a new entry object. To remove a route, delete its object from the array.
Every
path value in the rs array must match a route registered in your React Router config (typically assets/main.js). A path that has no matching route will navigate to a 404 or empty page. Always add the corresponding <Route> element before adding a new entry here.CSS Classes Reference
| Class | Applied When | Effect |
|---|---|---|
animate-spin-slow | Always (outer ring) | Slow clockwise spin |
animate-ping | Toggle button, ring closed | Pulsing border glow |
box-glow | Active route / hover | Teal box-shadow glow |
text-glow | Icon on hover | Teal text glow |
bg-grimoire-glow/20 | Active route | 20% opacity teal fill |
border-grimoire-glow | Active route / hover | Full-brightness teal border |
border-grimoire-glow/30 | Default link | 30% opacity teal border |
font-title | Tooltip labels | Grimoire display typeface |