<?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: NIRAJ THAPA</title>
    <description>The latest articles on DEV Community by NIRAJ THAPA (@nirajthapawork).</description>
    <link>https://dev.to/nirajthapawork</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%2F4163076%2F9a67d1e1-314b-4241-8a2a-768b5d79cfb0.png</url>
      <title>DEV Community: NIRAJ THAPA</title>
      <link>https://dev.to/nirajthapawork</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nirajthapawork"/>
    <language>en</language>
    <item>
      <title># Marigold: A Quiet Ofrenda for the Ghost in the Machine</title>
      <dc:creator>NIRAJ THAPA</dc:creator>
      <pubDate>Sun, 01 Nov 2026 13:10:41 +0000</pubDate>
      <link>https://dev.to/nirajthapawork/-marigold-a-quiet-ofrenda-for-the-ghost-in-the-machine-1060</link>
      <guid>https://dev.to/nirajthapawork/-marigold-a-quiet-ofrenda-for-the-ghost-in-the-machine-1060</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Marigold is a private, local-first digital ofrenda: a small place to collect the details, stories, and qualities that help keep someone close.&lt;/p&gt;

&lt;p&gt;The “ghost” here is not an AI pretending to speak for someone who has died. It is the way memory lingers in ordinary details. Marigold lets you write those details yourself, or—if you choose—ask a local model for help getting past a blank page.&lt;/p&gt;

&lt;p&gt;You can save, edit, and delete remembrances in your browser, and export or import a JSON backup. When you press &lt;strong&gt;Help me find the words&lt;/strong&gt;, Marigold sends the fields you entered to an Ollama model running on your own computer. The result is a short, editable suggestion. The app reminds you to check it, because a local model can still invent details.&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%2F0suxszvbwx1p1cksiu0h.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%2F0suxszvbwx1p1cksiu0h.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;There is no hosted demo yet; Marigold runs locally. Install &lt;a href="https://ollama.com/download" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt;, download the default model, start Ollama, and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 server.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Then open &lt;a href="http://127.0.0.1:8000" rel="noopener noreferrer"&gt;http://127.0.0.1:8000&lt;/a&gt;. The full setup is in the repository README.&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/Nirajkam" rel="noopener noreferrer"&gt;
        Nirajkam
      &lt;/a&gt; / &lt;a href="https://github.com/Nirajkam/lastweek_octuber" rel="noopener noreferrer"&gt;
        lastweek_octuber
      &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;Marigold&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;A private, local-first digital ofrenda for gathering memories and shaping them into an editable remembrance. Marigold uses a locally running Ollama model for drafting; it does not send stories to a hosted AI service.&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;ul&gt;
&lt;li&gt;Keeps saved remembrances in this browser's local storage.&lt;/li&gt;
&lt;li&gt;Uses an open-weight model through Ollama on your computer to help write a first draft.&lt;/li&gt;
&lt;li&gt;Lets you edit, delete, export, and import your memories.&lt;/li&gt;
&lt;li&gt;Makes no analytics or third-party network requests.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The local model only receives the fields you enter when you choose &lt;strong&gt;Help me find the words&lt;/strong&gt;. The app does not contact the model until you press that button.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install &lt;a href="https://ollama.com/download" rel="nofollow noopener noreferrer"&gt;Ollama&lt;/a&gt; and download a model once:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;ollama pull qwen2.5:3b&lt;/pre&gt;

&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Start Ollama if it is not already running.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;From this folder, start the app:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;python3 server.py&lt;/pre&gt;

&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open &lt;a href="http://127.0.0.1:8000" rel="nofollow noopener noreferrer"&gt;http://127.0.0.1:8000&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The first model download needs internet. After it is downloaded, the app…&lt;/p&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/Nirajkam/lastweek_octuber" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;The project is released under the MIT License.&lt;/p&gt;

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

&lt;p&gt;The interface is plain HTML, CSS, and JavaScript. A small Python standard-library server serves the app and provides two local endpoints: one to discover installed Ollama models and one to request a draft. Remembrances stay in browser &lt;code&gt;localStorage&lt;/code&gt;; the model is contacted only after the person asks for a draft.&lt;/p&gt;

&lt;p&gt;The README uses &lt;code&gt;qwen2.5:3b&lt;/code&gt; as the suggested Ollama model. Marigold prefers it when installed and otherwise lets you select another installed model. No hosted AI API or analytics service is part of the app.&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%2Fu9emeaw6utippf1sey8y.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%2Fu9emeaw6utippf1sey8y.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Open-weight models and a local runtime make privacy a practical choice, not just a promise from a hosted service. There is no API key or remote inference provider between a person and their remembrance. Once the model is downloaded, the app can be used offline.&lt;/p&gt;

