<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Snehil Kumar Tiwari</title>
    <description>The latest articles on DEV Community by Snehil Kumar Tiwari (@snehil_kumartiwari_77527).</description>
    <link>https://dev.to/snehil_kumartiwari_77527</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4173199%2F024fe9bc-5908-4aba-be76-ed68d4d45a37.png</url>
      <title>DEV Community: Snehil Kumar Tiwari</title>
      <link>https://dev.to/snehil_kumartiwari_77527</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/snehil_kumartiwari_77527"/>
    <language>en</language>
    <item>
      <title>Ofrenda: a local-first ofrenda builder that never leaves your laptop</title>
      <dc:creator>Snehil Kumar Tiwari</dc:creator>
      <pubDate>Sat, 31 Oct 2026 15:51:48 +0000</pubDate>
      <link>https://dev.to/snehil_kumartiwari_77527/ofrenda-a-local-first-ofrenda-builder-that-never-leaves-your-laptop-1j25</link>
      <guid>https://dev.to/snehil_kumartiwari_77527/ofrenda-a-local-first-ofrenda-builder-that-never-leaves-your-laptop-1j25</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week4-2026-10-26"&gt;Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Ofrenda is a tool for remembering someone you miss, made for Día de los Muertos.&lt;/p&gt;

&lt;p&gt;You enter a loved one's name and a photo, then tell their stories by typing or by speaking. A local language model asks one gentle question at a time ("What did their kitchen smell like on Sundays?"), and Whisper transcribes anything you say out loud. Then you add the things they loved: a food, a song, something they always said, a flower, a place.&lt;/p&gt;

&lt;p&gt;From only what you told it, the model writes a short remembrance that you can edit. The tool then builds a candlelit ofrenda page with flickering candles, marigolds, papel picado, and their photo in a frame. You download it as a single HTML file that opens anywhere, with no account, server, or service behind it.&lt;/p&gt;

&lt;p&gt;I read "Ghost in the Machine" as the people who live on in the stories we carry. It is easy to get lost in the world of codes and machines, but we must not forget the eyes that see it, and the souls shared between those eyes.&lt;/p&gt;

&lt;p&gt;Two rules shaped the design. The guide never speaks &lt;em&gt;as&lt;/em&gt; the person who died; it only asks questions. And the writing prompt forbids invented facts, so the remembrance contains only what you said.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/gY0fMxlaOKw" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/illsnehil" rel="noopener noreferrer"&gt;
        illsnehil
      &lt;/a&gt; / &lt;a href="https://github.com/illsnehil/Ofrenda" rel="noopener noreferrer"&gt;
        Ofrenda
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Ofrenda&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A local-first ofrenda builder for Día de los Muertos. You tell the stories of someone you miss (typed or spoken)
a local LLM asks gentle follow-up questions and writes a remembrance from &lt;em&gt;only&lt;/em&gt; what you said, and you get a
candlelit ofrenda page you can keep as one HTML file. No cloud, no accounts, no API keys.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Run it&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; 1. Inference: https://ollama.com&lt;/span&gt;
ollama pull qwen2.5:7b          &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; fits 16 GB RAM; try llama3.1:8b or gemma2:9b too&lt;/span&gt;
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; 2. Transcription (optional, enables the Record button)&lt;/span&gt;
pip install -r requirements.txt  &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; first run downloads Whisper "small" once&lt;/span&gt;
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; 3. Go&lt;/span&gt;
python3 server.py                &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; open http://127.0.0.1:8765&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Swap models: &lt;code&gt;OFRENDA_MODEL=llama3.1:8b python3 server.py&lt;/code&gt;. Smaller Whisper: &lt;code&gt;OFRENDA_WHISPER=base&lt;/code&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Prove it's offline&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;After the one-time downloads, turn Wi-Fi off and run it again. The server binds to 127.0.0.1 only, the page loads
no fonts, scripts or images from the web, and photos are resized in…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/illsnehil/Ofrenda" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Inference:&lt;/strong&gt; &lt;a href="https://ollama.com" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt; running &lt;code&gt;qwen2.5:7b&lt;/code&gt;, an open-weight model that fits in 16 GB of RAM. The model is one environment variable: &lt;code&gt;OFRENDA_MODEL=llama3.1:8b python3 server.py&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speech to text:&lt;/strong&gt; &lt;a href="https://github.com/SYSTRAN/faster-whisper" rel="noopener noreferrer"&gt;faster-whisper&lt;/a&gt;, running Whisper locally.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; a small Python standard-library server, bound to &lt;code&gt;127.0.0.1&lt;/code&gt; only. It serves the page, streams model output from Ollama, and handles transcription.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; one HTML file with no frameworks, no CDN, and no web fonts. Photos are resized in the browser and embedded straight into the exported file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompts:&lt;/strong&gt; one prompt for the question-asking guide and one for the remembrance. The remembrance prompt requires using only the user's notes and keeping their own phrases.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;A remembrance of someone who has died is some of the most private writing a person does. The photos, the voice recordings and the stories shouldn't have to be uploaded to a company's servers to be turned into something beautiful.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It works offline.&lt;/strong&gt; I turned Wi-Fi off, restarted the server, and built a full ofrenda.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nothing leaves the machine.&lt;/strong&gt; The server binds to localhost, and the page loads nothing from the web. Photos and voice recordings stay local.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I could swap the model.&lt;/strong&gt; I compared qwen2.5:7b and llama3.1:8b; former wrote more plainly, latter kept my phrases better. With a closed API, the model could change underneath me or be retired.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It costs nothing to run.&lt;/strong&gt; No API keys, no per-request fees.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It can't disappear.&lt;/strong&gt; The output is a plain HTML file. If I stopped maintaining this project, every ofrenda ever made with it would still open.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
  </channel>
</rss>
