Spooky Developer is a single-file React SPA — almost all page components, data arrays, and routing live together inDocumentation 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.
assets/main.js, which makes the project very approachable to extend. Whether you want to add a Services page, wire up a new scare effect, or swap the Halloween palette for something more cyberpunk, the changes are localised and follow consistent patterns throughout the codebase.
All personal content — timeline entries, projects, skills, work history, testimonials, article titles, and case studies — lives as constant arrays at the top of
assets/main.js. Updating what visitors see means editing those arrays directly; there is no CMS or external data layer.Adding a New Page
Create the page component
Define a new React component in
assets/main.js (or in its own file if you prefer to keep things tidy). Follow the same structural conventions used by existing pages — a wrapping <div> with py-12 and a centred <h1> in text-haunt-moon.Add a Route inside the App component
The All routes are children of the root
App function in main.js renders a <Routes> block nested inside <Layout>. Add your new <Route> alongside the existing ones:path="/" route that mounts <Layout>, so your page automatically inherits the sticky header, footer, background, and all three scare components.Adding a New Scare Effect
All three existing scare effects (CursorTrail, SpiderScare, IdleGhost) share the same four-step pattern. Follow it to keep your new effect consistent and respecting isHaunted:
- Import
useHauntand gate everything behindisHaunted - Set up your trigger (a timer, a DOM event, a scroll listener, etc.)
- Animate entry and exit with
AnimatePresence+m.div - Mount the component once inside
Layout.js
Layout.js alongside the existing scares:
Keep
pointer-events-none on all scare overlays so they never block clicks on the underlying page content. Use high z-index values (e.g. z-[9999]) consistently with the existing scares to avoid stacking-order surprises.Customizing the Color Scheme
Spooky Developer’s Halloween palette is expressed through Tailwind utility classes (text-haunt-moon, bg-haunt-pumpkin, border-haunt-tombstoneDark, etc.) and a small set of base styles on body. Changing the overall mood is a two-step process:
Update the base body styles
Open
assets/main.css and override the background and default text colours:Remap the Tailwind theme tokens (source builds only)
In
tailwind.config.js, update the haunt-* colour values under theme.extend.colors to match your new palette. Every class that references a haunt-* token will update across the entire app automatically after a rebuild.Note: The deployed site is a pre-built Vite output — there is notailwind.config.jsin the distributed files. This step applies when building from the original source project. In the compiled output, token values are baked intoassets/main.cssand require a full source rebuild to change.
Changing the IdleGhost Timer
The ghost that slides in from the right edge of the screen waits for 45 seconds of user inactivity before appearing. To shorten or lengthen this delay, edit thesetTimeout call in IdleGhost.js:
mousemove, keydown, click, scroll) always reset this timer back to zero, so the ghost will only appear during genuine idle periods regardless of the threshold you choose.