The Craft is a statically deployed React single-page application built with Vite as its bundler, React Router v6 for client-side navigation, and Framer Motion for page transitions and animations. Everything lives in two top-level directories —Documentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/the-craft/llms.txt
Use this file to discover all available pages before exploring further.
assets/ for page-level components and entry code, and components/ for shared UI pieces — making the project intentionally flat and easy to navigate. There is no backend, no build pipeline beyond Vite, and no external data fetching: all content is co-located as static JavaScript arrays inside each page file.
Directory Layout
How It All Connects
assets/main.js is the application’s true entry point. It creates the BrowserRouter, defines all route mappings, lazily imports every page component, and mounts the React tree onto the #root DOM node in index.html. All page routes are nested under a single parent <Route path="/" element={<Layout />}>, which means every page is automatically wrapped in the shared shell.
components/Layout.js is that shell. It renders three things in sequence: the CursorTrail canvas effect (which floats above the page at z-index: 9999), the MoonPhaseNav sidebar, and the React Router <Outlet /> inside a <main> element. The <Outlet /> is where the currently matched page component appears. Two ambient glow blobs are also rendered as fixed, pointer-events-none decorations behind the content.
The
MoonPhaseNav sidebar uses position: fixed and occupies the left 6rem of the viewport on desktop. Page components are offset with md:pl-24 to avoid being hidden beneath it.Data Flow
The Craft has no API layer and no database. All page data — including the projects array, work history timeline entries, testimonials, blog posts, and skills list — is declared as plain JavaScript arrays or objects at the top of each respective page file. If you want to update content, you edit the source array directly in the relevant file inassets/.
Build Output
Vite processesindex.html as its entry point, resolves all import statements, applies Tailwind’s JIT purge pass on main.css, and emits a static bundle into dist/. The output is pure HTML, JS, and CSS — no server runtime required. The dist/ folder is what gets published to GitHub Pages.
Because The Craft uses the HTML5 History API for routing (via React Router’s
BrowserRouter), GitHub Pages requires a 404.html redirect trick or a custom domain with proper SPA routing support. Without it, hard-refreshing on any route other than / will return a 404 from GitHub’s servers.