{"slug": "i-built-a-graveyard-for-my-dead-side-projects-with-ai-eulogies-a-3d-cemetery", "title": "I Built a Graveyard for My Dead Side Projects - With AI Eulogies & a 3D Cemetery", "summary": "A developer built DevGraveyard, a gothic memorial platform where developers can bury their abandoned side projects with AI-generated eulogies. The platform uses Google Gemini to write dramatic breakup letters based on GitHub commit data, and features a 3D cemetery built with Three.js and React Three Fiber. The project is live at devgraveyard.varshithvhegde.in.", "body_md": "*This is a submission for Weekend Challenge: Passion Edition*\n\nEvery 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.\n\n**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.\n\nHere's what it does:\n\nMy own `ARweave`\n\nrepo 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.\"*\n\nIt worked until it worked.\n\n🔗 **Live → devgraveyard.varshithvhegde.in**\n\nA memorial for your abandoned side projects. They deserved better than an empty GitHub repo gathering digital dust.\n\n**Live → devgraveyard.varshithvhegde.in**\n\nEvery developer has a graveyard of passion projects — started with fire, abandoned quietly on a Tuesday. DevGraveyard gives them a proper burial.\n\n`/graveyard-3d`\n\n. Click tombstones…| Layer | Tech |\n|---|---|\n| Frontend | Next.js 14 (App Router), TypeScript, Tailwind CSS, shadcn/ui |\n| Auth + Database | Supabase (GitHub OAuth, Postgres, Row Level Security) |\n| AI | Google Gemini `gemini-2.5-flash`\n|\n| 3D | Three.js + React Three Fiber + @react-three/drei |\n| Animations | Motion (Framer Motion successor) |\n| Deployment | Vercel |\n\nWhen you click **\"Bury a Project\"**, a 3-step wizard walks you through:\n\nThis 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\"**:\n\n```\n// From src/lib/github/analyze.ts\nexport function computePeakObsession(commits: GitHubCommit[]) {\n  // commits per day → longest consecutive streak\n  // latest commit between midnight–5am → \"latest night session\"\n  // max commits in a single day → \"best day\"\n  // ...\n}\n```\n\nThese 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.\n\nThe eulogy prompt is carefully engineered to produce something specific, not generic:\n\n```\nWrite exactly 3 paragraphs. Format as a letter FROM the developer\nTO the project. Tone: dramatic, darkly funny, genuinely melancholic.\nOpening: \"Dear {repo_name},\"\nReference at least 2 of these real data points:\n  - Peak obsession: 30 commits in a single day\n  - Latest night session: 2:34 AM  \n  - Cause of death: \"Never Made it Past Localhost\"\n  - Last commit message: \"feat: overlay plane in 3D builder...\"\nClose with: \"Yours, but not anymore, — A Tired Developer\"\nMax 250 words. No markdown.\n```\n\nThe 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`\n\nproject:\n\n\"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...\"\n\nThe eulogy reveals with a typewriter animation when first generated, then persists in Supabase forever.\n\nThe 3D view at `/graveyard-3d`\n\nis a full Three.js scene built with React Three Fiber.\n\n**The tombstone shape** is a single `ExtrudeGeometry`\n\nfrom a `THREE.Shape`\n\n— a rectangle with `absarc`\n\nfor the semicircular arch. Much cleaner than a box + half-cylinder:\n\n``` js\nfunction makeTombShape() {\n  const w = 0.34, h = 0.95;\n  const shape = new THREE.Shape();\n  shape.moveTo(-w, 0);\n  shape.lineTo(-w, h);\n  shape.absarc(0, h, w, Math.PI, 0, false); // perfect semicircle\n  shape.lineTo(w, 0);\n  return shape;\n}\n```\n\n**Animations in the scene:**\n\n`FlickerCandle`\n\n— cone flame with per-frame scale noise + matching `PointLight`\n\nintensity flicker`SoulWisps`\n\n— glowing orbs float upward from tombstones with candles lit`ResurrectPulse`\n\n— an expanding `ringGeometry`\n\non 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.\n\nEvery buried project joins the public memorial wall at `/graveyard`\n\n, sortable by newest, most mourned, or most resurrection votes.\n\nThe 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.\n\nThe passion isn't just the theme. It's the subject matter.\n\n**🏆 Best Use of Google AI**\n\nDevGraveyard uses **Google Gemini** (`gemini-2.5-flash`\n\n) 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.\n\nThe 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.\n\nThe 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.\n\n*Built in a weekend. My ARweave repo will never see production. But now it has a tombstone. That's something.*", "url": "https://wpnews.pro/news/i-built-a-graveyard-for-my-dead-side-projects-with-ai-eulogies-a-3d-cemetery", "canonical_source": "https://dev.to/varshithvhegde/i-built-a-graveyard-for-my-dead-side-projects-with-ai-eulogies-a-3d-cemetery-5g0e", "published_at": "2026-07-12 12:23:59+00:00", "updated_at": "2026-07-12 12:43:42.263881+00:00", "lang": "en", "topics": ["developer-tools", "artificial-intelligence", "generative-ai", "ai-tools"], "entities": ["DevGraveyard", "Google Gemini", "GitHub", "Supabase", "Three.js", "React Three Fiber", "Vercel", "Next.js"], "alternates": {"html": "https://wpnews.pro/news/i-built-a-graveyard-for-my-dead-side-projects-with-ai-eulogies-a-3d-cemetery", "markdown": "https://wpnews.pro/news/i-built-a-graveyard-for-my-dead-side-projects-with-ai-eulogies-a-3d-cemetery.md", "text": "https://wpnews.pro/news/i-built-a-graveyard-for-my-dead-side-projects-with-ai-eulogies-a-3d-cemetery.txt", "jsonld": "https://wpnews.pro/news/i-built-a-graveyard-for-my-dead-side-projects-with-ai-eulogies-a-3d-cemetery.jsonld"}}