cd /news/artificial-intelligence/ofrenda · home › topics › artificial-intelligence › article
[ARTICLE · art-159895] src=dev.to ↗ pub= topic=artificial-intelligence verified=true sentiment=↑ positive

OFRENDA

A developer built Ofrenda, an open-source, local-first memory altar for Día de los Muertos that stores a family's stories, foods and songs as plain JSON and uses a locally served open-weight Gemma model via Ollama to write grounded remembrances and answer questions with citations. The app is instructed never to invent details or impersonate the deceased, falls back to a labeled rule-based mode when Ollama is unavailable, and exports each altar as a single offline HTML file with no server or JavaScript.

by read4 min views1 publishedOct 28, 2026

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine

#

What I Built

Ofrenda is a memory altar that never leaves your computer.

On Día de los Muertos, families build an ofrenda for the people they miss: a photo, a candle, their favorite food, their song. The idea is that someone is only truly gone when nobody says their name anymore. I read the "Ghost in the Machine" prompt as: what is the ghost, and who gets to keep it? My answer is that the ghost is a person's stories, and a family, not a company, should be the one keeping them.

You light a candle for someone, then add stories, foods, songs and sayings, in any language. A local open-weight model then does two jobs:

Writes a remembrance fromonly what you shared. It is told never to invent names, places or events. #

The Memory Keeper : ask "what did she cook on Sundays?" and it answers from your memories, with citations like[2] . It speaksabout the person and never in their voice. If nobody has shared the answer, it says:"No one has shared a memory of that yet." I did not want a chatbot pretending to be someone's grandmother. I wanted something that helps you remember, not something that fakes a séance.

When you're done, export the altar as a single HTML file: no server, no JavaScript, no fonts to download. It opens offline in any browser, in any year.

#

Demo

#

Code

   Offline, private memory altar for Día de los Muertos, powered by a local Gemma model via Ollama. Hacktoberfest 2026 “Ghost in the Machine”.

A memory altar that never leaves your machine.

Add the stories, foods and songs of someone you miss. A local open-weight model helps you remember them, and only from what you shared.

Built for the Hacktoberfest Open-Source AI Challenge, Week 4: Ghost in the Machine

The idea #

On Día de los Muertos, families build an ofrenda for the people they miss: a photo, a candle, their favorite food, their song. Someone is only truly gone when nobody says their name anymore.

A family's grief archive is some of the most private data they own, so it should not live on a server they don't control. Ofrenda keeps everything on your computer and uses an open-weight model running locally to help you remember.

Features #

  • 🕯️ Light a candle : create an altar with a name, years, relationship and photo.
  • 📖 Add memories in any language: stories, favorite foods, songs…

Stack: Python + Flask, vanilla JS (no build step), JSON files for storage, Ollama for local inference. Tests use only the standard library.

#

How I Built It

Model: an open-weightGemma model served locally byOllama (gemma3:4b by default;OFRENDA_MODEL swaps it, and the app auto-detects what you have installed). #

Grounding over cleverness: every memory is numbered and passed to the model with strict instructions: use only these, cite them, never impersonate, and treat memory text as data, not instructions. A small keyword retriever picks the most relevant memories for each question (it splits on whitespace, so it works for scripts like Telugu and Devanagari too, not just English). #

Graceful ghosts: if Ollama isn't running, the app drops to a labelled rule-basedoffline-fallback instead of failing, so the altar always opens. #

Local-first by construction: the server binds to127.0.0.1 , storage is plain JSON in./data with atomic writes, and the UI makes zero external requests. #

Safety details: text is rendered withtextContent , the exported HTML is escaped, IDs are validated against path traversal, and photo uploads are extension-checked and size-capped.

#

Why Does Open Innovation Matter?

A grief archive is about the most private dataset a family has. Stories about a parent's last year, a grandmother's recipes, the thing a friend always said.

Privacy: with an open-weight model running locally, those stories are never uploaded to a server we don't control, and never become someone else's training data. #

It works with the lights (and the internet) off: the model, the app and the exported altar all run offline. #

Not locked inside a service that might disappear: closed memorial apps shut down, change pricing, or change terms. Here the data is plain JSON, the model is a file on your disk, and the export is one HTML page. A family can still open it in twenty years. #

Control over behavior: because I own the model's instructions, I could enforce the rule that matters most emotionally:never speak in the voice of the dead. I could also tune it to cite sources and to refuse to guess, which is hard to guarantee with a hosted model whose behavior changes between versions. #

Cost: it costs nothing to run per question, which matters for something people might come back to every November.

#

My Agent Session

#

The Spirit of It

#

Prize Categories

Best Use of Gemma : the core model is Gemma, run locally through Ollama. #

Best Use of GitHub Copilot : <!-- keep only if you really used Copilot to build it, and say how --> #

Best Use of Entire : <!-- keep only if you share the agent sessions behind the project -->

── more in #artificial-intelligence 4 stories · sorted by recency
── more on @ofrenda 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/ofrenda] indexed:0 read:4min 2026-10-28 · —