DEV Community

K.S. Karan Reddy
K.S. Karan Reddy

Posted on

Ofrenda: a remembrance that never leaves your machine

Hacktoberfest Open-Source AI Challenge: Ghost in the Machine Submission 👻🌼

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

What I Built

Ofrenda is a small web page that helps you write a remembrance for someone who has died, then sets it on a little altar. You give it a name, who they were to you, the foods and songs they loved, and one memory in your own words. A language model running on your computer turns that into a short piece of writing in your voice, and the altar lights a candle while it writes.

I read "Ghost in the Machine" as the people we carry around, not the monsters. The version I wanted was the one where the machine helps you say something about a person who is gone, and then gets out of the way.

The rule that shaped everything: the model may only use what you typed. It is told never to invent a name, a place, a date or a quote. If you give it three details, you get three details back. A remembrance with a made-up fact in it is worse than none.

Demo

Code

GitHub logo kskaranreddy / Ofrenda

Write a remembrance for someone you miss using a local Gemma model via Ollama. Runs offline in one HTML file; nothing leaves your computer. Hacktoberfest 2026: Ghost in the Machine.

Ofrenda

Write a remembrance for someone you miss, with a model that runs on your own computer.

You give it a name, who they were to you, the foods and songs they loved, and one memory. A local Gemma model, served by Ollama, writes a short piece in your voice using only those details. A small altar lights a candle while it writes. Nothing is uploaded: the page talks to localhost and nowhere else, so it works with the internet off.

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

Run it

You need Ollama and Python (only to serve the page locally).

  1. Pull a model:

    ollama pull gemma3
    

    On a machine with 8 GB of RAM or less, use gemma3:1b.

  2. Start Ollama and allow the page to call it.

    Windows (PowerShell):

    $env:OLLAMA_ORIGINS="*"; ollama serve
    

    Mac / Linux:

    OLLAMA_ORIGINS="*" ollama serve
    

    If the Ollama…

The whole app is one index.html. No build step, no dependencies, no backend.

How I Built It

  • Model: Gemma (gemma3), served by Ollama on localhost:11434. Any model you have pulled shows up in the dropdown, and the page prefers a Gemma if it finds one.
  • Page: plain HTML, CSS and JavaScript. It calls Ollama's /api/tags to list your models and /api/chat with streaming on, and reads the newline-delimited JSON as it arrives so the text appears word by word.
  • Altar: three CSS tiers and a paper-cut banner. The candle's flame fades in when generation starts, and the animation turns off if your system asks for reduced motion.
  • Hardware: my laptop has no usable GPU for Ollama, so everything ran on CPU. A short remembrance takes about a minute, which suits the subject.

To run it:

ollama pull gemma3
$env:OLLAMA_ORIGINS="*"; ollama serve    # PowerShell
python -m http.server 8000 --bind 127.0.0.1
Enter fullscreen mode Exit fullscreen mode

Why Does Open Innovation Matter?

The input to this tool is grief: a person's name, a story about their family, the song that was playing. I did not want that text to pass through anyone else's server, be logged, or sit in a database that outlives a startup's runway.

With an open-weight model the privacy is structural rather than promised. The page cannot send your memory anywhere because there is no remote to send it to. A closed API can offer a privacy policy. It cannot offer that.

It also means the tool keeps working. An ofrenda is something you come back to every year. A hosted model gets deprecated, repriced or shut down. A model file on your own disk keeps working, and when a better one comes out you swap it in with a dropdown.

The Spirit of It

Ofrenda is built around a simple belief: people never truly leave us as long as their stories live on.

It's about preserving the little things — their words, traditions, favorite memories, and the moments that made them who they were.

Not recreating those we've lost, but creating a space to remember them, celebrate their lives, and keep their stories alive.

Because sometimes, remembering is the closest thing we have to holding on.

Prize Categories

  • Best Use of Gemma

Top comments (0)