<?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: Elev 💥</title>
    <description>The latest articles on DEV Community by Elev 💥 (@raphelevator).</description>
    <link>https://dev.to/raphelevator</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%2F4158967%2Ff68c4df8-1983-4b81-8adb-0ac790211c3d.jpg</url>
      <title>DEV Community: Elev 💥</title>
      <link>https://dev.to/raphelevator</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/raphelevator"/>
    <language>en</language>
    <item>
      <title>I turned my sister in law's voice notes into a cookbook that answers in her voice</title>
      <dc:creator>Elev 💥</dc:creator>
      <pubDate>Sun, 04 Oct 2026 14:45:11 +0000</pubDate>
      <link>https://dev.to/raphelevator/i-turned-my-sister-in-laws-voice-notes-into-a-cookbook-that-answers-in-her-voice-41ja</link>
      <guid>https://dev.to/raphelevator/i-turned-my-sister-in-laws-voice-notes-into-a-cookbook-that-answers-in-her-voice-41ja</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 have known Purity for ten years. She was my friend first. Today she is my younger brother's wife.&lt;/p&gt;

&lt;p&gt;She is also the cook everyone waits for, and almost everything she makes, she learned from her mother. None of it is written down. It lives in her hands and in the way she explains it: half English, half Igbo, full of small warnings like &lt;em&gt;pour away the first water&lt;/em&gt; and &lt;em&gt;fry the fresh tomato first&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;So this weekend I asked her for voice notes. One dish per note, explained the way she would if I were standing next to her in the kitchen. She sent eight: jollof rice, egusi soup with uziza seed, okra soup with uziza leaf and ugba, beans and ripe plantain cooked together, bitter leaf soup, abacha, porridge yam with ogiri, and egg sauce the way her elder sister taught her. Forty minutes of her voice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Legacy Loom&lt;/strong&gt; turns those voice notes into something the family can use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every note is &lt;strong&gt;written down word for word&lt;/strong&gt;, with a timestamp on every word.&lt;/li&gt;
&lt;li&gt;Every note is &lt;strong&gt;filed&lt;/strong&gt;: the dish, the ingredients, the steps, her tricks, and the lines worth keeping exactly as she said them.&lt;/li&gt;
&lt;li&gt;You can &lt;strong&gt;ask it anything&lt;/strong&gt;. "What is the secret to her jollof?" "Why does she pour away the first water from the beans?" The answer uses only what she actually said, and each fact carries a small number. &lt;strong&gt;Tap the number and you hear Purity say it&lt;/strong&gt;, from that exact second.&lt;/li&gt;
&lt;li&gt;Her recipes become a &lt;strong&gt;printable cookbook&lt;/strong&gt;. Every page has a QR code. Scan it and she explains the dish herself.&lt;/li&gt;
&lt;li&gt;Ask about something she never mentioned and it says so plainly, then suggests a question to ask her next time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When it was ready I sent her the link. She asked it about her own jollof, tapped a number and heard herself. This is what she sent back, exactly as she typed it:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;wooow meeeenhn this is good, onyi you did a great job, i love this&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What got her was hearing her own voice and seeing her mother's tricks written down as tips. That was the whole point.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Purity's archive (listen and ask, no login):&lt;/strong&gt; &lt;a href="https://legacy-loom-ashen.vercel.app/app" rel="noopener noreferrer"&gt;https://legacy-loom-ashen.vercel.app/app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try it with your own voice:&lt;/strong&gt; &lt;a href="https://legacy-loom-ashen.vercel.app/app?space=try" rel="noopener noreferrer"&gt;https://legacy-loom-ashen.vercel.app/app?space=try&lt;/a&gt;&lt;br&gt;
Record yourself or upload any voice note. No passcode. It is kept apart from Purity's archive and cleared after 24 hours.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Her printable cookbook:&lt;/strong&gt; &lt;a href="https://legacy-loom-ashen.vercel.app/book" rel="noopener noreferrer"&gt;https://legacy-loom-ashen.vercel.app/book&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Five minute guide:&lt;/strong&gt; &lt;a href="https://legacy-loom-ashen.vercel.app/guide" rel="noopener noreferrer"&gt;https://legacy-loom-ashen.vercel.app/guide&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Three questions worth asking her archive. Each link opens the app and asks it for you:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://legacy-loom-ashen.vercel.app/app?q=What%20did%20Purity%20learn%20from%20her%20mother%3F" rel="noopener noreferrer"&gt;What did Purity learn from her mother?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://legacy-loom-ashen.vercel.app/app?q=What%20is%20the%20secret%20to%20her%20jollof%20rice%3F" rel="noopener noreferrer"&gt;What is the secret to her jollof rice?&lt;/a&gt; The answer quotes her in Igbo.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://legacy-loom-ashen.vercel.app/app?q=What%20did%20she%20say%20about%20her%20wedding%3F" rel="noopener noreferrer"&gt;What did she say about her wedding?&lt;/a&gt; She never talked about it, so watch it say exactly that.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0k6grteirckjrrlfsdu5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0k6grteirckjrrlfsdu5.png" alt="The Legacy Loom landing page: Keep their voice. Ask it anything." width="800" height="538"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F63p00iyspg8vedtdy0zz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F63p00iyspg8vedtdy0zz.jpg" alt="On a phone: asking the secret to her jollof rice. The answer quotes Purity in Igbo, with numbers you tap to hear her." width="750" height="1624"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz0hh9kezl0tq5dm6631q.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz0hh9kezl0tq5dm6631q.jpg" alt="Her okra soup note, filed, with her own words kept exactly: Everything I know today is my mom that taught me." width="375" height="812"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1vfbhog91o4qi3adv5dv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1vfbhog91o4qi3adv5dv.png" alt="The first pages of Purity's Kitchen, her printable cookbook." width="800" height="875"&gt;&lt;/a&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/angelraph" rel="noopener noreferrer"&gt;
        angelraph
      &lt;/a&gt; / &lt;a href="https://github.com/angelraph/legacy-loom" rel="noopener noreferrer"&gt;
        legacy-loom
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A private archive of one person's voice notes, built on open models (Gemma, Whisper, TabPFN) with MongoDB Atlas
    &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;Legacy Loom&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Live:&lt;/strong&gt; &lt;a href="https://legacy-loom-ashen.vercel.app" rel="nofollow noopener noreferrer"&gt;https://legacy-loom-ashen.vercel.app&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;App:&lt;/strong&gt; &lt;a href="https://legacy-loom-ashen.vercel.app/app" rel="nofollow noopener noreferrer"&gt;https://legacy-loom-ashen.vercel.app/app&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://legacy-loom-ashen.vercel.app/docs" rel="nofollow noopener noreferrer"&gt;https://legacy-loom-ashen.vercel.app/docs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Legacy Loom keeps one person's voice notes and makes them useful. You drop in the voice notes a friend sends you (the recipes, the stories, the "this is how my mum did it"), and it turns them into a private archive you can ask questions of. Every answer links to the second they said it. Recipes become a printable cookbook, and each page has a QR code that plays the cook explaining the dish.&lt;/p&gt;
