<?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: Sumit Das</title>
    <description>The latest articles on DEV Community by Sumit Das (@codebysumit).</description>
    <link>https://dev.to/codebysumit</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%2F4151399%2F457c55da-c811-46fc-a54c-87d23ed63929.png</url>
      <title>DEV Community: Sumit Das</title>
      <link>https://dev.to/codebysumit</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/codebysumit"/>
    <language>en</language>
    <item>
      <title>Puja Altas: An Open Map for Durga Puja Hopping</title>
      <dc:creator>Sumit Das</dc:creator>
      <pubDate>Fri, 16 Oct 2026 05:57:57 +0000</pubDate>
      <link>https://dev.to/codebysumit/puja-altas-an-open-map-for-durga-puja-hopping-419o</link>
      <guid>https://dev.to/codebysumit/puja-altas-an-open-map-for-durga-puja-hopping-419o</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;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Pujo Atlas is a browser-based map and itinerary planner for finding Durga Puja pandals in Kolkata and across West Bengal. It brings together a Kolkata puja guide and a government puja directory, with a combined view for exploring both datasets.&lt;/p&gt;

&lt;p&gt;Visitors can search by pandal, locality, place name, coordinates, or DIGIPIN; browse nearby results on a clustered map; and save pandals to a separate hopping list to plan a route. The goal is to make it easier for residents and visitors to discover pandals and plan a day of hopping without switching between spreadsheets, map searches, and handwritten lists.&lt;/p&gt;

&lt;p&gt;The app is currently a free community-facing project. It has no paying users or revenue yet.&lt;/p&gt;

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

&lt;p&gt;The Pujo Atlas Demo on GitHub Page:&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://codebysumit.github.io/pujo-atlas/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;codebysumit.github.io&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&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/codebysumit" rel="noopener noreferrer"&gt;
        codebysumit
      &lt;/a&gt; / &lt;a href="https://github.com/codebysumit/pujo-atlas" rel="noopener noreferrer"&gt;
        pujo-atlas
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Pujo Atlas is a static, browser-based map and itinerary planner for Durga Puja pandals in Kolkata and West Bengal.
    &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;Pujo Atlas&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Pujo Atlas is a static, browser-based map and itinerary planner for Durga Puja pandals in Kolkata and West Bengal
&lt;a rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/87431704/675459018-3e1c3869-f205-4405-ac99-bbc585739a83.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3OTIxMzA1NzcsIm5iZiI6MTc5MjEzMDI3NywicGF0aCI6Ii84NzQzMTcwNC82NzU0NTkwMTgtM2UxYzM4NjktZjIwNS00NDA1LWFjOTktYmJjNTg1NzM5YTgzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjEwMTYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYxMDE2VDA1NTc1N1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTljMGVhYmIxNWJkODc3MGE3YzMxZWM3ZDA3MmE3NTBhMWUzNDlkYjAwODM0M2I3MzUzZTNjMzVkYTUxZTJkZDImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.KXfHDgS_XIdFaZjg7hiOc6lg38pFEG3EQxbtjTuMdLE"&gt;&lt;img width="1907" height="921" alt="Screenshot 2026-10-16 104931" 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%2F87431704%2F675459018-3e1c3869-f205-4405-ac99-bbc585739a83.png%3Fjwt%3DeyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3OTIxMzA1NzcsIm5iZiI6MTc5MjEzMDI3NywicGF0aCI6Ii84NzQzMTcwNC82NzU0NTkwMTgtM2UxYzM4NjktZjIwNS00NDA1LWFjOTktYmJjNTg1NzM5YTgzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjEwMTYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYxMDE2VDA1NTc1N1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTljMGVhYmIxNWJkODc3MGE3YzMxZWM3ZDA3MmE3NTBhMWUzNDlkYjAwODM0M2I3MzUzZTNjMzVkYTUxZTJkZDImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.KXfHDgS_XIdFaZjg7hiOc6lg38pFEG3EQxbtjTuMdLE" class="js-gh-image-fallback"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Run locally&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The app fetches its JSON data, so serve this folder over HTTP instead of opening &lt;code&gt;index.html&lt;/code&gt; directly. From the project folder, run:&lt;/p&gt;
&lt;div class="highlight highlight-source-powershell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;python &lt;span class="pl-k"&gt;-&lt;/span&gt;m http.server &lt;span class="pl-c1"&gt;8000&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Then open &lt;a href="http://localhost:8000" rel="nofollow noopener noreferrer"&gt;http://localhost:8000&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;OpenStreetMap is the default map and works without an API key. The government directory is loaded on demand and is about 12 MB. Records outside the supported West Bengal map bounds are omitted from the map.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Datasets and privacy&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;The JSON files used by the app are in &lt;code&gt;data/&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;pujo_atlas_plan_city.json&lt;/code&gt; contains the Kolkata Puja Guide records. Its zone labels use the &lt;code&gt;Kolkata Puja&lt;/code&gt; prefix, such as &lt;code&gt;Kolkata Puja North&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pujo_atlas_plan_government.json&lt;/code&gt; contains the government directory. President names and contact numbers have been removed from the records.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The app does not show or search government-directory president…&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/codebysumit/pujo-atlas" 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;Pujo Atlas is a static web app built with HTML, CSS, and vanilla JavaScript. Leaflet renders the OpenStreetMap view, and Supercluster groups dense sets of pandal markers. The app loads local JSON datasets, filters and sorts results in the browser, and stores hopping lists in browser storage.&lt;/p&gt;

