v-doom is architected as a fully static site — the repository itself is the build output. Every HTML file, every JavaScript chunk, and every stylesheet has already been compiled and committed alongside the source. This means you can fork the repo, push it to a static host, and have a live portfolio without touching a build tool, configuring CI/CD, or installing any dependencies.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/v-doom/llms.txt
Use this file to discover all available pages before exploring further.
How Static Routing Works
React applications normally rely on a server to rewrite all URLs back toindex.html. Static hosts like GitHub Pages don’t do that — they serve files exactly as they exist on disk. v-doom solves this with hash routing: every route is encoded in the fragment portion of the URL (the part after #), so the browser never makes a new request when navigating.
| Page | Hash route |
|---|---|
| Home | /#/ |
| About | /#/about |
| Projects | /#/projects |
| Skills | /#/skills |
| Experience | /#/experience |
| Contact | /#/contact |
# portion is never sent to the server, GitHub Pages always serves index.html and React Router handles the rest entirely in the browser.
Per-route HTML files
Each page underpages/ is a self-contained HTML file that bootstraps the correct route when visited directly (e.g. /pages/About.html). A small inline script sets window.__STATIC_PAGE_ROUTE__ and forces the hash to the right value before React mounts:
pages/About.html
/pages/About.html still lands visitors on the About section — the app hydrates and the hash takes over from there.
The .nojekyll File
GitHub Pages runs every site through Jekyll by default before serving it. Jekyll ignores files and folders whose names begin with an underscore (_), which would silently break any Vite chunk that follows that naming convention. It can also interfere with non-standard asset paths.
The empty .nojekyll file in the repo root tells GitHub Pages to skip Jekyll processing entirely and serve the files as-is:
Build Output Structure
The full set of deployable files already present in the repository:assets/proxy.js re-exports Framer Motion as a separate chunk to avoid circular dependency issues in the split bundle — it is loaded automatically via <link rel="modulepreload"> in each HTML file and does not need to be touched.
Serving Locally
You can preview the built site on your machine without any build step. From the repo root, use any static file server:http://localhost:3000 (serve) or http://localhost:8080 (Python) in your browser.
The custom occult cursor relies on
pointer-events CSS and a mousemove listener. It will not work over file:// protocol — always preview through a local HTTP server.Customizing Before Deploy
Because the repository contains the compiled output, straightforward content changes — your name, bio, job titles, project descriptions — can be made directly inassets/main.js using a find-and-replace without re-running a Vite build.
Search for the persona placeholder strings and replace them with your own content:
main.js.