&lt;p&gt;Open models do the core work: Gemma reads, files and answers, Whisper listens, and an open embedding model searches. Gemma and Whisper can run on a laptop with no GPU, so the voice notes don't have to leave the machine.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What it does&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Ask.&lt;/strong&gt; Gemma picks a tool (search the memories, look up a recipe, read the timeline, or ask the call planner), runs it, and answers only…&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/angelraph/legacy-loom" 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;h3&gt;
  
  
  One voice note, start to finish
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Store.&lt;/strong&gt; The audio goes into MongoDB Atlas (GridFS) and is streamed back with byte ranges. That is what lets the player jump straight to a cited second.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Listen.&lt;/strong&gt; faster-whisper, running the open Whisper weights on my laptop's CPU, writes every word down with its timing. The hosted version uses ElevenLabs Scribe instead. Both return the same shape, so nothing downstream cares which one ran.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File.&lt;/strong&gt; Gemma reads the transcript and returns JSON: a title, what kind of memory it is, a summary, the people and places, the year if one is said, up to three exact quotes, and a recipe card with ingredients, steps and tips.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Index.&lt;/strong&gt; The transcript is cut into passages of about 45 seconds that keep their timestamps. Each passage, plus one English overview of the note, is embedded with &lt;code&gt;BAAI/bge-small-en-v1.5&lt;/code&gt; (open, running through fastembed on ONNX) and stored in Atlas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ask.&lt;/strong&gt; A small agent loop. Gemma picks a tool (&lt;code&gt;search_memories&lt;/code&gt;, &lt;code&gt;find_recipe&lt;/code&gt;, &lt;code&gt;timeline&lt;/code&gt; or &lt;code&gt;plan_calls&lt;/code&gt;). Search runs &lt;strong&gt;Atlas Vector Search and Atlas Search side by side&lt;/strong&gt; and merges them with reciprocal rank fusion, so a passage that ranks well for meaning and for exact words rises to the top. Gemma answers only from the numbered passages and cites them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check.&lt;/strong&gt; Every quote in the answer is compared with the real transcripts before you see it. More on why below.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Gemma, in two places
&lt;/h3&gt;