&lt;p&gt;The location search accepts place names, latitude/longitude, and DIGIPIN codes. Place suggestions use Photon with OpenStreetMap data; coordinates and DIGIPIN can be resolved locally. A searched location can show nearby pandals within 15 km. An optional Google Maps provider is available when configured with a browser-restricted API key.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open-source AI disclosure:&lt;/strong&gt; This version does not use an open-weight model, an open-source AI agent framework, or local inference. Open-source AI is not currently at the core of this project, so this draft does not yet meet the challenge's central technical prompt. I would need to build and document a real AI feature before presenting Pujo Atlas as a qualifying entry; I am not claiming that AI was used here.&lt;/p&gt;

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

&lt;p&gt;This version demonstrates the value of open mapping tools and data: a small browser app can offer searchable maps and useful planning features without requiring a proprietary map platform for its default experience. The source and data formats also make the project easier for others to inspect, adapt, and extend.&lt;/p&gt;

&lt;p&gt;Open-source AI has not made anything possible in this version because it has not been integrated yet. I would rather be clear about that gap than suggest that the existing search and mapping features are AI-powered.&lt;/p&gt;

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

&lt;p&gt;I’m entering &lt;strong&gt;Best Use of GitHub Copilot&lt;/strong&gt;. I used Copilot during development to help build and refine Pujo Atlas. I did not use GitHub Actions to automate the project or Copilot to review contributor pull requests.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>PlantDex: A Pokédex for Real Plants — Built with Local On-Device AI</title>
      <dc:creator>Sumit Das</dc:creator>
      <pubDate>Fri, 09 Oct 2026 12:54:18 +0000</pubDate>
      <link>https://dev.to/codebysumit/plantdex-a-pokedex-for-real-plants-built-with-local-on-device-ai-p7o</link>
      <guid>https://dev.to/codebysumit/plantdex-a-pokedex-for-real-plants-built-with-local-on-device-ai-p7o</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;&lt;strong&gt;PlantDex&lt;/strong&gt; is an open-source, mobile-first web app that turns any nature walk into an interactive botanical field quest — a Pokédex for the real world.&lt;/p&gt;

