The Home page is the first thing visitors see when they land on the portfolio. It sets the entire spooky tone with a large animated heading, a wry developer tagline, and a hand-crafted 3D scene built entirely from Tailwind utility classes and Framer Motion — no canvas, no images. The scene features a tombstone office building flanked by flickering pumpkin candles, a grinning pumpkin whose eyes silently track your cursor, and a row of tiny tombstone silhouettes lining the ground.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.
What It Displays
| Element | Description |
|---|---|
| Animated heading | "Spooky Dev" in the haunt-moon teal color with a continuous oscillating rotation |
| Tagline | "I write code that doesn't haunt your codebase. Usually." |
| Tombstone building | Dark rectangular building with a triangular roof clip and two vertical candle flames |
| Pumpkin face | Orange rounded element with two eye sockets whose pupils follow the mouse cursor |
| Ground silhouettes | A row of 12 small tombstone shapes at 5 % random rotation offsets for a hand-planted look |
Animated Hero Title
The"Spooky Dev" heading is wrapped in a Framer Motion <motion.span> with a looping rotation animation:
Cursor-Tracking Pumpkin Eyes
The pumpkin’s pupils move to follow the visitor’s mouse pointer. The mechanic uses themousePos value from the global useHaunt() hook and runs inside a useEffect that re-fires whenever mousePos changes.
transform on each pupil <div>:
- Max offset — pupils travel at most 4 px from center (
Math.min(4, …)). - Distance scaling — raw pixel distance is divided by 10 before clamping, so the pupils start moving from very small cursor displacements.
- Both eyes share the same offset state — they move in perfect sync.
The pumpkin eyes rely on
mousePos from useHaunt(). When Haunt Mode is disabled, mousePos stops updating and the pupils freeze in their last position. This is expected behavior — toggling Haunt Mode back on immediately restores tracking.The 3D Scene
The scene is a single relative-positioned<div> (max-w-3xl h-64) with border-b-4 border-haunt-dark forming the ground line. All child elements use absolute positioning within it.
Tombstone Building
Ground Silhouettes
Twelve small tombstone shapes are generated withArray.from({ length: 12 }). Each is given a random slight tilt between −5° and +5° for a natural look:
Customization Tips
Changing the Tagline
Openassets/main.js and locate the <p> element inside the hero <motion.div>:
Adjusting the Tombstone Color
The building and ground silhouettes use thehaunt-tombstone and haunt-tombstoneDark tokens defined in tailwind.config.js. Change the hex values there to update every tombstone-colored element across the whole portfolio at once:
Modifying the Candle Count
The two candle<div> elements inside the flex row are hard-coded. To add a third candle, duplicate one of the existing candle <div> nodes and optionally set a different animationDelay so they don’t all flicker in unison:
Changing the Oscillation Speed
Adjust theduration value on the heading’s Framer Motion transition. A smaller value makes the title rock faster; a larger value makes it sway slowly and lazily: