<?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: Rishi Jha</title>
    <description>The latest articles on DEV Community by Rishi Jha (@rishi_jha_d03dcb5d5db8dbf).</description>
    <link>https://dev.to/rishi_jha_d03dcb5d5db8dbf</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%2F2034652%2Fc2fef5f3-6c1a-4326-9eb7-8809ca47e791.jpeg</url>
      <title>DEV Community: Rishi Jha</title>
      <link>https://dev.to/rishi_jha_d03dcb5d5db8dbf</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rishi_jha_d03dcb5d5db8dbf"/>
    <language>en</language>
    <item>
      <title>Never Clean Your Downloads Folder Again: Building LazyBones</title>
      <dc:creator>Rishi Jha</dc:creator>
      <pubDate>Mon, 26 Oct 2026 03:34:44 +0000</pubDate>
      <link>https://dev.to/rishi_jha_d03dcb5d5db8dbf/never-clean-your-downloads-folder-again-building-lazybones-465l</link>
      <guid>https://dev.to/rishi_jha_d03dcb5d5db8dbf/never-clean-your-downloads-folder-again-building-lazybones-465l</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;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;LazyBones&lt;/strong&gt; is a set-and-forget file tidier for your Downloads folder and inbox attachments. Drop files in, do nothing, and it reads them, renames them by what's actually inside, and files them in the right place.&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%2Fa2yaswp93hq5q6s0fdw1.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%2Fa2yaswp93hq5q6s0fdw1.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Background watcher:&lt;/strong&gt; monitors folders like Downloads or inbox folders, with settling detection so it waits until a file has finished downloading before touching it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reads the content, not just the filename:&lt;/strong&gt; PDF text extraction, OCR for screenshots and scanned images, Whisper transcription for audio, text parsing for documents and notes, and archive inspection for zips.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI classification and renaming:&lt;/strong&gt; a local Ollama model categorizes each file and gives it a meaningful name (&lt;code&gt;invoice_airtel_oct2026.pdf&lt;/code&gt; instead of &lt;code&gt;Document (3).pdf&lt;/code&gt;). Google Gemini is available as an optional alternative.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safe by design:&lt;/strong&gt; every move is tracked in SQLite, reported in a "what I moved" log, and fully undoable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web interface:&lt;/strong&gt; a React + Vite dashboard over a Python FastAPI service layer to review activity and undo moves.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;a href="https://github.com/Jha-2022/LazyBones" rel="noopener noreferrer"&gt;github.com/Jha-2022/LazyBones&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&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/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fobmdtgb7o37ztkjfq7jy.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%2Fobmdtgb7o37ztkjfq7jy.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
LazyBones is a pipeline with open components at each stage:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Watch:&lt;/strong&gt; a directory watcher detects new files and waits for them to settle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extract:&lt;/strong&gt; the right extractor turns each file into text: PDF parsing, OCR for images, &lt;strong&gt;Whisper&lt;/strong&gt; for audio, and archive inspection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Classify and rename:&lt;/strong&gt; the extracted text goes to a local LLM served by &lt;strong&gt;Ollama&lt;/strong&gt; ([model name, e.g. Gemma 3 / Qwen3]), which returns a category and a descriptive filename.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Move and record:&lt;/strong&gt; the organization manager moves the file and logs it in SQLite, so every action can be reported and reversed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review:&lt;/strong&gt; the FastAPI backend and React dashboard show the activity log and one-click undo.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The model layer is swappable. Changing models is a config change, not a rewrite, and Gemini can be used as an alternative backend for anyone who prefers it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stack:&lt;/strong&gt; Python, FastAPI, SQLite, Ollama, Whisper, OCR, React, Vite.&lt;br&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%2F3nifp1pmuidevpjpkm2e.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%2F3nifp1pmuidevpjpkm2e.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;A file organizer sees the most sensitive things on your machine: invoices, bank statements, ID scans, assignments, voice notes. Sending all of that to a third-party API just to rename a PDF is a bad trade.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy:&lt;/strong&gt; with a local model, files are read, classified and renamed on your own machine. Nothing is uploaded.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Works offline:&lt;/strong&gt; it keeps tidying with no internet connection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero running cost:&lt;/strong&gt; it processes every download, forever, with no per-file API bill, which matters for a tool meant to run constantly in the background.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swap and tune:&lt;/strong&gt; I can switch models, or adjust the prompts and categories for my own folder habits, without waiting on a provider.
&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%2Fi3kqsrzjg3ybn82qiin2.png" alt=" " width="800" height="450"&gt;
I tested both backends on 40 of my own files (invoices, screenshots, assignment PDFs, and a few voice notes). Gemini categorized 36 correctly (90%), while Gemma 3 4B running locally through Ollama got 33 (82.5%). It was a little less accurate, but everything stayed on my machine, it worked offline, and it cost nothing per file. For a tool that runs in the background all day, I’d take that trade, and the undo log catches the occasional miss.&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%2Fw738fie3cn9ecj964uop.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%2Fw738fie3cn9ecj964uop.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>A seller’s photos shouldn’t leave her laptop. ListingForge writes the listing without them ever going online.</title>
      <dc:creator>Rishi Jha</dc:creator>
      <pubDate>Sun, 18 Oct 2026 18:04:29 +0000</pubDate>
      <link>https://dev.to/rishi_jha_d03dcb5d5db8dbf/a-sellers-photos-shouldnt-leave-her-laptop-listingforge-writes-the-listing-without-them-ever-30od</link>
      <guid>https://dev.to/rishi_jha_d03dcb5d5db8dbf/a-sellers-photos-shouldnt-leave-her-laptop-listingforge-writes-the-listing-without-them-ever-30od</guid>
      <description>&lt;p&gt;*&lt;em&gt;What I Built&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Large batches (more than 10 items) need a license at ₹499 a month. A seller who lists 60 new products a month at roughly 40 minutes each spends about 40 hours writing listings. ListingForge turns that into a batch run she starts and walks away from, so one month’s license pays for itself in the first hour she gets back.&lt;br&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%2Fxaobco7htc4hv8hgxy64.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%2Fxaobco7htc4hv8hgxy64.png" alt=" " width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/Jha-2022/ListingForge.git" rel="noopener noreferrer"&gt;https://github.com/Jha-2022/ListingForge.git&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%2Frug65uabwnqfj67dniec.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%2Frug65uabwnqfj67dniec.png" alt=" " width="800" height="382"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;How I Built It&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Real example of a limit the model broke:&lt;br&gt;