&lt;p&gt;Point your phone's camera at any wild plant, tree, flower, or weed:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🌿 &lt;strong&gt;The app identifies the specimen&lt;/strong&gt; using a quantized on-device neural network running entirely on the server's CPU — no cloud calls, no third-party AI APIs.&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Assigns an official Dex number&lt;/strong&gt; — e.g. &lt;code&gt;#0001 Betula lenta&lt;/code&gt; (Sweet Birch) — and adds it to your personal botanical Pokédex.&lt;/li&gt;
&lt;li&gt;📚 &lt;strong&gt;Fetches peer-reviewed botanical facts&lt;/strong&gt; — taxonomy, family, habitat, medicinal/ecological notes — pulled from Wikipedia REST API and GBIF, cached in a local SQLite database.&lt;/li&gt;
&lt;li&gt;📈 &lt;strong&gt;Tracks your field progress&lt;/strong&gt; with discovery statistics, completion percentages, and locked silhouette teasers for unidentified species.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The app is designed specifically for the &lt;strong&gt;Touch Grass&lt;/strong&gt; challenge theme: it actively rewards going outside and discovering the living world around you. The more you explore, the more your Dex fills up.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who Is It For?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Hikers, trail runners, and urban explorers who want to put a name to the plants they pass every day.&lt;/li&gt;
&lt;li&gt;Citizen science enthusiasts contributing local observations to botanical knowledge.&lt;/li&gt;
&lt;li&gt;Families and teachers making nature walks educational and gamified.&lt;/li&gt;
&lt;li&gt;Anyone who wants to spend more time outside and less time staring at a screen.&lt;/li&gt;
&lt;/ul&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/codebysumit" rel="noopener noreferrer"&gt;
        codebysumit
      &lt;/a&gt; / &lt;a href="https://github.com/codebysumit/plantdex" rel="noopener noreferrer"&gt;
        plantdex
      &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;🌿 PlantDex — Pokédex for the Living World&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://dev.to" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/e0cf4f67216d4668536aa7519c0613db2cd20601e67ca0b9251bc85c1c834a78/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4861636b746f626572666573742d32303236253230546f75636825323047726173732d3265376433323f7374796c653d666c61742d737175617265" alt="Hacktoberfest 2026"&gt;&lt;/a&gt;
&lt;a href="https://python.org" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/66365dc2514cf83f80f9d65c0b64a4b336f649e93bef24437d77c5bf0547372b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f507974686f6e2d332e31302532422d626c75653f7374796c653d666c61742d737175617265" alt="Python 3.10+"&gt;&lt;/a&gt;
&lt;a href="https://flask.palletsprojects.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/ef75d722704ddaa99d3520741498e120817807dcc25b0d82828aa0d7b5c47793/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4261636b656e642d466c61736b253230332e302d6c69676874677265793f7374796c653d666c61742d737175617265" alt="Flask"&gt;&lt;/a&gt;
&lt;a href="https://github.com/codebysumit/plantdex/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/458425f8985b0b0c8a736cffe75e05a098e3d77906acddbcad2bfc54492a4e02/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e7376673f7374796c653d666c61742d737175617265" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://render.com" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/bd31ff117552478bbda8ac959b5c683b1a717329279d048f71e016a08824afdd/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4465706c6f792d52656e6465722532304350552d3436653362373f7374796c653d666c61742d737175617265" alt="Hosting: Render"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Step outside, point your lens at any wild leaf or bloom, and register it into your personal botanical Pokédex."&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Built for the &lt;strong&gt;Hacktoberfest 2026 Open-Source AI Challenge&lt;/strong&gt;, Theme: &lt;strong&gt;Touch Grass&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📖 Table of Contents&lt;/h2&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://github.com/codebysumit/plantdex#-overview--project-goal" rel="noopener noreferrer"&gt;Overview &amp;amp; Project Goal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/codebysumit/plantdex#-why-open--local-ai-matters" rel="noopener noreferrer"&gt;Why Open &amp;amp; Local AI Matters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/codebysumit/plantdex#-system-architecture--data-flow" rel="noopener noreferrer"&gt;System Architecture &amp;amp; Data Flow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/codebysumit/plantdex#-identification-engine--confidence-logic" rel="noopener noreferrer"&gt;Identification Engine &amp;amp; Confidence Logic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/codebysumit/plantdex#-unknown-plants-custom-naming--offline-sync" rel="noopener noreferrer"&gt;Unknown Plants, Custom Naming &amp;amp; Offline Sync&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/codebysumit/plantdex#-local-setup--running-locally" rel="noopener noreferrer"&gt;Local Setup &amp;amp; Running Locally&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/codebysumit/plantdex#-render-deployment-guide" rel="noopener noreferrer"&gt;Render Deployment Guide (512 MB RAM Optimization)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/codebysumit/plantdex#-ephemeral-vs-persistent-storage-on-render" rel="noopener noreferrer"&gt;Ephemeral vs Persistent Storage on Render&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/codebysumit/plantdex#-cli-management--database-backup" rel="noopener noreferrer"&gt;CLI Management &amp;amp; Database Backup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/codebysumit/plantdex#-10-plant-benchmark--honest-evaluation-report" rel="noopener noreferrer"&gt;10-Plant Benchmark &amp;amp; Honest Evaluation Report&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/codebysumit/plantdex#-known-limitations" rel="noopener noreferrer"&gt;Known Limitations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/codebysumit/plantdex#-draft-for-dev-challenge-submission-post" rel="noopener noreferrer"&gt;Draft for DEV Challenge Submission Post&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/codebysumit/plantdex#-open-source-credits--data-licenses" rel="noopener noreferrer"&gt;Open-Source Credits &amp;amp; Data Licenses&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🌟 Overview &amp;amp; Project Goal&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;PlantDex&lt;/strong&gt; is an open-source web application designed to motivate people to disconnect from screens, get outside, and explore biodiversity in their neighborhoods, urban parks, and wilderness trails.&lt;/p&gt;
&lt;p&gt;Inspired by the tactile joy…&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/codebysumit/plantdex" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/codebysumit/plantdex" rel="noopener noreferrer"&gt;https://github.com/codebysumit/plantdex&lt;/a&gt;&lt;/p&gt;




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

