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.

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" }),

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.",
  },
];
1

Locate the array

Search for Senior Spellcrafter in assets/main.js to jump straight to the data.
2

Edit existing entries

Replace role, company, period, and description for each object you want to keep.
3

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.
4

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:
FieldTypeDescription
titlestringLarge display name on the card face
subtitlestringCategory / type shown below the title
descriptionstringRevealed on card hover
ingredientsstring[]Tech-stack tags rendered as pill badges
linkstringURL 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.

Build docs developers (and LLMs) love