I Built a Graveyard for My Abandoned Git Repos (Gemma Writes the Epitaphs, Offline) A developer built Repo Graveyard, an open-source tool that scans a folder of git repositories, identifies abandoned projects, and generates tombstones with epitaphs and ghost stories written in each project's voice. The app runs entirely offline using Gemma 3 4B via Ollama on localhost, with a Python/FastAPI backend and a framework-free frontend, and it generates epitaphs in a background queue while ghost stories and 'Resurrect' plans stream token by token over server-sent events. The design deliberately limits the model's inputs to git metadata โ€” README lines, TODO lines, and the last five commit messages โ€” rather than source code, with the first token of a warm ghost story appearing in about 1.3 seconds on the developer's RTX 3050 laptop. This is a submission for the Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine https://dev.to/challenges/hacktoberfest-week4-2026-10-26 Every developer has a graveyard. Mine is a folder of projects that started with a burst of commits and a confident README, then stopped. Nobody announced it. The last commit just sat there, and the project quietly died. Repo Graveyard points at a folder of git repositories and turns the abandoned ones into a night-time graveyard. Each dead project gets a tombstone with its birth and death years, a cause of death, an epitaph, and a short ghost story told in the project's own voice. It scans, it mourns, and it can try to bring something back. For the theme, I read "Ghost in the Machine" literally. Every abandoned repo is a ghost: code that still exists, still has a history, and has no one left to talk to. The git log is the only thing left of it, so the log is what the ghost speaks from. A few things it does: wip or fix later . "Died young" for under 10 commits. "Death by TODO" for repos buried in unfinished notes. "Sudden death" for heavy activity followed by silence. "Fizzled out" for everything else. "Ghost in the Machine" Hackathon Project A 100% local, air-gapped forensic inspection tool that scans your folders for abandoned Git repositories and resurrects them into an atmospheric, dark-humored virtual graveyard. +-----------------------------------------------------------------------------------+ | ๐Ÿ•ฏ๏ธ REPO GRAVEYARD 100% Local & Private ๐ŸŸข Gemma 3:4b Ready | | Where dead code rests, unresolved TODOs haunt, and local spirits speak. | +-----------------------------------------------------------------------------------+ | C:\Projects Scan Projects ๐Ÿ”ฎ Sรฉance | +-----------------------------------------------------------------------------------+ | ๐ŸŒฑ Still Among the Living Recent commits detected | | โ— spectral-cli 4d ago โ— pixel-roguelike-core 75d ago | +-----------------------------------------------------------------------------------+ | โšฐ๏ธ The Cemetery Grounds | | | | +-------------------+ +-------------------+ +-------------------+ | | / R.I.P. \ | R.I.P. | โœ R.I.P. | | | | neural-toaster | | crypto-tamagotchi | | vim-exit-simulator | | | | 2021 โ€” 2022 | | 2022 โ€” 2023 | | 2023 โ€” 2023 | | โ€ฆ Run it with Python and Ollama. The README has the setup steps: install Ollama, ollama pull gemma3:4b , then python run.py . The model: Gemma 3 4B gemma3:4b , running locally through Ollama. I built this on a laptop with an RTX 3050 and 4 GB of VRAM, so a small model that runs without a datacenter was the point. The stack: Python and FastAPI on the backend, and a vanilla HTML/CSS/JS frontend with no frameworks, no CDN and no external fonts. The only network call in the whole app is to localhost:11434 , where Ollama lives. Scan results and generated text are cached as JSON, so the graveyard loads instantly the second time. The main design decision: the model doesn't know anything. Git does. I didn't want an LLM guessing what happened to my projects, so I split the work: Epitaphs are generated in a background queue after each scan, while ghost stories and Resurrect plans stream token by token over server-sent events. On my machine the first token of a warm ghost story shows up in about 1.3 seconds. The Resurrect plan only sees three inputs: the README's first lines, the TODO lines, and the last five commit messages. It never sees the source code. A tool that reads your commit history is reading something private. Commit messages, TODOs, the names of side projects you never told anyone about, the half-finished idea from 2 a.m.: it's a fairly intimate record of what you worked on and what you gave up on. That's why this had to be open and local: Best Use of Gemma : the whole project runs on gemma3:4b locally through Ollama, as the voice that gives each abandoned repo its epitaph, ghost story and revival plan, while git supplies every fact.