&lt;h3&gt;
  
  
  The AI Core: Google AIY Plants Classifier V1 (TFLite)
&lt;/h3&gt;

&lt;p&gt;The identification engine is built around Google's &lt;strong&gt;AIY Plants Classifier V1&lt;/strong&gt; — a quantized TensorFlow Lite model (&lt;code&gt;plants_v1.tflite&lt;/code&gt;, ~3.7 MB) trained on over &lt;strong&gt;2,100 plant species&lt;/strong&gt; using verified binomial taxonomic nomenclature from iNaturalist and GBIF. It runs entirely in CPU memory with no GPU required.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Model: Google AIY Plants V1 (Apache 2.0)
Size: ~3.7 MB (quantized INT8)
Classes: 2,102 botanical species
Runtime: tflite-runtime / ai-edge-litert
Memory footprint: &amp;lt; 90 MB on server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3-View Multi-Crop Inference
&lt;/h3&gt;

&lt;p&gt;To squeeze maximum accuracy out of hand-held phone photos, every capture is processed with three inference passes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Full Frame&lt;/strong&gt; — downscaled to 224×224 RGB.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Center Square Crop&lt;/strong&gt; — extracted from the middle region of the image.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mirrored Center Crop&lt;/strong&gt; — horizontally flipped center crop.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The three probability vectors are averaged, the artificial &lt;code&gt;background&lt;/code&gt; class is zeroed out, and the final softmax produces the confidence score.&lt;/p&gt;

