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.
The Valerius Doom identity that ships with v-doom is a fully fleshed-out placeholder designed to show every feature of the template at its best. This guide walks through replacing every piece of it — from the hero name down to individual skill levels — with your own information.
v-doom’s content lives inside the bundled assets/main.js file. The repo
ships as a pre-built static site — there is no src/ directory or original
source files included. All customization is done by editing assets/main.js
directly in the deployed output.
Name & Tagline
The hero section on the home page (/) renders the practitioner name and tagline from two inline strings near the top of assets/main.js.
Search for VALERIUS DOOM to find the <h1> block:
// assets/main.js — hero h1
e.jsxs("h1", {
className: "font-serif text-5xl md:text-7xl lg:text-8xl font-bold tracking-tighter text-bone text-glow",
children: [
e.jsx("span", {
className: "block text-violet text-glow-violet mb-2 text-3xl md:text-5xl italic font-normal",
children: "The workings of" // ← replace this superscript line
}),
"VALERIUS DOOM" // ← replace with your name
]
})
The tagline sits directly beneath it as a <p> element:
// assets/main.js — hero tagline
e.jsx("p", {
className: "font-accent text-2xl md:text-3xl text-amber max-w-2xl mx-auto",
children: "Currently accepting commissions for moderately cursed software."
// ↑ replace with your own one-liner
})
Replace both strings, save the file, and reload — the hero updates immediately.
About / Bio
The /about route (Practitioner in the nav) renders a bio paragraph with a typewriter animation that reveals the text character by character. The full bio string lives as a const near the top of the About component in assets/main.js:
// assets/main.js — bio string
const n = "I am a digital practitioner specializing in the arcane arts of frontend " +
"engineering. I bind chaotic data into structured, beautiful forms. My rituals " +
"involve strict typing, component isolation, and obsessive performance tuning. " +
"I do not write code; I cast intentions into the machine.";
The typewriter works by tracking an index a in React state and slicing the string with n.substring(0, a), incrementing every 20–70 ms (randomised). The blinking amber cursor and the animated feather icon disappear once a === n.length.
To update the bio, replace the entire string value. The typewriter length adjusts automatically — no further changes needed.
Keep your bio under ~280 characters for the best visual result on the About
page. The typewriter animation spans the full height of the card, and very
long bios can push the Affinities / Bane panel off-screen on smaller
viewports.
The Affinities and Bane lists beneath the bio are hard-coded list items that appear once typing finishes. Search for Affinities in the file and replace the four <li> children with your own skills, and the three Bane <li> items with your own pet peeves:
// assets/main.js — Affinities list items
e.jsx("li", { children: "React & Next.js" }),
e.jsx("li", { children: "TypeScript" }),
e.jsx("li", { children: "WebGL / Three.js" }),
e.jsx("li", { children: "Framer Motion" }),
// assets/main.js — Bane list items
e.jsx("li", { children: "Internet Explorer" }),
e.jsx("li", { children: "Un-typed JavaScript" }),
e.jsx("li", { children: "Scope Creep" }),
Navigation Labels
The navigation bar is built from a navLinks array defined in components/Navigation.js. Each entry has a path (the React Router route) and a label (the display text):
// components/Navigation.js — navLinks array
const Tp = [
{ path: "/", label: "The Circle" },
{ path: "/about", label: "Practitioner" },
{ path: "/projects", label: "Spells Cast" },
{ path: "/skills", label: "Cauldron" },
{ path: "/experience", label: "Pacts" },
{ path: "/contact", label: "Summoning" },
];
Replace any label value with whatever nav text suits your theme. The path values correspond to the React Router routes defined at the bottom of assets/main.js — if you rename a path, update it in both places.
Experience
The Pacts page (/experience) renders a vertical timeline from a const array defined just above the Experience component in assets/main.js. Each entry has five fields:
// assets/main.js — experience data array
const O = [
{
id: 1,
role: "Senior Spellcrafter",
company: "Tech Coven Inc.",
period: "2021 - Present",
description: "Lead architect for the main summoning portal. Reduced load times by 40% through aggressive caching rituals and optimised asset delivery.",
},
{
id: 2,
role: "Frontend Alchemist",
company: "Startup Hex",
period: "2018 - 2021",
description: "Transmuted legacy jQuery spaghetti into a pristine React application. Established the company's first design system, 'The Grimoire'.",
},
{
id: 3,
role: "Apprentice Developer",
company: "Digital Guild",
period: "2016 - 2018",
description: "Maintained WordPress monoliths. Learned the dark arts of CSS floats and IE11 compatibility. Survived.",
},
];
Locate the array
Search for Senior Spellcrafter in assets/main.js to jump straight to the data.
Edit existing entries
Replace role, company, period, and description for each object you want to keep.
Add a new entry
Copy one object, paste it at the end of the array, and give it the next sequential id. The wax-seal interaction and timeline line extend automatically.
Remove an entry
Delete the entire object (including its surrounding { } and trailing comma). Re-sequence the remaining id values to avoid gaps — the component uses id as the React key.
Each entry renders as an expandable card hidden behind a red wax seal. Clicking the seal triggers a Framer Motion break-apart animation, then reveals the role card with a paper-texture overlay.
Projects
The Spells Cast page (/projects) renders four tarot-style project cards from an array defined near the top of assets/main.js:
// assets/main.js — projects array
const R = [
{
title: "Grimoire.js",
subtitle: "Documentation Generator",
description: "A tool that parses your chaotic codebase and generates beautiful, readable documentation that looks like ancient manuscripts. Includes automated dependency graphing.",
ingredients: ["React", "AST Parsing", "Tailwind"],
link: "#",
},
{
title: "Soul Catcher",
subtitle: "Analytics Dashboard",
description: "Privacy-first analytics that tracks user intent rather than identity. Visualises traffic as flowing ethereal energy streams across a dark map.",
ingredients: ["Next.js", "D3.js", "PostgreSQL"],
link: "#",
},
{
title: "Alchemist's Forge",
subtitle: "Component Library",
description: "A highly accessible, headless component library for building complex interfaces. Focuses on keyboard navigation and screen reader support.",
ingredients: ["TypeScript", "Radix UI", "Framer Motion"],
link: "#",
},
{
title: "Divination API",
subtitle: "Predictive Search",
description: "A fast, edge-hosted search API that predicts what users are looking for before they finish typing, using lightweight ML models.",
ingredients: ["Rust", "Redis", "Cloudflare Workers"],
link: "#",
},
];
Each object shape:
| Field | Type | Description |
|---|
title | string | Large display name on the card face |
subtitle | string | Category / type shown below the title |
description | string | Revealed on card hover |
ingredients | string[] | Tech-stack tags rendered as pill badges |
link | string | URL for the project link; set to "#" to disable |
Replace "#" in link with a real URL (GitHub repo, live demo, case study, etc.) to make the card link functional.
Skills (Cauldron)
The Cauldron page (/skills) renders interactive ingredient buttons and an animated potency bar. The data array is defined above the Cauldron component in assets/main.js:
// assets/main.js — skills array
const y = [
{ id: "react", name: "React Essence", color: "#61DAFB", level: 90 },
{ id: "ts", name: "TypeScript Root", color: "#3178C6", level: 85 },
{ id: "css", name: "Tailwind Extract", color: "#38B2AC", level: 95 },
{ id: "node", name: "Node.js Spores", color: "#339933", level: 75 },
{ id: "motion", name: "Framer Dust", color: "#FF0055", level: 80 },
];
id — unique key used by React; keep it short and URL-safe.
name — displayed on the ingredient button and in the animated label below the cauldron.
color — hex value applied to the cauldron bubble glow, the ingredient indicator dot background, and the potency bar fill. Use your technology’s brand color for instant recognition.
level — integer from 0 to 100; controls the width of the animated potency bar that fills when you click the ingredient.
v-doom ships as a pre-built static site — there is no included build system
or source pipeline. Edits to assets/main.js are permanent changes to the
deployed output. If you later replace the bundle (for example, by re-copying
the original release files), your manual edits will be overwritten. Keep a
backup of your customized assets/main.js before making changes.