This is a submission for the Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine
The Haunted Ofrenda is a 3D, scroll-driven Día de los Muertos altar. You name someone you miss, answer a few gentle questions about them, and watch the altar fill up. Their favourite food appears, their song becomes an offering, and every story you share lights a candle. A small open-weight model then writes a short remembrance from only the memories you gave it.
For the theme, I read "Ghost in the Machine" literally and emotionally. The ghost is the person you're remembering. The machine is a model running on your own computer, with no server holding your memories.
The opening was inspired by The Haunting of Hill House title sequence: darkness, a single warm light, and a world that reveals itself slowly as you scroll.
The live link hosts the UI only. Gemma runs on your own machine through Ollama
The remembrance writer runs locally through the Ollama service on this computer. The React app sends only the selected memory's text fields to the local Express backend; photographs stay in browser IndexedDB and are never sent to Gemma. The backend and Vite development server bind to 127.0.0.1, and Vite proxies /api requests to Express. No cloud model, cloud database, or third-party AI service is used.
gemma4:e2b
Check the installed model with:
ollama list
If Ollama is not already running, start the Ollama desktop app or run ollama serve in a terminal. The model can be loaded with:
ollama run gemma4:e2b
Copy backend/.env.example to backend/.env and adjust the values only if your local Ollama address, model, or port differs. .env files are ignored by Git.
…
Open-source AI
gemma3:4b] writes the guiding questions and the final remembrance.
Frontend
Tricks that made a small model work
An honest limit: the Vercel link can't run Gemma, because the model lives on the user's machine. That's deliberate, but it means the full experience needs Ollama installed. "run it locally" .
A remembrance of a grandmother is about as personal as data gets, so where it goes matters.
One note on terms: Gemma is open-weight under Google's own licence, not an OSI open-source licence. I used it because it's open enough to run locally and fits the challenge.
[Write this one yourself. Describe one real moment, such as a memory you typed about someone and the candle lighting up. A screenshot or GIF of that moment will do more than any paragraph.]
Gemma