&lt;h3&gt;
  
  
  Confidence Decision Tiers
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Threshold&lt;/th&gt;
&lt;th&gt;Outcome&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🟢 &lt;code&gt;CAUGHT&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;≥ 50%&lt;/td&gt;
&lt;td&gt;Auto-saved to Dex with catch animation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🟡 &lt;code&gt;MAYBE&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;25% – 50%&lt;/td&gt;
&lt;td&gt;Shows Top-3 candidates; user confirms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔴 &lt;code&gt;NOT SURE&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&amp;lt; 25%&lt;/td&gt;
&lt;td&gt;"Do you know this plant?" — custom entry or &lt;code&gt;Unknown N&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Tech Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Python 3.10 + Flask 3.0 + SQLite (zero heavy frameworks)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Runtime:&lt;/strong&gt; &lt;code&gt;tflite-runtime&lt;/code&gt; (Linux) / &lt;code&gt;ai-edge-litert&lt;/code&gt; (Windows/macOS)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Mobile-first PWA with vanilla JS, camera capture API, canvas downsampling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Background Jobs:&lt;/strong&gt; Thread-safe &lt;code&gt;sync_worker.py&lt;/code&gt; fetches Wikipedia/GBIF details asynchronously with exponential backoff&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosting:&lt;/strong&gt; Optimized for Render Free Tier (1 CPU core, 512 MB RAM, 1 Gunicorn worker, 4 threads)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Privacy by Design
&lt;/h3&gt;

&lt;p&gt;EXIF metadata and GPS coordinates are stripped from every uploaded photo using Pillow before anything is stored. No location data ever leaves the server. Photos are only sent to Gemini Vision for "double-check" analysis if the user explicitly clicks the optional button.&lt;/p&gt;




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

&lt;p&gt;The standard playbook for an AI-powered app in 2026 is: wrap an API, call GPT-4o or Claude, ship it. That approach fails completely for a plant identification app meant to be used outside — and here's why:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. No Signal in the Wild
&lt;/h3&gt;

&lt;p&gt;When you're hiking through a forest ravine, you don't have 5G. A cloud-dependent AI is useless. PlantDex's local TFLite model runs entirely on the server's CPU with the SQLite botanical cache. A catch still registers when the network drops.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Frugality = Accessibility
&lt;/h3&gt;

&lt;p&gt;The entire inference stack runs on &lt;strong&gt;less than 90 MB of RAM&lt;/strong&gt; on a single-core CPU. This means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Anyone can host it on a free Render instance — zero cloud AI costs.&lt;/li&gt;
&lt;li&gt;Community botanical clubs, schools, and individuals can self-host their own Pokédex server.&lt;/li&gt;
&lt;li&gt;The marginal cost per plant identification is exactly $0.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Privacy as a Feature, Not an Afterthought
&lt;/h3&gt;

&lt;p&gt;A closed commercial API would receive your photos, GPS coordinates, and timestamp data. For an app that tracks where you walk and what you observe in your neighborhood, that's a serious privacy concern. The open-source stack lets us strip all metadata before it even hits our own database, let alone any third-party server.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Open Science and Reproducible Taxonomy
&lt;/h3&gt;

&lt;p&gt;The AIY Plants model labels correspond directly to &lt;strong&gt;GBIF-verified binomial nomenclature&lt;/strong&gt; — the same scientific naming standard used in peer-reviewed literature. Every identification is traceable and auditable. There are no black-box API responses that can change without notice.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. The Graceful Unknown
&lt;/h3&gt;

&lt;p&gt;Closed AI systems often just return an error or a wrong answer with false confidence. PlantDex's three-tier confidence system means the app &lt;strong&gt;always does something useful&lt;/strong&gt;, even when the model isn't sure — routing you through a user-naming workflow that enriches the community database for every future user.&lt;/p&gt;