&lt;p&gt;On my laptop (16 GB of RAM, no GPU) it runs &lt;strong&gt;Gemma 3 4B through Ollama&lt;/strong&gt;. Filing a five minute note takes a minute or two on the CPU, which is fine in the background. The hosted demo uses &lt;strong&gt;Gemma 4 26B A4B through Google AI Studio&lt;/strong&gt;, because a free serverless function cannot hold a 4B model. Same prompts, same code, one setting switches between them.&lt;/p&gt;

&lt;p&gt;Two things I learned the hard way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4 thinks out loud by default.&lt;/strong&gt; Its reasoning used around 300 tokens per answer and once used up the whole output budget before it wrote the recipe card. Setting its thinking level to minimal brought answers down to about three seconds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The small model sometimes labels a note "recipe" and then leaves the recipe card empty.&lt;/strong&gt; When that happens, Legacy Loom asks Gemma a second, narrower question for just the card.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The rule it never bends: no invented quotes
&lt;/h3&gt;

&lt;p&gt;Early on, testing with a short clip, the 4B model wrote this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;She always said, "It's a good, warming soup."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nobody ever said that. The model was trying to be warm. In an archive of someone's voice, that is the one mistake you cannot make, so now every quoted span is checked against what was actually said. A sentence quoting words that are not in any transcript is removed, and the answer shows &lt;em&gt;Removed 1 quote that was never said&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Then Purity's real notes found a sneakier version. Gemma 4 joined two true sentences into one quote:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Everything I know today is my mom that taught me that uziza leaf and the uziza seed gives it a very sweet flavor"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;She said both halves, minutes apart. She never said them together. My first checker glued all her saved quotes into one block of text, so the stitched quote passed. Now each passage is checked on its own, Gemma is told to quote one sentence at a time, and there are tests for a real quote, an invented one and a stitched one.&lt;/p&gt;

&lt;h3&gt;
  
  
  TabPFN: the best time to call
&lt;/h3&gt;

&lt;p&gt;Every recording is a session: what hour, what day, who asked, what topic, how long she spoke. I rate each session from one to five. TabPFN, the tabular foundation model from Prior Labs, is built for exactly this size of table: a few dozen rows, no training loop of my own. It learns which days, hours and topics tend to give the recordings we treasure, scores every hour of the coming week, and a second TabPFN model estimates how many minutes she will talk.&lt;/p&gt;