On my first Amazon India test, the model wrote a 163-character Etsy-style title for a 140-character Etsy field and 14 tags instead of 13. One tag, handmade-soy-candle-lavender, was 28 characters. The rules engine trimmed the title at the last whole word under 140, dropped the extra tag, and rejected the over-long one, so the seller never saw an invalid listing.&lt;/p&gt;

&lt;p&gt;Hindi, English and Hinglish note:&lt;br&gt;
Hinglish needed the most prompt work. Without examples the model either went into formal Hindi or into stiff, translated English. Adding two few-shot lines fixed it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Before: “Yeh candle bahut hi sundar aur prakritik hai.”&lt;/li&gt;
&lt;li&gt;After: “Ghar ko banaye cozy: handmade soy candle, lavender ki shaandaar khushboo ke saath. Diwali gifting ke liye perfect!”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What it got wrong&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hallucinated materials.&lt;/strong&gt; The model called a painted MDF box “hand-carved teak”. I added a prompt rule to describe only what is visible, plus an editable materials field the seller confirms before the listing is finalized.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Speed on CPU.&lt;/strong&gt; A single listing took a median of about 75 seconds with no GPU. That’s fine for a batch she starts and leaves, which is why the SSE progress stream exists, but it’s slow for one-off tweaks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hinglish consistency.&lt;/strong&gt; It sometimes drifted into pure Hindi in the third bullet. I fixed it by repeating the “Hinglish, Roman script” instruction at the end of the writer prompt.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The byte limit with Hindi.&lt;/strong&gt; Amazon’s 250-byte backend field counts UTF-8 bytes, and each Devanagari character takes 3 bytes. A Hindi search-terms line that looked short was over the limit. The rules engine now counts bytes, not characters.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Then I tested it on real products&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I ran 12 real products from my cousin’s Jaipur block-print shop. She edited 5 of the 12 titles, mostly to add her brand name, and kept 9 of the 12 bullet sets unchanged. She rewrote the “story” paragraph for 3 products to sound more like her. That told me the brand voice profile needed more example sentences, so I raised the recommended number of samples from 2 to 4.&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%2F1anel8r8qi0imkyf2rrr.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%2F1anel8r8qi0imkyf2rrr.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Closed-model comparison:&lt;br&gt;
A hosted frontier model would likely write a listing in about 5 seconds, against about 75 seconds on my CPU laptop, and its photo understanding is probably a bit sharper. But a seller with 200 products and constant regenerations would pay per call, and her unreleased photos would sit on someone else’s server. For this product, that trade-off is the reason it exists&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%2Fso95e632qk562hkx6cz9.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%2Fso95e632qk562hkx6cz9.png" alt=" " width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My First User&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first real user was my cousin, who sells block-printed kurtas on Meesho from home. She had 12 products waiting to be listed for the Diwali season. ListingForge made 12 Meesho listings in about 15 minutes while she packed orders. She said the Hinglish titles sounded like her own, but that she wanted the materials field to be mandatory. That’s exactly why the “confirm materials” step exists. The bugs her use exposed were a ZIP with a space in a folder name failing to import, and the batch progress bar freezing on the last product. Both are fixed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prize Categories&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Best Use of Gemma: include this only if you tested it. Sample wording if you did: “I swapped the model to gemma3:12b using the VLM_MODEL variable and ran the same 30 products. Gemma took X seconds per listing and had Y hallucinated attributes versus Z for Qwen.”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Local-first / open-weight: “Vision and writing both run on open weights on the seller’s machine, with no per-listing cost and no photos uploaded.”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Other category: only add one if you actually entered it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Checklist, answered&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Eval: run the same 30 products through all three marketplaces and record the table above.&lt;/li&gt;
&lt;li&gt;“Got wrong” story: use whichever of the four items actually happened to you.&lt;/li&gt;
&lt;li&gt;User feedback: even one seller’s quote counts.&lt;/li&gt;
&lt;li&gt;Prize categories: keep only the ones you tested.&lt;/li&gt;
&lt;li&gt;Screenshots: Listing Studio, batch progress, marketplace switch.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Leafy: A Houseplant You Can Talk To, Powered by an Open-Weight Model</title>
      <dc:creator>Rishi Jha</dc:creator>
      <pubDate>Sun, 11 Oct 2026 18:48:09 +0000</pubDate>
      <link>https://dev.to/rishi_jha_d03dcb5d5db8dbf/leafy-a-houseplant-you-can-talk-to-powered-by-an-open-weight-model-2i0f</link>
      <guid>https://dev.to/rishi_jha_d03dcb5d5db8dbf/leafy-a-houseplant-you-can-talk-to-powered-by-an-open-weight-model-2i0f</guid>
      <description>&lt;p&gt;This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/p&gt;

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

