The Projects page presents the developer’s portfolio work as a graveyard of tombstones. Each project gets its ownDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/dev-haunt/llms.txt
Use this file to discover all available pages before exploring further.
Tombstone card that rises up from the ground with a staggered Framer Motion entrance. Projects that are actively maintained stand tall with full colour and live links; archived or abandoned projects are rendered with muted styling and a “RIP” epitaph to indicate they have been laid to rest.
Route:
Static HTML:
Page function:
Data array:
/projectsStatic HTML:
pages/Projects.htmlPage function:
D() in assets/main.jsData array:
M in assets/main.jsWhat the page displays
| Element | Content |
|---|---|
Section heading (h1) | The Graveyard |
| Subtitle | Skeletons in the closet and things that go bump in the night. |
| Layout | grid-cols-1 md:grid-cols-2 lg:grid-cols-3 — responsive 3-column grid |
| Card component | Tombstone — one per project |
Projects data
The five projects are stored in theM array in assets/main.js.
| Title | Epitaph | Tech stack | Status | GitHub | Live link |
|---|---|---|---|---|---|
| Specter UI | A hauntingly beautiful component library. | React, Tailwind, Framer | ✅ Alive | ✓ | ✓ |
| Crypt Tracker | Keeping tabs on your digital assets before they vanish. | Next.js, TypeScript, Prisma | ✅ Alive | ✓ | ✓ |
| Poltergeist | Automated testing that goes bump in the night. | Node.js, Jest, Puppeteer | ✅ Alive | ✓ | — |
| Vampire CRM | Sucked the life out of me. RIP 2021-2022. | Vue, Firebase | ❌ Dead | ✓ | — |
| Zombie App | It keeps coming back from the dead. Legacy code. | jQuery, PHP | ❌ Dead | — | — |
Raw data structure
Halloween-themed concept
The graveyard metaphor maps naturally to a project portfolio: every project is a “tombstone”, and whether it is alive or dead determines how it is rendered. Active projects are vibrant, fully clickable stones; dead projects are dimmed with muted styles and theirepitaph field doubles as a RIP inscription, giving even abandoned work a sense of dark humour rather than simply hiding it.
Dead vs. alive rendering
TheisAlive boolean on each project object controls how the Tombstone component renders:
isAlive: true— Full-colour tombstone, technology badges are highlighted, GitHub and live-link icons are active.isAlive: false— Muted / desaturated tombstone, no live-link icon rendered, and theepitaphis treated as an RIP inscription.
Framer Motion animations
Each tombstone rises up from below with a staggered delay based on its array index.How to customise
Add a new project
Append a new object to the
M array in assets/main.js. Set isAlive: true to give it full styling, or isAlive: false to render it as a dead project. Omit the link key if there is no live URL; omit github if the repo is private.Edit an existing project
Find the object by
title in the M array and update any field — epitaph, tech, github, or link.Archive a live project
Set
isAlive: false on the relevant object. Update the epitaph to an RIP message that explains what happened (e.g. "Deprecated in favour of Specter UI v2.").