# Light the Candle: An Offline Día de los Muertos Ofrenda Builder

> Source: <https://dev.to/j0bs-code/light-the-candle-an-offline-dia-de-los-muertos-ofrenda-builder-5545>
> Published: 2026-11-01 07:09:21+00:00

*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)*

**Ofrenda** is a private, offline remembrance builder for Día de los Muertos.

You enter a loved one's name, your relationship, their favorite foods and songs, and a memory. A local open weight model then writes three things: a short remembrance honoring them, a gentle "letter back" in a warm voice, and a list of items to place on your ofrenda. It all appears on a candlelit, marigold themed page.

I read the theme "Ghost in the Machine" as the people who live on in our stories. On Día de los Muertos, the line between past and present gets thinner, and the machine here isn't haunted. It helps carry a memory forward. The most personal prompts I can imagine giving an AI are stories about people I miss, so I built it so those stories never leave my computer.

[Link your GitHub repo here, or paste it with:

A private, offline remembrance builder for Día de los Muertos, powered by an open-weight model running entirely on your own computer.

Enter a loved one's name, favorite foods, favorite songs, and a memory. Gemma writes:

All inside a candlelit, marigold-themed page.

Built for the **Ghost in the Machine** open-source AI challenge.

These are stories about people we love. Ofrenda uses an open-weight model running locally, so:

`MODEL`) to use any other open model, or a…` localhost:11434`
`requests`) that takes the form data, builds a prompt, and sends it to the local model
The prompt asks the model for three sections (REMEMBRANCE, LETTER BACK, OFRENDA ITEMS) and tells it not to invent specific facts beyond what the person shared. That matters because the "letter back" should feel true to the person, not like made up fiction about them.

The model name is one line of config, so any other model shown by `ollama list` can be swapped in.

This project is about real people we love, so privacy isn't a nice to have.

`localhost`. A grandmother's recipes, a father's favorite song, a childhood story: none of it touches a server I don't control.
A closed API would have worked technically, but it would have meant sending the most personal text I could imagine to someone else's server. For this project, open wasn't just cheaper. It was the right way to build it.