&lt;p&gt;Open innovation didn't just make this possible — it made it honest.&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;🌿 &lt;strong&gt;Hacktoberfest Open-Source AI Challenge — Touch Grass&lt;/strong&gt; (primary)&lt;/li&gt;
&lt;li&gt;🤖 &lt;strong&gt;Open-Source AI / Local Inference track&lt;/strong&gt; — 100% open-weight model, no closed APIs required for core functionality&lt;/li&gt;
&lt;li&gt;🔒 &lt;strong&gt;Privacy-respecting AI&lt;/strong&gt; — EXIF/GPS stripping, no third-party data leakage&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>EchoNote AI: I Built an Offline Lecture Notes App for My Friend</title>
      <dc:creator>Sumit Das</dc:creator>
      <pubDate>Sun, 04 Oct 2026 06:01:54 +0000</pubDate>
      <link>https://dev.to/codebysumit/echonote-ai-i-built-an-offline-lecture-notes-app-for-my-friend-8hn</link>
      <guid>https://dev.to/codebysumit/echonote-ai-i-built-an-offline-lecture-notes-app-for-my-friend-8hn</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 built &lt;strong&gt;EchoNote AI&lt;/strong&gt; for my friend &lt;strong&gt;Anshumita Ray&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Anshumita records her college professor's lecture on her phone during class. She does this because she cannot catch everything in real time. Sometimes a side conversation distracts her. Sometimes she forgets an important word, or misses a whole part of the lesson. Later, she has to listen to hours of audio again just to write her notes.&lt;/p&gt;

&lt;p&gt;EchoNote AI fixes this. She uploads her recording or records live in the browser. The app writes the full transcript, then makes a clean summary with key definitions and exam questions. If she forgot something, she can ask the AI a question about the lecture and get an answer based only on what the professor said.&lt;/p&gt;

&lt;p&gt;It runs fully on a normal laptop. No API keys. No internet after setup. Her notes are stored in an encrypted local database on her own device.&lt;/p&gt;

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

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/ylCl8rsBIuw" 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/codebysumit" rel="noopener noreferrer"&gt;
        codebysumit
      &lt;/a&gt; / &lt;a href="https://github.com/codebysumit/echonote-ai" rel="noopener noreferrer"&gt;
        echonote-ai
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
       hf26-dev-challenge-1
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🎙️ EchoNote AI&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;&lt;em&gt;Your audio. Transcribed. Understood. Remembered.&lt;/em&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;100% Local CPU · No API Keys · AES-256 Encrypted · Offline-First&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://python.org" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/68a57989f114cf08c44ed2197bca2fc6a5ee4599a6d81b5b63940710c54cc647/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f507974686f6e2d332e31302532422d626c75653f7374796c653d666c61742d737175617265266c6f676f3d707974686f6e" alt="Python"&gt;&lt;/a&gt;
&lt;a href="https://fastapi.tiangolo.com" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/bdb7910ef57eb4da8a7002670e06a5cece70d2ab9e7bdd662a914d6151f3b184/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f466173744150492d302e3131302532422d3030393638383f7374796c653d666c61742d737175617265266c6f676f3d66617374617069" alt="FastAPI"&gt;&lt;/a&gt;
&lt;a href="https://github.com/SYSTRAN/faster-whisper" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/03a56331e8a3ff8287229cb95dce394f8dfe84fcc25828a6d79f6fbc104aabec/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f576869737065722d6661737465722d2d776869737065722532304350552d6f72616e67653f7374796c653d666c61742d737175617265" alt="Whisper"&gt;&lt;/a&gt;
&lt;a href="https://huggingface.co/unsloth/gemma-3-1b-it-GGUF" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/d67068437456592d864bb03fcc42c00c963cc563899f5dc9b0f752e391119c77/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f47656d6d612d332532303142253230474755462532304350552d626c756576696f6c65743f7374796c653d666c61742d737175617265" alt="Gemma"&gt;&lt;/a&gt;
&lt;a href="https://github.com/codebysumit/echonote-ai/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/152aa2a37725b9fd554b28ff24d270f6071c67927a63e6d635a55c8e188e20c7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e3f7374796c653d666c61742d737175617265" alt="License"&gt;&lt;/a&gt;
&lt;a href="https://youtu.be/ylCl8rsBIuw" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/cfdc4d10e8cfb6a04d9e1705c120d6cab0c7ea96036e624b74730b4e83ff5eb6/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f44656d6f2d596f75547562652d7265643f7374796c653d666c61742d737175617265266c6f676f3d796f7574756265" alt="Demo"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://youtu.be/ylCl8rsBIuw" rel="nofollow noopener noreferrer"&gt;&lt;strong&gt;Watch Demo&lt;/strong&gt;&lt;/a&gt; · &lt;a href="https://github.com/codebysumit/echonote-ai#-features" rel="noopener noreferrer"&gt;&lt;strong&gt;Features&lt;/strong&gt;&lt;/a&gt; · &lt;a href="https://github.com/codebysumit/echonote-ai#-installation" rel="noopener noreferrer"&gt;&lt;strong&gt;Setup&lt;/strong&gt;&lt;/a&gt; · &lt;a href="https://github.com/codebysumit/echonote-ai#%EF%B8%8F-deploy-on-render" rel="noopener noreferrer"&gt;&lt;strong&gt;Deploy&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🧠 What is EchoNote AI?&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;EchoNote AI&lt;/strong&gt; is a professional, Claude &amp;amp; NotebookLM-inspired &lt;strong&gt;audio intelligence studio&lt;/strong&gt; that converts any recording into structured, encrypted notes — all running entirely on your own laptop CPU, with zero API keys and zero internet dependency after setup.&lt;/p&gt;
&lt;p&gt;Designed for &lt;strong&gt;college students, school kids, teachers, working professionals, recipe keepers, and voice note creators&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Upload a lecture. EchoNote AI transcribes it, detects what it is, writes you a tailored summary with exam questions, and lets you chat with Gemma AI about its content — forever stored privately in your encrypted local database.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;/div&gt;
&lt;p&gt;Watch EchoNote AI in action:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://youtu.be/ylCl8rsBIuw" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/4fce71dfa11bc431e02b31e7b5eef7ce88204c4ca174a64480307125626b7c0e/68747470733a2f2f696d672e796f75747562652e636f6d2f76692f796c436c387273424975772f687164656661756c742e6a7067" alt="EchoNote AI Demo"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;▶️ &lt;strong&gt;&lt;a href="https://youtu.be/ylCl8rsBIuw" rel="nofollow noopener noreferrer"&gt;Watch on YouTube&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

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

