Beyond swapping out the persona strings, v-doom’s content system is built around simple JavaScript arrays — you can add new project cards, reorder experience entries, append skill ingredients, and change the contact form behaviour without touching any component logic.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.
Adding a Project Card
Projects are stored in a plain array near the top ofassets/main.js. Each element is an object with five fields:
const R = [ array (search for Grimoire.js to find it), then append your object before the closing ]:
ingredients array maps to pill badges on the card face — keep the list to 3–4 items for the best layout.
Adding a Skill Ingredient
Skills are stored inconst y = [ in assets/main.js (search for React Essence to find it). Each entry drives one ingredient button on the Cauldron page and the animated potency bar beneath the cauldron:
| Field | Type | Description |
|---|---|---|
id | string | Unique React key — short, no spaces |
name | string | Displayed on the button and the cauldron label |
color | string | Hex color for the bubble glow, indicator dot, and potency bar |
level | number | 0–100; controls the filled width of the potency bar |
grid-cols-2 md:grid-cols-3 layout, so the grid naturally wraps at six or more items. Any number of entries is supported.
Adding an Experience Entry
Experience entries are stored inconst O = [ in assets/main.js (search for Senior Spellcrafter to find it). Each entry renders as a sealed card on the Pacts page (/experience):
id field is used as the React key and as the seal-broken state identifier. When a user clicks the wax seal, the component checks t.includes(entry.id) to decide whether to show the broken or intact seal state — so id must be a unique integer.
Find the array
Search for
Apprentice Developer in assets/main.js to locate the last entry
in the array.Append your entry
Add a new object after the final
} inside the array, before the closing ].
Set id to the next sequential integer (e.g. 4 if there are currently three
entries).V. Clicking triggers a Framer Motion split animation — the two halves fly off — and the card expands to full height, fading in the role description with a 0.3 s delay.
Modifying the Contact Form
The Summoning page (/contact) renders a circular orb form. The form submit handler in assets/main.js works like this:
setTimeout block with an async call to your chosen service:
The contact orb’s “Message Received” confirmation text and the “The spirits
will deliver it shortly.” subline are hard-coded strings in the JSX. Search
for
Message Received in assets/main.js to locate and update them.Changing Navigation Labels
Nav labels are defined in thenavLinks array inside components/Navigation.js. The array also controls the route each label links to:
label string to rename that nav item. The active-state amber indicator dot and the uppercase tracking-widest styling are applied automatically by the NavLink component — no further changes are needed.
If you also change a path value (e.g. renaming /skills to /stack), update the corresponding React Router <Route path="..."> definition at the bottom of assets/main.js to match, otherwise the route will 404.
The logo in the top-left (
V. DOOM) is rendered separately from the
navLinks array — it’s a NavLink pointing to "/" hardcoded in the
Navigation component. Search for V. DOOM in components/Navigation.js
to update the logo text.