This is a submission for the Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine
What I Built
Camposanto is a quiet graveyard for abandoned side projects. You point it at a folder of old repos, and each one becomes a tombstone in a small 2D night scene. Click a stone and a local language model writes an epitaph and a "cause of death" from the repo's real git log and README. A resurrect button then tells you what the project was, how to revive it, and three next steps.
Every developer has a folder of projects that just stopped: the last commit says "wip", and nobody came back. I wanted something that honors those projects in the spirit of DÃa de los Muertos. The projects get remembered, and the ones with recent commits keep a small candle lit.
The UI is deliberately minimal: an ink-black page, one candle-amber accent, thin line-art stones, a slow candle flicker, drifting fog, and a faint papel picado strst drifts to whicheverstone you hover.
Demo
Code
Camposanto
A quiet graveyard for your abandoned projects. Point it at a folder of old repos and each one becomes a tombstone. A local open-weight model writes an epitaph and a "cause of death" from the real git log and README, and a resurrect button tells you what the project was and how to bring it back.
Everything runs on your machine: no accounts, no API keys, no network once the model is pulled.
Run
ollama pull qwen2.5:3b # ~2GB, fits a 4GB GPU
node server.js # Node 18+, no npm install needed
Open http://localhost:7331, set the folder to scan, pick a model from the dropdown.
config.json holds port, scanRoot, ollamaUrl, defaultModel and staleDays (a repo with no commits for that many days counts as dead; the rest keep a candle lit).
Swapping models
The dropdown lists whatever Ollama has installed. Good small choices: llama3.2:3b…
Run it yourself:
ollama pull qwen2.5:3b
node server.js # Node 18+, no npm install
# open http://localhos
How I Built It
-
Model runtime: Ollama running open-weight
models locally. I deveAM and a 4GB RTX 3050,mainly with
qwen2.5:3b(about 2GB). The model dropdown lists whatever is installed, so I could nd others. -
Server: about 150 lines of dependency-free Node (
http,child_process,fetcsgit log`, the firstcommits, file types and the README, and streams the model's reply to the browser over server-se -
Prompts: two small prompts in
lib/llm.js, one for epitaphs and one for resurrection. Smalrose, so I added alength cap, a stop at the first blank line, a repeat penalty, and a format template. Without thospied text from my ownexample. - Cache: results a and model, sore-clicking a stone is instant and switching models regenerates.
- UI: vanilla HTMLbuild step. Systemfonts only, so the page loads with no external requests.
Why Does Open Innovation Matter?
- Your unfinished code stays private. Abandoned projects often hold half-baked ideas, privmmit messages. With alocal model, none of that is sent to a server I don't control.
- **It works with the ith wifi disabled. Thewhole thing, scanning, model and UI, runs on a laptop.
- **I could change theing the model is onedropdown. Changing the persona from a gentle poet to a disappointed parent is a prompt edit. Beca could tune samplingsettings like the repeat penalty and stop sequences, which is what fixed the looping.
- It costs nothing to run across as many repos as I like.
A closed API would have worked as a one-off demo, but I wouldn't want to
point it at a folder o
Top comments (0)