&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Details&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;⚡ &lt;strong&gt;Auto GPU / CPU Detection&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Automatically uses the best&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/codebysumit/echonote-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;p&gt;Every important part is open source:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;faster-whisper&lt;/strong&gt; turns speech into text. It supports 99 languages and handles mixed language lectures, which is common in our classrooms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 3 1B (GGUF, Q4)&lt;/strong&gt; writes summaries, exam questions, and answers chat questions. It runs through &lt;strong&gt;llama-cpp-python&lt;/strong&gt; and needs only about 800 MB of RAM.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FastAPI&lt;/strong&gt; powers the backend.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQLite with Fernet encryption&lt;/strong&gt; keeps transcripts, summaries, and chats private.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTML, CSS, and JavaScript&lt;/strong&gt; make a simple three column studio screen.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The app checks the hardware when it starts. It uses an NVIDIA GPU or Apple Metal if they exist, and falls back to CPU on any laptop with 4 GB RAM. I picked the small 1B model on purpose, because a student laptop must be able to run it.&lt;/p&gt;

&lt;p&gt;It also detects the type of audio. A college lecture gets exam questions. A meeting gets action items. A recipe gets ingredients and steps.&lt;/p&gt;

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

&lt;p&gt;Here is the thing. A closed API would have failed Anshumita in three ways.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cost.&lt;/strong&gt; A student cannot pay for every hour of lecture audio.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy.&lt;/strong&gt; Her professor's lectures and her own voice notes should stay on her device, not on someone else's server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Access.&lt;/strong&gt; The app works offline, so bad internet does not stop her from studying.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Open weight models made all three possible. I chose a model small enough for her laptop, ran it myself, and changed how it writes notes for each type of audio. With a closed API I could not have done that for free.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Best Use of Gemma.&lt;/strong&gt; EchoNote AI runs Gemma 3 1B locally on CPU. It writes all summaries and exam questions, and it powers the chatbot that answers from the lecture transcript.&lt;/p&gt;

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