<?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: Pratik</title>
    <description>The latest articles on DEV Community by Pratik (@prdxdotexe).</description>
    <link>https://dev.to/prdxdotexe</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%2F4011118%2F5a294d4a-d463-485e-8ed1-04fbd6f42e55.png</url>
      <title>DEV Community: Pratik</title>
      <link>https://dev.to/prdxdotexe</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/prdxdotexe"/>
    <language>en</language>
    <item>
      <title>Recipe-maker</title>
      <dc:creator>Pratik</dc:creator>
      <pubDate>Sun, 04 Oct 2026 08:24:56 +0000</pubDate>
      <link>https://dev.to/prdxdotexe/recipe-maker-51ki</link>
      <guid>https://dev.to/prdxdotexe/recipe-maker-51ki</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;Family Recipe Memory&lt;/strong&gt; for a friend whose family cooks almost entirely from memory.&lt;/p&gt;

&lt;p&gt;Her grandmother and parents never write recipes down or measure much. They explain them out loud: &lt;em&gt;add some of this, cook it until it smells right, you'll know when it's done.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Those little details are the actual recipe, and they're very easy to lose. Right now, a lot of them live in voice notes buried somewhere in a chat app, often in a mix of Nepali and English, with no practical way to search them.&lt;/p&gt;

&lt;p&gt;So the app lets her just talk.&lt;/p&gt;

&lt;p&gt;She uploads a voice note, and it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transcribes it on her own machine&lt;/li&gt;
&lt;li&gt;Lets her fix any misheard words&lt;/li&gt;
&lt;li&gt;Turns it into a clean recipe with ingredients, steps, tips, and the family story&lt;/li&gt;
&lt;li&gt;Saves it to a small recipe library&lt;/li&gt;
&lt;li&gt;Lets her ask things like &lt;em&gt;"What did Grandma say about making momo?"&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One rule I cared about: &lt;strong&gt;if something wasn't said in the recording, the app leaves it blank instead of guessing.&lt;/strong&gt; I didn't want a model quietly rewriting someone's grandmother's recipe.&lt;/p&gt;

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

&lt;p&gt;[&lt;a href="https://www.youtube.com/watch?v=x8TJe7HyIew" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=x8TJe7HyIew&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;The flow is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Upload voice note → Transcribe → Review transcript → Extract and save → Browse or ask questions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each recipe is shown as a card with the story, an ingredients table, numbered steps, and tips. Recipes can also be downloaded as Markdown.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://dev.tourl"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&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/PRDXdotEXE" rel="noopener noreferrer"&gt;
        PRDXdotEXE
      &lt;/a&gt; / &lt;a href="https://github.com/PRDXdotEXE/recipe-maker" rel="noopener noreferrer"&gt;
        recipe-maker
      &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;🍲 Family Recipe Memory&lt;/h1&gt;

&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Preserve voice recipes and stories from loved ones using Local AI + Backboard Persistent Memory.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Problem&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Family culinary heritage is often trapped in unwritten spoken traditions. Audio notes from grandmothers or parents contain precious nuances, but searching through raw voice recordings is frustrating and inefficient.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Solution&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Family Recipe Memory&lt;/strong&gt; turns unstructured voice notes into a searchable family knowledge base. Audio transcription and AI structured parsing run &lt;strong&gt;100% locally&lt;/strong&gt;, ensuring raw voice recordings never leave your machine. Only extracted text is persisted in Backboard memory for cross-session natural language retrieval.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Architecture &amp;amp; Privacy Model&lt;/h2&gt;

&lt;/div&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/PRDXdotEXE/recipe-maker" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


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

&lt;p&gt;Everything runs locally.&lt;/p&gt;

&lt;p&gt;The stack is Python and Streamlit, with two open models doing the heavy lifting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI Whisper&lt;/strong&gt; for speech-to-text. The voice notes mix Nepali and English, and the smallest Whisper model gets shaky on that, so the app defaults to &lt;code&gt;small&lt;/code&gt;, lets you switch to &lt;code&gt;medium&lt;/code&gt;, and lets you pick the spoken language.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ollama&lt;/strong&gt; for everything language-related. I tested with &lt;code&gt;llama3.2&lt;/code&gt;, &lt;code&gt;gemma2&lt;/code&gt;, and &lt;code&gt;qwen2.5&lt;/code&gt;, and the app lists whichever models are installed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The extraction step was the part that took the most care.&lt;/p&gt;

&lt;p&gt;The transcript goes to the model with strict instructions: only use what was said, keep dish and ingredient names as spoken, and leave anything that wasn't mentioned empty.&lt;/p&gt;

&lt;p&gt;The output is JSON, which I then clean up, because small local models love to return a quantity as an object or write &lt;code&gt;"N/A"&lt;/code&gt; instead of leaving a field empty.&lt;/p&gt;

&lt;p&gt;Two design choices came directly from using it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A review step between transcription and extraction.&lt;/strong&gt; Speech-to-text can mishear a Nepali word now and then, and one wrong word can ruin an ingredient. Letting my friend fix the transcript first made the recipes noticeably better.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Memory is just a local JSON file.&lt;/strong&gt; Recipes are saved to &lt;code&gt;data/recipes.json&lt;/code&gt;. For questions, the app passes the most relevant saved recipes to the local model and tells it to answer only from them, and to say so if the answer isn't there.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I also had a bug early on where the results disappeared the moment I clicked the download button, because Streamlit reruns the script on every click. Moving the state into &lt;code&gt;st.session_state&lt;/code&gt; fixed it.&lt;/p&gt;

&lt;p&gt;My friend's reaction: &lt;strong&gt;[Add your friend's actual feedback here, or remove this line.]&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;A family voice note isn't just audio. It's someone's voice, their stories, names, and private conversations, often from people who are getting older. I wasn't comfortable sending that to a cloud API just because it was convenient.&lt;/p&gt;

&lt;p&gt;Open models meant the whole pipeline—from audio to transcript to recipe to answers—runs on a laptop with no account, no API key, and no per-request cost.&lt;/p&gt;

&lt;p&gt;It also meant I could test the extraction prompt as many times as I liked on real recordings without worrying about a bill, and I could swap models freely when one handled Nepali words better than another.&lt;/p&gt;

&lt;p&gt;A closed API could have done the extraction too. What it couldn't give me is the same level of control over keeping the original recordings on my friend's computer.&lt;/p&gt;

&lt;p&gt;For this project, &lt;strong&gt;that mattered more than anything else.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Build for a Friend / Loved One&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  hf26challenge
&lt;/h1&gt;

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