<?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: Atifa Azizuddin</title>
    <description>The latest articles on DEV Community by Atifa Azizuddin (@developer_3ff119cc8f65f5f).</description>
    <link>https://dev.to/developer_3ff119cc8f65f5f</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4158355%2F7a64d60c-c9ea-47a2-953f-c62fc030773f.webp</url>
      <title>DEV Community: Atifa Azizuddin</title>
      <link>https://dev.to/developer_3ff119cc8f65f5f</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/developer_3ff119cc8f65f5f"/>
    <language>en</language>
    <item>
      <title>Ofrenda: a remembrance maker that never goes online.</title>
      <dc:creator>Atifa Azizuddin</dc:creator>
      <pubDate>Sat, 31 Oct 2026 14:55:01 +0000</pubDate>
      <link>https://dev.to/developer_3ff119cc8f65f5f/ofrenda-a-remembrance-maker-that-never-goes-online-f5o</link>
      <guid>https://dev.to/developer_3ff119cc8f65f5f/ofrenda-a-remembrance-maker-that-never-goes-online-f5o</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hf26"&gt;Hacktoberfest Challenge: 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 small tool that turns a spoken or typed memory of someone you love into a candlelit remembrance page: their favourite foods, their songs, the things they used to say, and the stories you want to keep.&lt;/p&gt;

&lt;p&gt;You give it a voice recording or a text file. A local speech model transcribes it, a local open-weight model pulls out the details, and a single self-contained HTML page comes out. No account, no upload, no API key.&lt;/p&gt;

&lt;p&gt;Día de los Muertos is about keeping people present by telling their stories. I wanted a tool that makes that easy without handing those stories to anyone else's server.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/PASTE%2520YOUR%2520SCREENSHOT%2520HERE" 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/PASTE%2520YOUR%2520SCREENSHOT%2520HERE" alt="The remembrance page Ofrenda generated from a fictional sample story" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Code:&lt;/strong&gt; &lt;a href="https://github.com/ShaikhAtifa/Ofrenda-ghost_in_laptop" rel="noopener noreferrer"&gt;https://github.com/ShaikhAtifa/Ofrenda-ghost_in_laptop&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;The demo uses &lt;code&gt;sample_story.txt&lt;/code&gt;, a fictional story, so no real family recording is published.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To try it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
ollama pull gemma4:e2b
python ofrenda.py sample_story.txt &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="s2"&gt;"Abuela Lupe"&lt;/span&gt; &lt;span class="nt"&gt;--model&lt;/span&gt; gemma4:e2b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then open &lt;code&gt;ofrenda.html&lt;/code&gt; in a browser. &lt;code&gt;python ofrenda.py --demo&lt;/code&gt; renders a sample page without any model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Open Mattered Here
&lt;/h2&gt;

&lt;p&gt;A recording of a grandmother telling stories is about as private as data gets. It carries her voice, her words and her family's names. With a closed cloud service, using a tool like this means uploading all of that to a server I do not control, under terms I will probably never read.&lt;/p&gt;

&lt;p&gt;Because the whole pipeline is open, none of that happens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The data stays on the laptop.&lt;/strong&gt; Whisper and Gemma both run locally. After the models are downloaded, it works with the Wi-Fi off.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It costs nothing per use.&lt;/strong&gt; There is no per-minute transcription bill and no token bill, which matters for something a family might run again every November.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I can change it.&lt;/strong&gt; The extraction rules live in one prompt. I can make the model stricter, ask for different sections, or swap in another model with a single &lt;code&gt;--model&lt;/code&gt; flag.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The trade-off is real: a small local model is less capable than a large hosted one, and on a CPU it is slower. For this job I decided privacy mattered more than speed.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Transcribe.&lt;/strong&gt; &lt;code&gt;faster-whisper&lt;/code&gt; (the &lt;code&gt;small&lt;/code&gt; model, int8, on the CPU) turns audio into text. Text files skip this step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extract.&lt;/strong&gt; Gemma, running through Ollama, receives the transcript and a strict prompt: use only what was said, never invent names, dates or events, and answer as JSON with a short dedication, foods, songs, sayings and stories.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Render.&lt;/strong&gt; The JSON is HTML-escaped and poured into one static page with a flickering candle and marigold colours. I escape everything because the text comes from a model.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The transcript is saved next to the output, so anyone can check the page against what was actually said.&lt;/p&gt;

