<?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: Daniel Chege</title>
    <description>The latest articles on DEV Community by Daniel Chege (@blews).</description>
    <link>https://dev.to/blews</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%2F2390863%2F64297842-3bd8-4d39-b386-2e299cab5ed3.png</url>
      <title>DEV Community: Daniel Chege</title>
      <link>https://dev.to/blews</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/blews"/>
    <language>en</language>
    <item>
      <title>EcoSound: Using Open-Source AI to Get People Outside and Exploring Nature 🌿</title>
      <dc:creator>Daniel Chege</dc:creator>
      <pubDate>Mon, 12 Oct 2026 02:24:05 +0000</pubDate>
      <link>https://dev.to/blews/ecosound-using-open-source-ai-to-get-people-outside-and-exploring-nature-2m0h</link>
      <guid>https://dev.to/blews/ecosound-using-open-source-ai-to-get-people-outside-and-exploring-nature-2m0h</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;What if we used AI to get people off their screens instead of keeping them glued to them?&lt;/p&gt;

&lt;p&gt;That question inspired me to build EcoSound, an open-source, AI-powered application that turns ordinary outdoor experiences into opportunities to discover wildlife.&lt;/p&gt;

&lt;p&gt;We're surrounded by nature, but how often do we actually stop to notice it? You might hear a bird singing outside your window, while walking through a park, or on your way to work, without knowing what it is.&lt;/p&gt;

&lt;p&gt;EcoSound makes those small moments of curiosity more meaningful.&lt;/p&gt;

&lt;p&gt;Instead of endlessly scrolling, users can step outside, listen to their surroundings, identify possible bird species, learn about wildlife, and take part in outdoor challenges.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://ecosound-web.onrender.com/" rel="noopener noreferrer"&gt;https://ecosound-web.onrender.com/&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/Daniel-1600/hactoberfest-week-1" rel="noopener noreferrer"&gt;https://github.com/Daniel-1600/hactoberfest-week-1&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;I wanted open-source AI to be central to EcoSound, rather than simply adding an AI chatbot to an otherwise unrelated application.&lt;/p&gt;

&lt;p&gt;To achieve that, I integrated two complementary AI models.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;BirdNET 3.0 — Understanding wildlife sounds&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;BirdNET is an open-source acoustic machine learning system for bird identification.&lt;/p&gt;

&lt;p&gt;Users record or upload audio. The Go backend processes the recording and forwards it to BirdNET for inference.&lt;/p&gt;

&lt;p&gt;BirdNET returns candidate species, model scores, and the portions of the recording where calls were detected.&lt;/p&gt;

&lt;p&gt;I deployed BirdNET on Modal using CPU inference, avoiding the need to run the model on users' devices.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Qwen3 1.7B — Turning discoveries into learning experiences&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Identifying a bird is useful, but I wanted EcoSound to do more than return a species name.&lt;/p&gt;

&lt;p&gt;I integrated Qwen3 1.7B, an open-weight language model, to provide educational explanations and outdoor activity recommendations.&lt;/p&gt;

&lt;p&gt;Before generation, the backend retrieves curated species information, including habitat, diet, ecological role, conservation references, and ethical observation guidance.&lt;/p&gt;

&lt;p&gt;That information is passed to Qwen so its response can be grounded in the available species record.&lt;/p&gt;

&lt;p&gt;The backend validates the generated JSON and requires exactly three outdoor activities.&lt;/p&gt;

&lt;p&gt;Qwen runs on a Modal GPU, independently of BirdNET.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Building the application&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;My technology stack:&lt;/p&gt;

&lt;p&gt;Frontend :Next.js, React, TypeScript&lt;/p&gt;

&lt;p&gt;Backend :Go&lt;/p&gt;

&lt;p&gt;Database :SQLite&lt;/p&gt;

&lt;p&gt;Bird identification : BirdNET 3.0&lt;/p&gt;

&lt;p&gt;Nature explanations : Qwen3 1.7B&lt;/p&gt;

&lt;p&gt;Model hosting : Modal&lt;/p&gt;

