DEV Community

Sahil Sharma
Sahil Sharma

Posted on Edited on

Luz: virtual ofrenda builder that runs entirely in your browser

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

Luz is a virtual ofrenda builder that runs entirely in your browser.

You tell it about someone you've lost: their name, the foods they loved, the songs they hummed, the stories everyone retells at dinner. Luz helps turn those fragments into a remembrance. You get a short written tribute, a candlelit ofrenda laid out with marigolds, photos, and favorite things, and a "story prompt" mode that asks gentle questions to draw out memories you'd forgotten you had.

I read "Ghost in the Machine" as the opposite of spooky. A ghost is just someone who's still here in some form, and the machine's job is to help you hold onto them. The tool is also deliberately private, because grief is about the last thing anyone should be sending to a stranger's server.

How I Built It

The stack

  • React + Tailwind CSS for the interface, with a dark candlelit theme, soft glow animations, and a draggable ofrenda canvas
  • WebLLM, which runs an open-weight model fully in the browser over WebGPU, with no backend and no API key
  • Gemma4 for drafting tributes and generating memory prompts
  • IndexedDB for storing every memory, photo, and draft locally on the user's device
  • Vite for the build, deployed as a static site

How it works

  1. The first visit downloads the quantized model once and caches it in the browser.
  2. After that, the app works with the network switched off.
  3. Each memory the user adds (a dish, a song, a short story) is saved locally and fed into a prompt template that asks the model for a warm, specific tribute rather than a generic one.
  4. The "memory prompts" mode asks the model for one gentle question at a time, such as "What did their kitchen smell like on Sundays?", so the user does the remembering and the model just keeps the door open.
  5. The finished ofrenda can be exported as an image or as a plain Markdown file, so it isn't locked inside the app.

Most of my effort went into the prompt design, not the model. Small models drift toward cliché fast ("They will always live in our hearts"). I constrained the output to the user's own details, kept the tone plain, and told the model to say less when it has less to work with. That made the results much more personal.

Why Does Open Innovation Matter?

Privacy that doesn't depend on a promise. A tribute to a parent or grandparent contains names, photos, and private family stories. With a hosted API, that data crosses someone else's servers and sits under someone else's retention policy. With an open-weight model

Prize Categories

  • Best Use of Gemma: Luz runs a quantized Gemma model locally in the browser through WebLLM to draft tributes and generate memory prompts, with no server involved.
  • Best Use of GitHub Copilot: I used Copilot to [describe how: coding agent, PR reviews, Actions, etc.].

Top comments (0)