&lt;h2&gt;
  
  
  Known Limits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A small model can still get details wrong.&lt;/strong&gt; That is why the prompt forbids invention and why the transcript is saved beside the page. A family should always read the two side by side.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speech recognition varies.&lt;/strong&gt; Whisper handles Spanish and many other languages, but accents, background noise and mixed-language speech can cause mistakes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It is slower on a CPU.&lt;/strong&gt; A GPU makes it much faster, but I wanted it to run on an ordinary laptop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long recordings are cut&lt;/strong&gt; to the first 6,000 words.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  My Run
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; gemma4:e2b &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time to produce the page:&lt;/strong&gt; 40 seconds&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I Would Do Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Let the page include a photo and print cleanly as an ofrenda card.&lt;/li&gt;
&lt;li&gt;Better handling of mixed Spanish and English recordings.&lt;/li&gt;
&lt;li&gt;A check mode that shows which sentence in the transcript each detail came from, so a family can trust the result more.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; Gemma, through Ollama, does the extraction and writes the dedication, running entirely on a local machine.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Please only use recordings with the speaker's consent. Día de los Muertos is a living tradition, and I built this to honour it, not to decorate it.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Bird Quest:Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass</title>
      <dc:creator>Atifa Azizuddin</dc:creator>
      <pubDate>Sun, 11 Oct 2026 17:24:41 +0000</pubDate>
      <link>https://dev.to/developer_3ff119cc8f65f5f/bird-questhacktoberfest-open-source-ai-challenge-week-1-touch-grass-64f</link>
      <guid>https://dev.to/developer_3ff119cc8f65f5f/bird-questhacktoberfest-open-source-ai-challenge-week-1-touch-grass-64f</guid>
      <description>&lt;p&gt;Bird Quest is a weekly bird mission that you can only finish by going outside. It runs on open-source AI, on your own laptop, with no internet.&lt;/p&gt;

&lt;p&gt;Every week it gives you one small mission, like "Find 5 different birds by sound" or "Record a bird before 8 AM". You go outside and record bird sounds with any phone. Then:&lt;/p&gt;

&lt;p&gt;BirdNET (open-source bird-sound AI) names the birds it hears and says how sure it is.&lt;br&gt;
A small local language model writes a 2-sentence field note for each bird: one fact, and one tip to recognise it next time.&lt;br&gt;
Birds the AI is sure about tick off squares on a 3x3 bingo card and count toward the mission.&lt;/p&gt;

&lt;p&gt;The mission and the card cannot be completed from the sofa. The only way to make progress is to walk out and listen. The screen is only used for a few seconds at the end, and on Windows --speak can read the field note aloud, so the phone can stay in your pocket.&lt;/p&gt;

&lt;p&gt;It is for beginners who like birds but find it hard to leave the house on a normal weekday.&lt;br&gt;
Code:&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/ShaikhAtifa" rel="noopener noreferrer"&gt;
        ShaikhAtifa
      &lt;/a&gt; / &lt;a href="https://github.com/ShaikhAtifa/Bird-Quest" rel="noopener noreferrer"&gt;
        Bird-Quest
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Bird Quest is a weekly bird mission that you can only finish by going outside. It runs on open-source AI, on your own laptop, with no internet.
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;Bird Quest does not contain any AI of its own. It is the glue between two open tools:&lt;/p&gt;

&lt;p&gt;Part    Role    Licence&lt;br&gt;
BirdNET-Analyzer&lt;br&gt;&lt;br&gt;
Identifies birds from audio &lt;br&gt;
Code: MIT. Models: CC BY-NC-SA 4.0&lt;br&gt;
Ollama + Qwen2.5 1.5B   Runs the small model that writes the notes, locally Qwen2.5 1.5B: Apache 2.0&lt;/p&gt;

&lt;p&gt;My code is plain Python with no extra libraries, and it is MIT licensed. The flow is simple: Bird Quest starts BirdNET as a command, reads the CSV file it writes, keeps the best result per species, and sends the bird name to Ollama on localhost. Missions, the bingo card, and the sightings log are small Python files and one CSV file.&lt;/p&gt;

&lt;p&gt;Three design choices I made on purpose:&lt;/p&gt;

&lt;p&gt;Honest uncertainty. Birds under 50% confidence are shown as "maybe" and do not count. A tool that gets people outside should not reward wrong answers.&lt;br&gt;
A walk is a day you recorded. If you hear nothing, it still counts, because going out is the point.&lt;br&gt;
Everything degrades gracefully. If Ollama is not running, Bird Quest still works and marks the note "[no AI]".&lt;/p&gt;

&lt;p&gt;What I learned while building it:&lt;/p&gt;

&lt;p&gt;I read BirdNET's source code to find the exact columns of its result file, instead of guessing. That is one real benefit of open source.&lt;br&gt;
BirdNET needs the internet once, to download its model on the first run. I added a warmup command and a check command so a user finds this out at home, not on the trail.&lt;br&gt;
I wrote 26 automated tests. They use fake BirdNET and Ollama answers, so they check my logic, not bird-detection quality. That is what the field test is for.&lt;/p&gt;

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

&lt;p&gt;Three things Bird Quest does would not work with a closed API:&lt;/p&gt;

&lt;p&gt;It works with no signal. Parks and hills often have poor reception. Both models run on the laptop, so the tool works on the trail.&lt;br&gt;
Your location stays with you. BirdNET uses latitude, longitude, and the week of the year to hide birds that do not live near you. With a hosted service, my walking habits would go to a company. Here nothing leaves the laptop.&lt;br&gt;
Anyone can run it. There is no account, no API key, and no bill, so a student can use it too.&lt;/p&gt;

&lt;p&gt;Open source also let me check how the tool really works instead of trusting a guess, and the open licences tell me exactly what I may do. BirdNET's models are non-commercial, so Bird Quest is a non-commercial project, and I say so openly.&lt;/p&gt;

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