&lt;p&gt;Web hosting : Render&lt;/p&gt;

&lt;p&gt;Maps : MapLibre GL JS&lt;/p&gt;

&lt;p&gt;Offline capabilities : PWA, IndexedDB, service worker&lt;/p&gt;

&lt;p&gt;The Go backend connects the user-facing application to both AI services, manages stored discoveries, and handles validation and error responses.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Challenges I encountered&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One of the biggest challenges was getting reliable inference from the cloud-hosted models.&lt;/p&gt;

&lt;p&gt;Qwen initially returned authentication errors because the Modal proxy credentials were incorrect.&lt;/p&gt;

&lt;p&gt;After resolving authentication, requests still failed during model cold starts. A direct request eventually returned HTTP 200 after approximately 185 seconds, including an HTTP 303 redirect.&lt;/p&gt;

&lt;p&gt;I updated the Go client to handle Modal redirects safely and extended the request timeouts.&lt;/p&gt;

&lt;p&gt;Another issue appeared when Qwen returned an explanation that failed the backend's JSON and content validation.&lt;/p&gt;

&lt;p&gt;I refined the generation instructions, added controlled validation logging and retry handling, and expanded the tests.&lt;/p&gt;

&lt;p&gt;Eventually, the complete pipeline returned HTTP 200, with the predicted species, curated wildlife information, an AI-generated explanation, and three outdoor activities.&lt;/p&gt;

&lt;p&gt;This was an important lesson: deploying a model is only part of building an AI application. Handling cold starts, unreliable responses, validation, and model uncertainty is equally important.&lt;/p&gt;

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

&lt;p&gt;EcoSound would have been much harder to build as an independent project without accessible open-source AI.&lt;/p&gt;

&lt;p&gt;First, open models give developers control.&lt;/p&gt;

&lt;p&gt;I can inspect how BirdNET is integrated, build my own inference service, and choose where to run the model. With Qwen, I can control the prompts, generation settings, and validation behavior.&lt;/p&gt;

&lt;p&gt;Second, open models make experimentation more accessible.&lt;/p&gt;

&lt;p&gt;Instead of being tied entirely to proprietary AI APIs, I can deploy models on infrastructure I choose, compare inference options, and adapt the system as my requirements change.&lt;/p&gt;

&lt;p&gt;Third, open innovation encourages reusable solutions.&lt;/p&gt;

&lt;p&gt;EcoSound combines existing research and open technologies into a new experience focused on biodiversity discovery and outdoor exploration.&lt;/p&gt;

&lt;p&gt;I didn't need to train a bird identification model or a language model from scratch. I could build on the work of open-source communities and focus on solving the user-facing problem.&lt;/p&gt;

&lt;p&gt;That doesn't mean every component is free to run or that every model has identical licensing terms. EcoSound's application code is MIT-licensed, Qwen3 1.7B uses Apache 2.0, and BirdNET's model weights have separate noncommercial licensing restrictions.&lt;/p&gt;

&lt;p&gt;For me, that's what makes open innovation exciting: it allows independent developers to turn existing research into useful experiences that might otherwise be out of reach.&lt;/p&gt;

&lt;p&gt;And sometimes, the best use of AI isn't keeping us online.&lt;/p&gt;

&lt;p&gt;It's helping us appreciate what's happening outside.&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;Best Use of Render&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I deployed the EcoSound web application using Render, making the project accessible through a public URL without requiring judges to install the application locally.&lt;/p&gt;

&lt;p&gt;Render serves as the public entry point to an application powered by open-source AI models hosted independently on Modal.&lt;/p&gt;

&lt;p&gt;Live application: &lt;a href="https://ecosound-web.onrender.com/" rel="noopener noreferrer"&gt;https://ecosound-web.onrender.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;EcoSound — Go Outside. Listen. Discover. 🌿&lt;/p&gt;

&lt;p&gt;Instead of building another application designed to capture more screen time, I wanted to build something that makes the real world a little more interesting.&lt;/p&gt;

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