<?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: Laiba Ashfaq</title>
    <description>The latest articles on DEV Community by Laiba Ashfaq (@laiba_ashfaq_4b3f4b363ad4).</description>
    <link>https://dev.to/laiba_ashfaq_4b3f4b363ad4</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%2F3958298%2F3912c80d-8da9-462d-9a6c-c719864fec96.png</url>
      <title>DEV Community: Laiba Ashfaq</title>
      <link>https://dev.to/laiba_ashfaq_4b3f4b363ad4</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/laiba_ashfaq_4b3f4b363ad4"/>
    <language>en</language>
    <item>
      <title>Voice Order Taker</title>
      <dc:creator>Laiba Ashfaq</dc:creator>
      <pubDate>Mon, 19 Oct 2026 06:12:04 +0000</pubDate>
      <link>https://dev.to/laiba_ashfaq_4b3f4b363ad4/voice-order-taker-3j47</link>
      <guid>https://dev.to/laiba_ashfaq_4b3f4b363ad4/voice-order-taker-3j47</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://voice-order-taker-jvh7zuvem9z6qbfuqfcvpm.streamlit.app/" rel="noopener noreferrer"&gt;https://voice-order-taker-jvh7zuvem9z6qbfuqfcvpm.streamlit.app/&lt;/a&gt; &lt;/p&gt;

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

&lt;p&gt;Voice Order Taker is a local app that turns WhatsApp voice notes into a clean order sheet.&lt;/p&gt;

&lt;p&gt;In Pakistan, a lot of home businesses run on voice notes. A baker, a tiffin cook or a small clothing seller gets messages like "do kilo chocolate cake aur teen dozen samosay kal shaam tak, house 12 Jinnah Road", in Urdu, Roman Urdu, Pashto or a mix with English. The seller replays each note, then writes the order down by hand. With 20 or more orders a week, that is hours of work, and one misheard quantity means a wrong delivery.&lt;/p&gt;

&lt;p&gt;With my app, the seller uploads the voice notes and the app:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Transcribes each note with Whisper.&lt;/li&gt;
&lt;li&gt;Extracts customer, item, quantity, unit, delivery date, address and notes with a Gemma model.&lt;/li&gt;
&lt;li&gt;Shows an editable order table, a CSV download, and a daily prep list that adds up how many of each item are due on each date.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The person who would pay for this is a home seller handling a steady stream of orders. They don't need a big business tool. They need something that saves an hour a day and doesn't send their customers' addresses to a stranger's server.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://youtu.be/0M2gG12_r24" rel="noopener noreferrer"&gt;https://youtu.be/0M2gG12_r24&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%2Fpo56dgolo5blxpbd0qwh.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%2Fpo56dgolo5blxpbd0qwh.png" alt=" " width="800" height="332"&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/laiba-Ashfaq" rel="noopener noreferrer"&gt;
        laiba-Ashfaq
      &lt;/a&gt; / &lt;a href="https://github.com/laiba-Ashfaq/voice-order-taker" rel="noopener noreferrer"&gt;
        voice-order-taker
      &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;Voice Order Taker&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://voice-order-taker-jvh7zuvem9z6qbfuqfcvpm.streamlit.app/" rel="nofollow noopener noreferrer"&gt;https://voice-order-taker-jvh7zuvem9z6qbfuqfcvpm.streamlit.app/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Turn WhatsApp voice notes in Urdu, Roman Urdu, Pashto or English into a clean order sheet and a daily prep list. Everything runs on your own computer. No cloud, no API key, no per-order cost.&lt;/p&gt;