&lt;p&gt;The small codebase is also inspectable and adaptable: people can see what text is sent to the model, change the prompt, or choose another model that works with Ollama.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Spirit of It
&lt;/h2&gt;

&lt;p&gt;I wanted the AI to have a deliberately modest role. It can help someone find a first sentence, but it should not impersonate a loved one, claim to know them, or turn missing details into plausible-sounding facts. The person remembers; the model offers a draft; the person decides what is true enough to keep.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title># SlothSort: a local-first file organizer for people who would rather not sort files</title>
      <dc:creator>NIRAJ THAPA</dc:creator>
      <pubDate>Sun, 25 Oct 2026 10:16:28 +0000</pubDate>
      <link>https://dev.to/nirajthapawork/-slothsort-a-local-first-file-organizer-for-people-who-would-rather-not-sort-files-4dni</link>
      <guid>https://dev.to/nirajthapawork/-slothsort-a-local-first-file-organizer-for-people-who-would-rather-not-sort-files-4dni</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/a&gt;.&lt;/em&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%2Fraw.githubusercontent.com%2FNirajkam%2Fweek3%2Fmain%2Fsubmission%2Fweek3-cover.svg" 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%2Fraw.githubusercontent.com%2FNirajkam%2Fweek3%2Fmain%2Fsubmission%2Fweek3-cover.svg" alt="SlothSort cover image" width="1200" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;My Downloads folder tends to collect files faster than I feel like organizing them. SlothSort is a small Python command-line tool that sorts files into folders such as Documents, Images, Videos, Audio, Code, and Archives.&lt;/p&gt;

&lt;p&gt;Point it at a folder to preview a cleanup or organize the files in one pass. It can also watch a folder and sort new files after they finish downloading. It skips hidden and temporary files, avoids overwriting duplicate names, and never opens file contents.&lt;/p&gt;

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

&lt;p&gt;SlothSort is a local command-line app, not a hosted web page. Try it from a terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python main.py ~/Downloads &lt;span class="nt"&gt;--dry-run&lt;/span&gt;
python main.py ~/Downloads &lt;span class="nt"&gt;--once&lt;/span&gt;
python main.py ~/Downloads &lt;span class="nt"&gt;--watch&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first command previews proposed moves without changing files. The second organizes the folder once; the third watches for new files. Ollama is optional: when it is unavailable, SlothSort falls back to filename and extension rules.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/Nirajkam/week3" rel="noopener noreferrer"&gt;View the SlothSort source on GitHub&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;SlothSort is written in Python. It sends a filename (not file contents) to a local Ollama server for classification, using &lt;code&gt;gemma3:4b&lt;/code&gt; by default. If Ollama is unavailable or does not return a recognized category, filename and extension rules provide a fallback.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Folder watcher or one-time scan
             |
             v
 Filename-only classification
       /             \
 local Ollama     filename rules
       \             /
             v
   preview or move file
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The local model call is made to &lt;code&gt;http://localhost:11434&lt;/code&gt;; there is no hosted AI API in the app. The dry-run option makes it possible to inspect planned destinations before moving anything.&lt;/p&gt;

&lt;p&gt;To set up the project, install the Python dependencies with &lt;code&gt;pip install -r requirements.txt&lt;/code&gt;. For local model classification, install Ollama and run &lt;code&gt;ollama pull gemma3:4b&lt;/code&gt;; otherwise the built-in rules still work.&lt;/p&gt;

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

&lt;p&gt;Open-weight models and local inference make this kind of utility practical without sending filenames to a hosted AI service. I can run the organizer on my own machine, inspect how it classifies files, and keep the fallback behavior useful even when the model is not running.&lt;/p&gt;

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

&lt;p&gt;I do not have a shareable agent-session link to include.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Lazy Payoff
&lt;/h2&gt;

&lt;p&gt;Instead of manually making folders and dragging each file into place, I can preview or run one command. I have not measured a time-saved figure yet, so I will not claim a number.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Pocket Ledger: Turn a Shoebox of Receipts into a Tax-Ready CSV, Offline with Ollama</title>
      <dc:creator>NIRAJ THAPA</dc:creator>
      <pubDate>Sun, 18 Oct 2026 02:15:44 +0000</pubDate>
      <link>https://dev.to/nirajthapawork/pocket-ledger-turn-a-shoebox-of-receipts-into-a-tax-ready-csv-offline-with-ollama-46o0</link>
      <guid>https://dev.to/nirajthapawork/pocket-ledger-turn-a-shoebox-of-receipts-into-a-tax-ready-csv-offline-with-ollama-46o0</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Pocket Ledger is an offline-first receipt and invoice sorter built for freelancers, contractors, and small teams who want a faster way to organize financial paperwork without sacrificing privacy.&lt;/p&gt;