&lt;p&gt;When I first published this, Purity had sent five notes, all rated five stars, and the planner refused to guess. It needs at least eight rated sessions, with some that went less well. She sent three more that afternoon. I rated them honestly (egg sauce 3, abacha 4, porridge yam 3) and TabPFN switched on.&lt;/p&gt;

&lt;p&gt;Its first real forecast: &lt;strong&gt;call her around 1 PM, with a 91% chance of a keeper recording, and expect about five minutes of talk.&lt;/strong&gt; That lines up with what happened. Her five notes from one o'clock all got five stars, and the later afternoon ones I rated lower. It cannot tell weekdays apart yet, because every note so far was recorded on the same Sunday. It runs through the Prior Labs API, and the open &lt;code&gt;tabpfn&lt;/code&gt; package works too.&lt;/p&gt;

&lt;h3&gt;
  
  
  Making it work on free hosting
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The bundle was too big.&lt;/strong&gt; The full app came to 554 MB against Vercel's 500 MB limit, because the TabPFN client brings pandas, pyarrow, scipy and scikit learn with it. The planner now runs as its own small Vercel project, and the main site forwards &lt;code&gt;/api/planner&lt;/code&gt; to it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Serverless functions stop when they reply&lt;/strong&gt;, so on Vercel a voice note is transcribed, filed and indexed inside the upload request. A five minute note takes about 30 seconds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Two spaces.&lt;/strong&gt; Purity's archive is read only without a passcode, so nobody can delete her voice. A separate &lt;em&gt;Try it yourself&lt;/em&gt; space is open to everyone, kept apart in every query and search filter, and cleared after 24 hours.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read aloud&lt;/strong&gt; uses ElevenLabs. Each clip is cached, and new clips are limited to three per visitor per day so the free credits last through judging. Purity's own recordings are never limited.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Because these are a family's recipes in a woman's own voice.&lt;/strong&gt; On my laptop, with Ollama, Whisper and the open embedding model, the listening, filing and answering all happen on the machine. Her recordings never have to leave it. The hosted demo trades that for convenience so you can try it in a browser, and the code runs either way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Because Purity speaks Igbo.&lt;/strong&gt; She moves between English and Igbo in the middle of a sentence. Whisper does not list Igbo among its languages. Because every piece of the pipeline is open and separate, I could put ElevenLabs Scribe in for her notes without touching anything else. The transcript, Gemma, the search and the quote check all work the same. When a model does not fit the person, you change the model, not the person.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Because I could see what went wrong.&lt;/strong&gt; When the small model invented a quote, I could read the prompt, the output and the transcript side by side, change my own code, and write a test so it never comes back. Running the same prompts on Gemma 3 4B and Gemma 4 26B also showed me which mistakes were the model's size and which were my prompt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Because it costs nothing to keep.&lt;/strong&gt; Locally it is free. Hosted, it fits inside free tiers. A family archive should not need a subscription to stay alive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where the open path cost me something:&lt;/strong&gt; speed. On my CPU, Gemma 3 4B takes a minute or two to file one note, and the hosted Gemma 4 does it in seconds. For a demo the hosted path is the right call. For Purity's own copy, I would pick the laptop.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;I built Legacy Loom with Claude Code as my pair programmer over the weekend: planning, the pipeline, the debugging stories above, and the deploys.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Best Use of Gemma&lt;/li&gt;
&lt;li&gt;Best Use of TabPFN&lt;/li&gt;
&lt;li&gt;Best Use of MongoDB Atlas&lt;/li&gt;
&lt;li&gt;Best Use of ElevenLabs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Update, Sunday evening:&lt;/strong&gt; after this went live, Purity sent three more voice notes: egg sauce, abacha and porridge yam. Her archive now holds eight recordings and forty minutes of her voice, and the TabPFN planner is forecasting from real ratings (see above).&lt;/p&gt;

&lt;p&gt;Thank you, Purity, for trusting me with your mother's recipes and your voice. And thank you, Silver, who sent five recordings of her own the same afternoon and reminded me this is not a one person problem.&lt;/p&gt;

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