# I Built a Graveyard for My Dead Side Projects - With AI Eulogies & a 3D Cemetery

> Source: <https://dev.to/varshithvhegde/i-built-a-graveyard-for-my-dead-side-projects-with-ai-eulogies-a-3d-cemetery-5g0e>
> Published: 2026-07-12 12:23:59+00:00

*This is a submission for Weekend Challenge: Passion Edition*

Every developer has a graveyard of side projects — started with fire, abandoned quietly on a Tuesday. They deserved better than an empty GitHub repo gathering digital dust.

**DevGraveyard** is a gothic memorial platform where developers give their abandoned passion projects a proper burial. Connect your GitHub, pick a dead repo, carve its epitaph — and watch Gemini AI write a dramatic breakup letter from you to the project.

Here's what it does:

My own `ARweave`

repo had 56 commits, a 2-day peak streak, 30 commits on its best day. Cause of death: *"Never Made it Past Localhost."* Last words: *"feat: overlay plane in 3D builder — drag/scale image on marker, position saved to DB and restored in AR viewer."*

It worked until it worked.

🔗 **Live → devgraveyard.varshithvhegde.in**

A memorial for your abandoned side projects. They deserved better than an empty GitHub repo gathering digital dust.

**Live → devgraveyard.varshithvhegde.in**

Every developer has a graveyard of passion projects — started with fire, abandoned quietly on a Tuesday. DevGraveyard gives them a proper burial.

`/graveyard-3d`

. Click tombstones…| Layer | Tech |
|---|---|
| Frontend | Next.js 14 (App Router), TypeScript, Tailwind CSS, shadcn/ui |
| Auth + Database | Supabase (GitHub OAuth, Postgres, Row Level Security) |
| AI | Google Gemini `gemini-2.5-flash`
|
| 3D | Three.js + React Three Fiber + @react-three/drei |
| Animations | Motion (Framer Motion successor) |
| Deployment | Vercel |

When you click **"Bury a Project"**, a 3-step wizard walks you through:

This is the technical heart of the project. When you bury a repo, we paginate through the entire commit history via the GitHub API and compute what I call **"obsession data"**:

```
// From src/lib/github/analyze.ts
export function computePeakObsession(commits: GitHubCommit[]) {
  // commits per day → longest consecutive streak
  // latest commit between midnight–5am → "latest night session"
  // max commits in a single day → "best day"
  // ...
}
```

These numbers feed directly into the tombstone — and into the Gemini prompt. A project that died after 30 commits on its best day tells a different story than one with 3 total commits.

The eulogy prompt is carefully engineered to produce something specific, not generic:

```
Write exactly 3 paragraphs. Format as a letter FROM the developer
TO the project. Tone: dramatic, darkly funny, genuinely melancholic.
Opening: "Dear {repo_name},"
Reference at least 2 of these real data points:
  - Peak obsession: 30 commits in a single day
  - Latest night session: 2:34 AM  
  - Cause of death: "Never Made it Past Localhost"
  - Last commit message: "feat: overlay plane in 3D builder..."
Close with: "Yours, but not anymore, — A Tired Developer"
Max 250 words. No markdown.
```

The results are genuinely surprising. Gemini knows you committed at 2 AM. It writes about that specific obsession. Here's what it produced for my `ARweave`

project:

"I remember the fervor, the peak obsession when I clocked 30 commits in a single day, mapping out every PLpgSQL schema and every front-end interaction. We built features that felt so robust within the confines of our little local development environment. You were a vibrant, if demanding, companion, demanding all my CPU cycles and mental bandwidth..."

The eulogy reveals with a typewriter animation when first generated, then persists in Supabase forever.

The 3D view at `/graveyard-3d`

is a full Three.js scene built with React Three Fiber.

**The tombstone shape** is a single `ExtrudeGeometry`

from a `THREE.Shape`

— a rectangle with `absarc`

for the semicircular arch. Much cleaner than a box + half-cylinder:

``` js
function makeTombShape() {
  const w = 0.34, h = 0.95;
  const shape = new THREE.Shape();
  shape.moveTo(-w, 0);
  shape.lineTo(-w, h);
  shape.absarc(0, h, w, Math.PI, 0, false); // perfect semicircle
  shape.lineTo(w, 0);
  return shape;
}
```

**Animations in the scene:**

`FlickerCandle`

— cone flame with per-frame scale noise + matching `PointLight`

intensity flicker`SoulWisps`

— glowing orbs float upward from tombstones with candles lit`ResurrectPulse`

— an expanding `ringGeometry`

on the ground below voted tombstones**You can light candles and vote to resurrect directly from the 3D panel** — it calls the real API and the stone reacts in real time.

Every buried project joins the public memorial wall at `/graveyard`

, sortable by newest, most mourned, or most resurrection votes.

The entire aesthetic is built around one idea: **this should feel like a real memorial, not a joke**. Developers genuinely grieve abandoned projects. The tombstones use engraved text, chiseled dividers, moss at the base. The AI eulogy takes commit data seriously. The community features are real interactions — your candle is stored in a database, your RIP message has an author and a timestamp.

The passion isn't just the theme. It's the subject matter.

**🏆 Best Use of Google AI**

DevGraveyard uses **Google Gemini** (`gemini-2.5-flash`

) as the emotional core of the product. The eulogy generation prompt is engineered to reference specific real data points from the user's commit history — producing output that feels genuinely personal rather than generic AI text.

The key insight: the AI isn't just generating *content*, it's transforming raw GitHub telemetry (commit counts, timestamps, last message) into something that makes you *feel* the loss of a project you actually cared about.

The eulogy is generated once per tombstone (owner only), stored permanently in Supabase, and revealed with a typewriter animation. It costs one API call and lasts forever — the project's eulogy becomes part of its memorial.

*Built in a weekend. My ARweave repo will never see production. But now it has a tombstone. That's something.*