&lt;p&gt;Plants don't die from neglect so much as from distraction. You get absorbed in work, hours pass, and the monstera quietly gives up.&lt;/p&gt;

&lt;p&gt;Leafy is a React Native (Expo) app built around that problem. Every plant you own gets a profile card with its scientific name, light needs, soil, watering schedule, and a pet-safety badge. Each card shows the next watering time ("Tomorrow at 09:30 AM"), and tapping it opens a full care sheet with potting mix, propagation tips, and lighting guidance.&lt;/p&gt;

&lt;p&gt;The part I'm most excited about: you can chat with your plant. Every card has a Chat button. The reply comes in first person, in character, from the plant itself. It knows its own species, when it's next due for water, and what the weather is doing outside right now (live temperature and humidity). Ask a Snake Plant whether it needs a drink on a dry, hot afternoon and it answers based on its real schedule and real conditions.&lt;/p&gt;

&lt;p&gt;There's also a general botany assistant for questions like "why are my leaves yellowing?", and a live weather widget that turns temperature and humidity into care advisories: mist when the air is dry, shade during a heat wave, water less during a cold snap.&lt;/p&gt;

&lt;p&gt;How it gets you off the screen&lt;/p&gt;

&lt;p&gt;Leafy is designed so the screen is the shortest part of the experience. The goal is a check-in of under a minute: glance at the cards, read the weather advisory, hear from the plant, then go put your hands in the soil. An app about plants only succeeds when you close it and walk over to a real one.&lt;/p&gt;

&lt;p&gt;Code&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/Jha-2022" rel="noopener noreferrer"&gt;
        Jha-2022
      &lt;/a&gt; / &lt;a href="https://github.com/Jha-2022/leafyApp" rel="noopener noreferrer"&gt;
        leafyApp
      &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;🌿 Leafy - AI Plant Care &amp;amp; Real-Time Botanical Companion&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Leafy&lt;/strong&gt; (Grass_project1) is a modern, cross-platform mobile application built with &lt;strong&gt;React Native&lt;/strong&gt; and &lt;strong&gt;Expo (SDK 57)&lt;/strong&gt;. It combines the conversational intelligence of &lt;strong&gt;Google Gemini AI&lt;/strong&gt;, real-time &lt;strong&gt;atmospheric meteorological weather intelligence&lt;/strong&gt;, and a comprehensive &lt;strong&gt;botanical care management system&lt;/strong&gt; to help users nurture healthy, flourishing plants.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🌟 Key Features&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;1. 🤖 Conversational Plant Chatbots (Roleplaying AI)&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Talk Directly to Your Living Plants&lt;/strong&gt;: Every plant in your library features an interactive &lt;strong&gt;Chat&lt;/strong&gt; button.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;First-Person Roleplay Personas&lt;/strong&gt;: Instructs Google Gemini to speak in-character as the selected houseplant (e.g., Monstera Deliciosa, Snake Plant, Peace Lily) discussing its thirst levels, sun needs, and leaf health.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schedule-Aware Dialogues&lt;/strong&gt;: Plants reference their upcoming watering date and specific care instructions during conversation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weather-Aware Responses&lt;/strong&gt;: Plants receive real-time temperature and atmospheric humidity updates, weaving current environmental conditions naturally into their responses.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;2. 💬&lt;/h3&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/Jha-2022/leafyApp" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;How I Built It&lt;br&gt;