&lt;p&gt;The app lets users upload PDFs or images of receipts, extracts key details like vendor, date, amount, currency, and category using an AI model, and then automatically copies the files into organized folders. It also generates an editable CSV for bookkeeping and tax prep.&lt;/p&gt;

&lt;p&gt;This solves a real pain point: manually sorting receipts is tedious, error-prone, and time-consuming. Pocket Ledger turns that workflow into a simple “upload → review → export” process while keeping the experience local-first and flexible.&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%2Frnp0ry14hwh8vlv7ofxq.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%2Frnp0ry14hwh8vlv7ofxq.png" alt=" " width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I built the app locally and ran it in development with Streamlit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Local demo: &lt;a href="https://youtube.com/shorts/TDSnhUZL1Lk" rel="noopener noreferrer"&gt;https://youtube.com/shorts/TDSnhUZL1Lk&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Repo: &lt;a href="https://github.com/Nirajkam/Week2challageof_hackoctoberfest2026" rel="noopener noreferrer"&gt;https://github.com/Nirajkam/Week2challageof_hackoctoberfest2026&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A quick walkthrough:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Upload PDF or image receipts&lt;/li&gt;
&lt;li&gt;Choose a local Ollama model or a cloud provider&lt;/li&gt;
&lt;li&gt;Let the app extract structured fields&lt;/li&gt;
&lt;li&gt;Review the generated entries&lt;/li&gt;
&lt;li&gt;Export organized files and CSV data&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;GitHub: &lt;a href="https://github.com/Nirajkam/Week2challageof_hackoctoberfest2026" rel="noopener noreferrer"&gt;https://github.com/Nirajkam/Week2challageof_hackoctoberfest2026&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;I built Pocket Ledger with Python and Streamlit, using an open-source-first AI workflow.&lt;/p&gt;

&lt;p&gt;The app supports multiple LLM providers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ollama (local/offline)&lt;/li&gt;
&lt;li&gt;OpenAI&lt;/li&gt;
&lt;li&gt;Google Gemini&lt;/li&gt;
&lt;li&gt;Anthropic Claude&lt;/li&gt;
&lt;li&gt;Groq&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For local use, the project works with Ollama models such as &lt;code&gt;gemma3:4b&lt;/code&gt;, &lt;code&gt;llava&lt;/code&gt;, and &lt;code&gt;moondream&lt;/code&gt;, so sensitive documents can stay on the user’s machine. For cloud use, users can plug in a provider and API key.&lt;/p&gt;

&lt;p&gt;The backend does a few things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reads image/PDF input&lt;/li&gt;
&lt;li&gt;Extracts text from PDFs using PyMuPDF when needed&lt;/li&gt;
&lt;li&gt;Sends the document to the chosen model with a strict JSON schema prompt&lt;/li&gt;
&lt;li&gt;Validates the returned data&lt;/li&gt;
&lt;li&gt;Organizes files into category/year folders without overwriting duplicates&lt;/li&gt;
&lt;li&gt;Writes a CSV for review and export&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This keeps the system modular and model-agnostic, which makes it easy to swap providers without changing the app workflow.&lt;/p&gt;

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

&lt;p&gt;Open innovation matters here because financial documents are sensitive, and not everyone wants to send personal or business data to a third-party service.&lt;/p&gt;

&lt;p&gt;Using open-source models through Ollama and flexible provider support makes the app:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;private by default&lt;/li&gt;
&lt;li&gt;local-first when needed&lt;/li&gt;
&lt;li&gt;accessible to people without a fixed vendor lock-in&lt;/li&gt;
&lt;li&gt;easier to adapt for different budgets and use cases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A closed API-only approach would have forced users to trust a single provider and often required uploading receipts to the cloud. Open-source models and local inference make it possible to build something more privacy-conscious and more accessible to everyday freelancers and small businesses.&lt;/p&gt;

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

&lt;p&gt;I’m documenting the build process and session history while refining the project, and I plan to save the final agent session alongside the project notes for transparency and reproducibility.&lt;/p&gt;

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

&lt;p&gt;Hacktoberfest Open-Source AI Challenge — Week 2: Side Hustle&lt;/p&gt;

