Skip to main content

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.

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.

How Static Routing Works

React applications normally rely on a server to rewrite all URLs back to index.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.
PageHash route
Home/#/
About/#/about
Projects/#/projects
Skills/#/skills
Experience/#/experience
Contact/#/contact
Because the # 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 under pages/ 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
<script>
  window.__STATIC_PAGE_ROUTE__ = "/about";
  if (!window.location.hash || window.location.hash === "#/" || window.location.hash === "#") {
    window.location.hash = "/about";
  }
</script>
This pattern means bookmarking or sharing a direct link to /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:
v-doom/
└── .nojekyll   ← empty file, but critical
If you delete or omit .nojekyll, assets whose names start with _ will return 404s and the site will fail to load. Always keep this file in the repo root.

Build Output Structure

The full set of deployable files already present in the repository:
v-doom/
├── .nojekyll
├── index.html
├── pages/
│   ├── About.html
│   ├── Contact.html
│   ├── Experience.html
│   ├── Projects.html
│   └── Skills.html
├── assets/
│   ├── main.js
│   ├── main.css
│   └── proxy.js
└── components/
    ├── Candle.js
    ├── Cursor.js
    ├── Layout.js
    ├── Navigation.js
    ├── ParticleBackground.js
    ├── RuneCircle.js
    └── TarotCard.js
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:
npx serve .
Then open 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 in assets/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:
# Find the name placeholder
grep -n "VALERIUS DOOM" assets/main.js

# Replace inline (macOS sed)
sed -i '' 's/VALERIUS DOOM/YOUR NAME/g' assets/main.js

# Replace inline (GNU sed / Linux)
sed -i 's/VALERIUS DOOM/YOUR NAME/g' assets/main.js
You can apply the same pattern to any other text content surfaced in the minified bundle — bio copy, skill labels, project titles, and social links are all readable strings inside main.js.
The pre-built output means zero build time for deployment. Fork the repo, swap out your content strings, and push — your portfolio is live in under five minutes without a Node.js environment or CI/CD pipeline.
Edits made directly to assets/main.js modify the compiled bundle, not a source project. The repository contains only build output — there is no package.json, no Vite config, and no npm run build command. Document every manual edit clearly in your commit messages so you can trace what changed if you need to revisit or diff your customizations later.

Build docs developers (and LLMs) love