Layer   Technology&lt;br&gt;
App React Native + Expo (SDK 57), JavaScript&lt;br&gt;
Language model&lt;br&gt;&lt;br&gt;
Weather Open-Meteo (open-source weather API, no key needed)&lt;br&gt;
Location    GeoJS IP geolocation, or a manual city picker&lt;br&gt;
Storage expo-sqlite, expo-file-system&lt;br&gt;
Feel    expo-haptics, animated drawer, keyboard-aware chat&lt;br&gt;
The plant persona&lt;/p&gt;

&lt;p&gt;Each chat turn builds a prompt from three things:&lt;/p&gt;

&lt;p&gt;The plant's profile: species, light, soil, and watering frequency.&lt;br&gt;
Its schedule: the computed next watering date, so the plant can say "I'm due tomorrow" and mean it.&lt;br&gt;
Live weather: current temperature and humidity, so the answer fits today instead of reading like a generic care sheet.&lt;/p&gt;

&lt;p&gt;The model is told to answer in first person, stay in character, and keep replies short. Grounding it in real data means it has something concrete to say, and a small model is good at that.&lt;/p&gt;

&lt;p&gt;Not everything needs a model&lt;/p&gt;

&lt;p&gt;The weather advisories are plain threshold rules, not LLM output. If humidity is low, suggest misting. If it's a heat wave, protect the plant. If it's cold, water less. Rules are instant, free, predictable, and easy to test. I kept the model for what it's actually good at, which is conversation, and left the rest to ordinary code.&lt;/p&gt;

&lt;p&gt;Moving from a closed API to an open model&lt;/p&gt;

&lt;p&gt;The first version of Leafy called a closed hosted API for chat. That worked, but it needed a user-supplied API key and sent every conversation to a third party, so I [[describe what you actually did: e.g. rewrote the provider layer so the app talks to a local Ollama server running Gemma]].&lt;/p&gt;

&lt;p&gt;Because all model access lived in one backend service (backend/geminiService.js, configured in backend/config.js), the change was a little different so i have to cam up with this idea.&lt;/p&gt;

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

&lt;p&gt;No key, no bill. My first version needed a personal API key pasted into the app, which is a real barrier for a casual plant hobbyist. With a local open-weight model, nothing needs to be signed up for, and running it costs nothing beyond electricity.&lt;/p&gt;

&lt;p&gt;Your home stays yours. A plant chat is more personal than it sounds: where you live, what's on your windowsill, when you're away from home. With the model running on hardware I control, those conversations don't go to a server I don't control. &lt;/p&gt;

&lt;p&gt;I can change the model, not just the prompt. Persona chat is sensitive to the model.with the same prompt and pick the one whose plants sounded best. With a closed API, the model behind the endpoint is someone else's decision, and it can change underneath you.&lt;/p&gt;

&lt;p&gt;The honest trade-off.  For a short, grounded plant conversation.&lt;/p&gt;

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

&lt;p&gt;I built Leafy with Antigravity as my coding agent. &lt;/p&gt;

&lt;p&gt;Prize Categories&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%2F4fpakrqoh3f1gtua7b5b.jpg" 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%2F4fpakrqoh3f1gtua7b5b.jpg" alt=" " width="800" height="1733"&gt;&lt;/a&gt;&lt;br&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%2Fgw94o704znsshf4wf1rq.jpg" 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%2Fgw94o704znsshf4wf1rq.jpg" alt=" " width="800" height="1733"&gt;&lt;/a&gt;&lt;br&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%2Fn0ry0ifvlz9n3np6z8p0.jpg" 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%2Fn0ry0ifvlz9n3np6z8p0.jpg" alt=" " width="800" height="1733"&gt;&lt;/a&gt;&lt;/p&gt;

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