&lt;p&gt;Built for the Hacktoberfest Open-Source AI Challenge (Week 2: Side Hustle).&lt;/p&gt;
&lt;a rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/174279380/677560709-7a808f8f-cfbc-42ae-a47b-3b40abae2660.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3OTIzOTA2MjUsIm5iZiI6MTc5MjM5MDMyNSwicGF0aCI6Ii8xNzQyNzkzODAvNjc3NTYwNzA5LTdhODA4ZjhmLWNmYmMtNDJhZS1hNDdiLTNiNDBhYmFlMjY2MC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYxMDE5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MTAxOVQwNjEyMDVaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1hMTliMzYwYmFlY2I0MzE0ZWFkMzQ5YzBhMzUxOGVhYTc5MDk5OWI3ZGM2YTM3OGI4NDIxODI5NGUxYmYyMzMzJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZyZXNwb25zZS1jb250ZW50LXR5cGU9aW1hZ2UlMkZwbmcifQ.spiz7QqG3EC30ifHMDBq4bFYizuHCf-0mxDykwu95s0"&gt;&lt;img width="1279" height="539" alt="image" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F174279380%2F677560709-7a808f8f-cfbc-42ae-a47b-3b40abae2660.png%3Fjwt%3DeyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3OTIzOTA2MjUsIm5iZiI6MTc5MjM5MDMyNSwicGF0aCI6Ii8xNzQyNzkzODAvNjc3NTYwNzA5LTdhODA4ZjhmLWNmYmMtNDJhZS1hNDdiLTNiNDBhYmFlMjY2MC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYxMDE5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MTAxOVQwNjEyMDVaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1hMTliMzYwYmFlY2I0MzE0ZWFkMzQ5YzBhMzUxOGVhYTc5MDk5OWI3ZGM2YTM3OGI4NDIxODI5NGUxYmYyMzMzJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZyZXNwb25zZS1jb250ZW50LXR5cGU9aW1hZ2UlMkZwbmcifQ.spiz7QqG3EC30ifHMDBq4bFYizuHCf-0mxDykwu95s0" class="js-gh-image-fallback"&gt;&lt;/a&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;The problem&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Home bakers, tiffin services and small clothing sellers take most of their orders as WhatsApp voice notes. Someone says "do kilo chocolate cake aur teen dozen samosay kal shaam tak, house 12 Jinnah Road", and the seller has to replay it and write it down by hand. With 20 or more orders a week, this takes hours and mistakes happen.&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;ol&gt;
&lt;li&gt;You upload one or more voice notes (&lt;code&gt;.ogg&lt;/code&gt;, &lt;code&gt;.opus&lt;/code&gt;, &lt;code&gt;.m4a&lt;/code&gt;, &lt;code&gt;.mp3&lt;/code&gt;, &lt;code&gt;.wav&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Whisper transcribes each note locally.&lt;/li&gt;
&lt;li&gt;A Gemma model running in Ollama extracts structured orders: customer, item, quantity…&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/laiba-Ashfaq/voice-order-taker" 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;p&gt;Everything runs on a normal laptop with no cloud service.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;faster-whisper&lt;/strong&gt; (open-source Whisper) transcribes audio on the CPU. It reads WhatsApp &lt;code&gt;.opus&lt;/code&gt;, &lt;code&gt;.ogg&lt;/code&gt; and &lt;code&gt;.m4a&lt;/code&gt; files directly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma, running locally through Ollama,&lt;/strong&gt; reads the transcript and returns structured orders.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streamlit&lt;/strong&gt; is the interface, with a custom dark navy and teal theme and a CSS-only 3D robot mascot (no images or external libraries, so it works offline too).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pandas&lt;/strong&gt; handles the editable table, the CSV export and the daily prep list.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most important part was making a small model reliable. A free-form prompt gave me bad results, so I forced the output into a fixed JSON schema and added a worked example inside the prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;OrderLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BaseModel&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;
    &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;
    &lt;span class="n"&gt;quantity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="n"&gt;unit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;
    &lt;span class="n"&gt;delivery_date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;
    &lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;
    &lt;span class="n"&gt;notes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;OrderList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BaseModel&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;OrderLine&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ollama&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;OrderList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;model_json_schema&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;temperature&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;num_ctx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2048&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
              &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;transcript&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The prompt also converts words like "kal" (tomorrow) and "parson" (day after tomorrow) into real dates, and I give Whisper a short list of dish names as an &lt;code&gt;initial_prompt&lt;/code&gt; so it recognises local food words.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What went wrong along the way.&lt;/strong&gt; I built this on a laptop with a nearly full C: drive and limited RAM, which turned out to be good testing for a "runs on cheap hardware" project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The first model download failed because the disk was full, so I moved the model and cache folders to another drive.&lt;/li&gt;
&lt;li&gt;A 6.6 GB Gemma model ran out of memory while Whisper was also loaded, so I switched to a smaller Gemma and reduced the context size.&lt;/li&gt;
&lt;li&gt;A newer audio library version broke Whisper's decoder, so I pinned &lt;code&gt;av&amp;lt;17&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;My first extraction attempt with the smallest model returned a quantity with no item name. The schema and the worked example fixed most of that.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;[Add your real numbers here, for example: "I tested X voice notes. N came out fully correct, M needed one edit, and K failed. Average time per note was about Y seconds on CPU."]&lt;/p&gt;

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

&lt;p&gt;For this kind of customer, open models are not a nice extra. They are what makes the product possible.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy.&lt;/strong&gt; A voice note contains a customer's name, address and what they bought. With a closed API, all of that goes to a third-party server. Here it never leaves the seller's laptop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost.&lt;/strong&gt; Transcription and extraction cost nothing per order. A home baker can't justify per-minute and per-token fees, and a small flat monthly price still leaves a margin.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline use.&lt;/strong&gt; Power and internet outages are common where I live. The app keeps working because nothing depends on a connection after the one-time model download.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control.&lt;/strong&gt; I could change the prompt, give Whisper local dish names, shrink the context, and swap one Gemma size for another when my laptop couldn't handle the bigger one. With a closed API, I would have been stuck with whatever the provider supports and charges.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The trade-off is honest too: a small local model is less accurate than a large cloud model on messy mixed-language speech, so the app always shows an editable table and the seller confirms the result before acting on it.&lt;/p&gt;

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

&lt;p&gt;[Add your DevRelay or Entire session link here, or delete this section.]&lt;/p&gt;

&lt;h2&gt;
  
  
  My First User
&lt;/h2&gt;

&lt;p&gt;[Who they were (for example, a home baker, a relative who runs a food business), what voice notes they tried, what they said, and whether they would pay. Even one real quote helps. If you did not get a user, delete this section.]&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; the extraction step runs on Gemma locally through Ollama, so all order data stays on the user's machine.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>TrailQuest AI [Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass]</title>
      <dc:creator>Laiba Ashfaq</dc:creator>
      <pubDate>Sun, 11 Oct 2026 20:35:01 +0000</pubDate>
      <link>https://dev.to/laiba_ashfaq_4b3f4b363ad4/trailquest-ai-hacktoberfest-open-source-ai-challenge-week-1-touch-grass-4044</link>
      <guid>https://dev.to/laiba_ashfaq_4b3f4b363ad4/trailquest-ai-hacktoberfest-open-source-ai-challenge-week-1-touch-grass-4044</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Most AI apps want another prompt. &lt;strong&gt;TrailQuest AI wants you to close the app.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You pick how much time you have (30 minutes, an hour, two hours), what you feel like doing (walking, photography, nature observation, hiking), your energy level, and where you are (park, garden, mountains, neighborhood, anywhere). A local open-weight model then writes you a short outdoor mission: a few simple tasks, an observation challenge, an optional photo idea, a phone rule, and a safety reminder.&lt;/p&gt;

&lt;p&gt;Then you tap &lt;strong&gt;I'm going out&lt;/strong&gt;, and the app tells you to close the tab. When you're back, a check-in screen lets you tick off what you did, add a note and a photo, and see how long you were out. It ends with a "Mission complete" card you can screenshot.&lt;/p&gt;

&lt;p&gt;It's for anyone who spends too much time on screens and wants a nudge that doesn't turn into more screen time. The screen is used for about a minute at each end. The outing itself needs none.&lt;/p&gt;

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

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/m42Mb0bKjNs" 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/laiba-Ashfaq" rel="noopener noreferrer"&gt;
        laiba-Ashfaq
      &lt;/a&gt; / &lt;a href="https://github.com/laiba-Ashfaq/trailquest-ai" rel="noopener noreferrer"&gt;
        trailquest-ai
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Most AI apps want another prompt. **TrailQuest AI wants you to close the app.**  You pick how much time you have (30 minutes, an hour, two hours), what you feel like doing (walking, photography, nature observation, hiking), your energy level, and where you are (park, garden, mountains, neighborhood, anywhere). 
    &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;TrailQuest AI 🌿&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;An AI app that deliberately ends the conversation.&lt;/strong&gt; A local open-weight model writes you a short outdoor mission. Then the app tells you to close the screen and go outside.&lt;/p&gt;
&lt;p&gt;Built for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05" rel="nofollow"&gt;Hacktoberfest Open-Source AI Challenge, Week 1: Touch Grass&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How it works&lt;/h2&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Choose your &lt;strong&gt;time&lt;/strong&gt; (30 min, 60 min, 2 hours), &lt;strong&gt;activity&lt;/strong&gt;, &lt;strong&gt;energy&lt;/strong&gt;, and &lt;strong&gt;environment&lt;/strong&gt;, or tap &lt;strong&gt;Surprise me&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;A local Gemma model, running through Ollama, writes a mission: a title, 3-5 simple tasks, an observation challenge, an optional photo idea, a phone rule, and a safety reminder.&lt;/li&gt;
&lt;li&gt;Tap &lt;strong&gt;I'm going out&lt;/strong&gt;. The app saves your mission and tells you to close the tab.&lt;/li&gt;
&lt;li&gt;When you return, a &lt;strong&gt;check-in screen&lt;/strong&gt; lets you tick off what you did, add a note and an optional photo, and shows how long you were out. It ends with a "Mission complete" card you…&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/laiba-Ashfaq/trailquest-ai" 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;Model:&lt;/strong&gt; Gemma gemma4:latest , an open-weight model, running locally through &lt;strong&gt;Ollama&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Python + FastAPI. It sends your choices to Ollama and gets back a structured mission as JSON, so the app can render it as cards.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; React + Vite. The mission and your check-in note are saved in the browser's &lt;code&gt;localStorage&lt;/code&gt;, so you can close the tab, go outside, and find your mission waiting when you return.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build process:&lt;/strong&gt; I built it with [[Antigravity]] and saved the session with DevRelay.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The model is the core of the app. It writes every mission, and swapping models takes one environment variable.&lt;/p&gt;

&lt;p&gt;I ran it on a CPU-only laptop with about 8 GB of RAM.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy:&lt;/strong&gt; What you do outdoors, your notes, and your photos never leave your machine. Nothing goes to a server I don't control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No cost, no key:&lt;/strong&gt; There's no API key and no usage bill. Anyone can run it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swappable:&lt;/strong&gt; When my machine struggled with a larger model, I could switch to a smaller one without changing any code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Works offline:&lt;/strong&gt; After setup it needs no internet, which is useful if you're heading somewhere with poor signal. The one exception is the Google Fonts stylesheet, which falls back to system fonts when offline.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A closed API would have worked for generating missions, but I couldn't have promised that your data stays on your device.&lt;/p&gt;

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

&lt;p&gt;I built this with Cursor. The full source and commit history are in the GitHub repo above.&lt;/p&gt;

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

&lt;p&gt;-Best Use of Gemma&lt;br&gt;
-Best use of cursor &lt;br&gt;
-Best use of DevRelay&lt;br&gt;
-Best use of ElevenLabs&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>hacktoberfest</category>
    </item>
    <item>
      <title>HomeMemory {Memo}</title>
      <dc:creator>Laiba Ashfaq</dc:creator>
      <pubDate>Sun, 04 Oct 2026 22:52:56 +0000</pubDate>
      <link>https://dev.to/laiba_ashfaq_4b3f4b363ad4/homememory-memo-16bj</link>
      <guid>https://dev.to/laiba_ashfaq_4b3f4b363ad4/homememory-memo-16bj</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;&lt;strong&gt;&lt;em&gt;HomeMemory&lt;/em&gt;&lt;/strong&gt; is a private memory for the small things families keep forgetting. Mother,sister,father and I are always asking: where are the spare keys, what's the Wi-Fi password, where did the wallet go, which hospital receipt was that, when does this medicine expire.&lt;/p&gt;

&lt;p&gt;You take a photo, add a short note ("wallet on the side table in my bedroom"), and a mascot called Memo remembers it. Later you ask in plain English, Urdu or Roman Urdu and get an answer with the source photo. A "Due soon" tab flags medicines and documents before they expire.&lt;/p&gt;

&lt;p&gt;I built it for my Mother, who is not at the age to remember everything so 1 time she forget her credit card in some shop so we all are very concern i build this for her so she is in ease .&lt;/p&gt;

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

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/1i7o2_LhIHk" 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/laiba-Ashfaq" rel="noopener noreferrer"&gt;
        laiba-Ashfaq
      &lt;/a&gt; / &lt;a href="https://github.com/laiba-Ashfaq/Home-Memory" rel="noopener noreferrer"&gt;
        Home-Memory
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A private memory assistant for the small things families keep forgetting.
    &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;HomeMemory&lt;/h1&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;A private memory assistant for the small things families keep forgetting.&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;About&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;HomeMemory is a personal memory assistant designed to help families remember where important everyday things are and keep track of dates such as document or medicine expiry dates.&lt;/p&gt;

&lt;p&gt;The idea came from a simple experience: my mother once left her credit card behind at a shop. It made me think about how often we forget small but important things at home — where we kept our wallet, keys, receipts, documents, or other belongings.&lt;/p&gt;

&lt;p&gt;Instead of expecting someone to remember everything, HomeMemory lets them simply &lt;strong&gt;ask&lt;/strong&gt;.&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;With HomeMemory, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Take or upload a photo of an item.&lt;/li&gt;
&lt;li&gt;Add a short note about where it is.&lt;/li&gt;
&lt;li&gt;Use an open model to analyze the photo and extract useful details.&lt;/li&gt;
&lt;li&gt;Review and edit the information before saving it.&lt;/li&gt;
&lt;li&gt;Ask questions about saved items in English, Urdu…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/laiba-Ashfaq/Home-Memory" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
Live Deploy :&lt;br&gt;
&lt;a href="http://home-memorygit-an9izpjmre3yesgikuoybq.streamlit.app/" rel="noopener noreferrer"&gt;http://home-memorygit-an9izpjmre3yesgikuoybq.streamlit.app/&lt;/a&gt; 
&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;Gemma 4 runs locally through Ollama. It reads each photo and returns structured JSON (category, item, description, readable text, expiry date) and writes the final answers.&lt;br&gt;
EmbeddingGemma turns each memory into a vector, so "extra chabi" can still find "spare keys".&lt;br&gt;
MongoDB Atlas Vector Search stores the memories and finds the closest match to a question.&lt;br&gt;
Streamlit powers the interface, including a dark mode and an animated mascot, Memo.&lt;/p&gt;

&lt;p&gt;What I did to keep answers reliable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Forced a fixed JSON schema and temperature 0, so the model can't invent categories.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Made your own note the source of truth for where something is.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added a confirm-and-edit step before anything is saved.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added a match threshold, so Memo says "I couldn't find that" instead of guessing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wrote a small test script: top-1 retrieval accuracy was [X/Y = 78%] on 10 real items.&lt;br&gt;
What went wrong: a real failure, my wallet was first labelled "document" because of the cards inside, and Then i add edit button and dropdown menue chnage into add also button for belongings .&lt;br&gt;
result: it takes 10-15 minutes to find these things before This chatbot ,after this it goes to 2-3 minutes maximum &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;This ChatBot holds Wi-Fi passwords, ID documents, medical receipts and where the jewelry is kept. I didn't want to send those photos to a closed API.&lt;/p&gt;

&lt;p&gt;Because Gemma is open-weight, the photo reading and answering run on my own laptop. The images never leave it, there are no per-request costs, and I could change the prompts, schema and model size freely.&lt;/p&gt;

&lt;p&gt;One honest limit: the text records and their embeddings are stored in MongoDB Atlas, not locally. The same code also works against a local MongoDB.&lt;/p&gt;

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

&lt;p&gt;I built HomeMemory by working with Claude in a chat window, then running and testing&lt;br&gt;
everything on my own laptop. I didn't use a coding-agent tool, so I have no agent-session&lt;br&gt;
file to share. The main fixes I made along the way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;wallet was first labelled "document"; fixed with a new category and a stricter prompt&lt;/li&gt;
&lt;li&gt;search threshold tuned so Memo says "not found" instead of guessing&lt;/li&gt;
&lt;li&gt;UI fixes for dark mode and the upload button&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma&lt;/strong&gt;: Gemma 4 runs locally through Ollama. It reads each photo and returns structured JSON, and it writes the answers. EmbeddingGemma creates the embeddings used for search.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of MongoDB Atlas&lt;/strong&gt;: Atlas stores every memory and Atlas Vector Search finds the closest match to a question.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of ElevenLabs&lt;/strong&gt;: I used ElevenLabs to generate the narration for my demo video.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of GitHub Copilot&lt;/strong&gt;: I used Copilot in VS Code to fix errors i encounter like toggle button not working so i had to fix it using copilot ollama takes to much time so i also fixed this issue it now reads images quickly with better score.&lt;/li&gt;
&lt;/ul&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%2Flwbe4wtmwpg3bmfe701p.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%2Flwbe4wtmwpg3bmfe701p.png" alt="Home-page" width="800" height="341"&gt;&lt;/a&gt;&lt;/p&gt;

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