&lt;p&gt;This project fits the “side hustle” spirit by turning a practical daily pain point into a useful, open-source AI workflow that can be extended by others.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Outside: a private streak app that listens to your walk with open-source AI</title>
      <dc:creator>NIRAJ THAPA</dc:creator>
      <pubDate>Thu, 08 Oct 2026 11:36:35 +0000</pubDate>
      <link>https://dev.to/nirajthapawork/outside-a-private-streak-app-that-listens-to-your-walk-with-open-source-ai-19g9</link>
      <guid>https://dev.to/nirajthapawork/outside-a-private-streak-app-that-listens-to-your-walk-with-open-source-ai-19g9</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;Outside is a small, private Android app that gets me off the screen and into the world. I tap "I'm outside", put the phone in my pocket, and walk. While I'm out, the app listens to the sounds around me and writes them into a journal, so a walk becomes "Birds, water, wind" instead of just "20 minutes."&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Streak with rest days:&lt;/strong&gt; an animated flame counts consecutive days outside. You earn one rest day for every 7 days outside, so one missed day doesn't wipe out your streak.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic sound journal:&lt;/strong&gt; it labels sounds in 5-second windows (birds, wind and leaves, water, traffic, voices, animals, bells, footsteps) and saves only the labels.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Approximate step count&lt;/strong&gt; from the phone's motion sensor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time-of-day sky:&lt;/strong&gt; the header changes from dawn to night with the clock.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Journal as text:&lt;/strong&gt; any walk can be exported as plain text that I own.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is for anyone who wants a gentle reason to go outside. It is deliberately not social: no account, no feed, no photo posting, no server. The screen is only used for a few seconds at the start and end of a walk.&lt;/p&gt;

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


&lt;div&gt;
    &lt;iframe src="https://www.youtube.com/embed/RAO2uZn-STQ" width="315" height="560"&gt;
    &lt;/iframe&gt;
  &lt;/div&gt;
&lt;br&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%2F05me7g4trpd852ijy4b3.jpeg" alt=" " width="720" height="1600"&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%2F8zogzdnzsnarrgkgtdts.jpeg" 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%2F8zogzdnzsnarrgkgtdts.jpeg" alt=" " width="800" height="1285"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/Nirajkam/outsideapp_week1challage_hacktoberfest" rel="noopener noreferrer"&gt;https://github.com/Nirajkam/outsideapp_week1challage_hacktoberfest&lt;/a&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Open-weight model:&lt;/strong&gt; &lt;a href="https://github.com/tensorflow/models/tree/master/research/audioset/yamnet" rel="noopener noreferrer"&gt;YAMNet&lt;/a&gt; by Google (Apache 2.0), which recognizes 521 sound classes. It runs fully on the phone through TensorFlow.js, with the model files bundled inside the app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;App:&lt;/strong&gt; plain HTML, CSS, and JavaScript, wrapped as an Android app with Capacitor. Everything is stored in local storage on the device.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Turning raw classes into a journal:&lt;/strong&gt; I grouped the 521 classes into 8 friendly categories. Steady sounds (water, wind, traffic) are scored by their average over a window, and short sounds like birdsong by their peak.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Listening loop:&lt;/strong&gt; it starts when a walk starts and stops when it ends. It keeps the screen awake so the microphone keeps working, and classifies 5-second windows in memory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Debug view:&lt;/strong&gt; the app shows the model's top 3 raw guesses on screen, which made tuning much easier.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I Learned From Testing
&lt;/h2&gt;

&lt;p&gt;I tested by playing sounds near the microphone. Speech was picked up and labeled as "Voices". My first waterfall test was not detected at all. The model's raw classes for running water were missing from my "water" group, and my detection threshold was too high for a steady sound. I added more water-related classes (rain on surface, waves, gush, spray), lowered the water threshold, and switched steady sounds to window averages.&lt;/p&gt;

&lt;p&gt;Limits I want to be upfront about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It labels sound &lt;em&gt;types&lt;/em&gt;, not species. It says "Birds", not "robin".&lt;/li&gt;
&lt;li&gt;It only listens while the app is open and the screen is on, which costs battery.&lt;/li&gt;
&lt;li&gt;Steps are an estimate from the accelerometer, not a real pedometer.&lt;/li&gt;
&lt;li&gt;Android only for now.&lt;/li&gt;
&lt;/ul&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; microphone audio never leaves the phone. It's classified in memory for a few seconds and then discarded, and only the labels are saved. With a closed cloud audio API, recordings of my walks would go to someone else's server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It works with no signal:&lt;/strong&gt; the model ships inside the app, so it can work on a trail with no coverage, which is where an outdoor app is most useful.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free to run:&lt;/strong&gt; no API keys, no per-request cost, no subscription.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I could change it:&lt;/strong&gt; the model is a plain TensorFlow.js file and the category mapping is a JSON file. When water detection failed, I fixed it by editing the mapping and thresholds, which I couldn't have done with a closed black-box API.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;This project uses YAMNet, not Gemma, so I'm not entering Best Use of Gemma. I'm entering the overall prize.&lt;/p&gt;

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