Nightshade ships as a standard Vite project, so the path from zero to a running local preview is exactly what you would expect from any modern React app: clone, install, and run. The sections below walk through each step, explain the production build, and cover what you need to know before pushing to GitHub Pages.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/nightshade/llms.txt
Use this file to discover all available pages before exploring further.
Prerequisites
Before you begin, make sure the following are available on your machine:- Node.js 18 or later — Vite and the project’s dependencies require Node 18+. Run
node -vto check your current version. - npm (bundled with Node) or a compatible package manager such as pnpm or yarn.
Installation
Clone the repository
Clone the Nightshade repository from GitHub and change into the project directory:
Install dependencies
Install all required packages using npm:This resolves React 18, Vite, React Router v6, Framer Motion, Tailwind CSS, and their transitive dependencies into
node_modules/.Start the development server
Launch the Vite dev server with hot module replacement:The terminal will confirm the server is running at http://localhost:5173. Open that URL in your browser to see the Sanctum (home) page with the full animated experience — candle navigation, familiar cursor, and smoke layers — all active.
Project Structure
The repository is organised around the compiled output rather than raw source files, since theassets/ directory contains the Vite-generated bundles:
assets/ holds the four Vite output files. main.js contains every route component and page — the Sanctum, About, Skills, Work, Projects, Case Studies, Blog, Testimonials, and Contact pages — all bundled together. main.css contains the compiled Tailwind stylesheet plus the custom witch-palette utilities and @keyframes animation definitions.
components/ is preloaded by index.html as ES module chunks: Layout.js, Navigation.js, Candle.js, FamiliarCursor.js, SmokeLayer.js, and Sigils.js. These are loaded in parallel via <link rel="modulepreload"> to eliminate waterfall latency.
pages/ contains one HTML file per route (About.html, Blog.html, Contact.html, etc.). Each file sets window.__STATIC_PAGE_ROUTE__ and redirects the hash so navigating directly to /pages/About.html lands on the correct route inside the SPA.
Deploying to GitHub Pages
Nightshade is designed for zero-configuration deployment to GitHub Pages:- Run
npm run buildto produce thedist/directory. - Push the contents of
dist/to thegh-pagesbranch of your repository. Tools likegh-pagesnpm package or a GitHub Actions workflow can automate this step. - In your repository’s Settings → Pages, set the source to the
gh-pagesbranch.
- Hash-redirect scripts — Each HTML file in
pages/includes an inline script that setswindow.location.hashto the correct route path. This means a user navigating directly toyoursite.github.io/pages/Blog.htmlwill land on/#/bloginside the running SPA without a 404. .nojekyllfile — The root-level.nojekyllfile tells GitHub Pages to serve files as-is. Without it, GitHub’s Jekyll processor would ignore files and directories whose names begin with an underscore, potentially breaking asset references.