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.
- Bury a project — connect GitHub, pick a dead repo, choose a cause of death ("Never Made it Past Localhost", "Ran Out of Weekend", "It Was Complicated"...), write an epitaph
- Real tombstone data — pulls your actual commit history: peak streak, most commits in a day, last commit message as "final words"
- AI Eulogy — Google Gemini writes a dramatic breakup letter from you to the project, referencing your real commit data
- Community mourning — light candles, leave RIP messages, vote to resurrect projects
- 3D Graveyard — a full Three.js interactive cemetery at
/graveyard-3d. Click tombstones, light candles, orbit the scene
| Framework | Next.js 14 (App Router, TypeScript) |
| Database + Auth | Supabase (GitHub OAuth, Postgres, RLS) |
| AI | Google Gemini gemini-2.5-flash |
| 3D | Three.js + React Three Fiber + @react-three/drei |
| Animations | Motion (Framer Motion) |
| UI | Tailwind CSS + shadcn/ui |
| Deployment | Vercel |
git clone https://github.com/Varshithvhegde/devgraveyard.git
cd devgraveyard
npm installCreate a new project at supabase.com, then run the schema:
# Paste the contents of supabase-schema.sql into your Supabase SQL editor
# Or use the CLI:
npx supabase link --project-ref YOUR_PROJECT_REF
npx supabase db query --linked -f supabase-schema.sqlEnable GitHub as an OAuth provider in your Supabase Auth settings.
Set the callback URL to: https://your-domain.com/auth/callback
Go to aistudio.google.com/app/apikey and create a free API key.
cp .env.example .env.localFill in .env.local:
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key
GOOGLE_GEMINI_API_KEY=your_gemini_key
NEXT_PUBLIC_APP_URL=http://localhost:3000npm run devOpen http://localhost:3000.
src/
├── app/
│ ├── page.tsx # Landing page
│ ├── graveyard/ # Public tombstone wall
│ ├── graveyard-3d/ # Three.js 3D cemetery
│ ├── bury/ # Burial wizard
│ ├── tombstone/[id]/ # Individual tombstone
│ ├── my-graveyard/ # Your buried projects
│ └── api/ # API routes
│ ├── tombstones/ # CRUD for tombstones
│ ├── candles/ # Light / snuff candles
│ ├── rip-messages/ # Condolences
│ ├── resurrect/ # Resurrection votes
│ ├── eulogy/ # Gemini AI generation
│ └── github/ # GitHub API proxy
├── components/
│ ├── tombstone/ # TombstoneCard, Grid, Filters
│ ├── burial/ # 3-step burial wizard
│ ├── community/ # Candle, Vote, RIP message
│ ├── eulogy/ # AI eulogy display
│ ├── graveyard3d/ # Three.js scene
│ ├── landing/ # Hero, Stats, HowItWorks
│ └── shared/ # Fireflies, ScrollReveal, etc.
└── lib/
├── github/ # API client + commit analysis
├── gemini/ # Eulogy prompt + generation
└── supabase/ # Client, server, admin
Five tables — see supabase-schema.sql for the full schema with RLS policies and triggers.
users → GitHub profile (auto-created on OAuth)
tombstones → buried projects with all commit stats
candles → one per user per tombstone
rip_messages → condolence messages
resurrection_votes → one vote per user per tombstone
A tombstone_stats view aggregates candle/message/vote counts.
When the owner clicks "Generate AI Eulogy", we send Gemini a prompt built from real commit data:
Peak obsession: 30 commits in a single day
Latest night session: 2:34 AM
Last commit: "feat: reset endpoint + spec examples support"
Cause of death: "Never Made it Past Localhost"
Total commits: 56
Write a 3-paragraph breakup letter FROM the developer TO the project.
Opening: "Dear {repo_name},"
Closing: "Yours, but not anymore, — A Tired Developer"
The eulogy is stored permanently in Supabase after the first generation.
Push to GitHub and connect to Vercel. Add all environment variables from .env.example. Update the Supabase callback URL to your production domain.
# Or deploy directly
npx vercel --prodDEV Weekend Challenge: Passion Edition — July 2026
Prize category: Best Use of Google AI
Built by @Varshithvhegde