<?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: Saifuddin Malek</title>
    <description>The latest articles on DEV Community by Saifuddin Malek (@saifuddin_malek_af6c6895a).</description>
    <link>https://dev.to/saifuddin_malek_af6c6895a</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%2F3544178%2F192f4976-2ca7-418a-af4f-aca36fe99696.png</url>
      <title>DEV Community: Saifuddin Malek</title>
      <link>https://dev.to/saifuddin_malek_af6c6895a</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/saifuddin_malek_af6c6895a"/>
    <language>en</language>
    <item>
      <title>FileSense: Let Local AI Handle the File Names You Keep Putting Off</title>
      <dc:creator>Saifuddin Malek</dc:creator>
      <pubDate>Sun, 25 Oct 2026 00:18:18 +0000</pubDate>
      <link>https://dev.to/saifuddin_malek_af6c6895a/filesense-let-local-ai-handle-the-file-names-you-keep-putting-off-3j25</link>
      <guid>https://dev.to/saifuddin_malek_af6c6895a/filesense-let-local-ai-handle-the-file-names-you-keep-putting-off-3j25</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;My downloads folder has plenty of files with names like &lt;code&gt;document.pdf&lt;/code&gt;, &lt;code&gt;notes_final.txt&lt;/code&gt;, and &lt;code&gt;untitled_export.pdf&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Giving them useful names means opening each file, reading it, switching back to the file manager, and typing a name. It’s a small chore that becomes annoying when there’s a whole batch.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;FileSense&lt;/strong&gt; to handle the reading and suggest the names.&lt;/p&gt;

&lt;p&gt;Upload text-based PDFs or TXT files, generate descriptive filenames, review or edit the suggestions, and download renamed copies together as a ZIP. The original files remain unchanged.&lt;/p&gt;

&lt;p&gt;Each suggestion includes a short explanation, and you can inspect the extracted text before accepting it.&lt;/p&gt;

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

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/ilwER5Rc5rc" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The demo shows document upload, local AI naming, review, and ZIP export.&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/SaifuddinM23" rel="noopener noreferrer"&gt;
        SaifuddinM23
      &lt;/a&gt; / &lt;a href="https://github.com/SaifuddinM23/RenameAI" rel="noopener noreferrer"&gt;
        RenameAI
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      FileSense - Privacy-first, local AI-assisted document renaming application with React, Node.js, and Ollama
    &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;FileSense - Local AI Document Renamer&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;FileSense is a privacy-first, local-assisted document renaming application built with &lt;strong&gt;React + Vite&lt;/strong&gt;, &lt;strong&gt;Node.js + Express&lt;/strong&gt;, and &lt;strong&gt;local Ollama inference&lt;/strong&gt;. All uploaded files and extracted text are maintained exclusively inside browser memory—no cloud storage, no account requirements, zero file bytes sent to the backend, and zero modifications to files on your disk.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;1. Problem &amp;amp; Workflow&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;The Problem&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Professionals, researchers, and students frequently accumulate folders of documents with obscure or auto-generated filenames such as &lt;code&gt;scan_unread_00492.txt&lt;/code&gt;, &lt;code&gt;doc_2026_final_v1.pdf&lt;/code&gt;, or &lt;code&gt;untitled_export_draft.pdf&lt;/code&gt;. Renaming these files manually requires opening each file, reading its contents to understand the subject, formulating a consistent naming scheme, switching back to the file manager, and typing a new name. Cloud-based AI renaming tools expose confidential documents, contracts, and personal records to third-party servers.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;The FileSense Workflow&lt;/h3&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Upload (Browser Memory Only)&lt;/strong&gt;: Drag and drop or browse PDFs and…&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/SaifuddinM23/RenameAI" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://github.com/SaifuddinM23/RenameAI" rel="noopener noreferrer"&gt;View the repository and setup instructions&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;FileSense uses &lt;strong&gt;React and Vite&lt;/strong&gt; for the frontend, &lt;strong&gt;Node.js and Express&lt;/strong&gt; for the backend, and &lt;strong&gt;Gemma 3 4B running through Ollama&lt;/strong&gt; for filename suggestions.&lt;/p&gt;

&lt;p&gt;PDF.js extracts text in the browser from up to the first ten pages. A bounded excerpt goes to the local backend and Ollama, which returns a suggested base name and explanation. Zod validates the response before it appears in the review table.&lt;/p&gt;

&lt;p&gt;The model interprets the document. Application code handles filename sanitization, duplicate names, and extension preservation.&lt;/p&gt;

&lt;p&gt;After review, JSZip packages the selected documents using their original bytes. FileSense creates renamed copies rather than changing files on disk.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Local processing is central to this project.&lt;/strong&gt; Document excerpts go to a model running on the same machine instead of a third-party cloud AI API. Raw document files stay in browser memory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;There are no per-request cloud inference fees.&lt;/strong&gt; Local inference still uses hardware, memory, and electricity, but another batch of files does not create another paid API request.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The model is replaceable.&lt;/strong&gt; Ollama’s configurable model setting lets me experiment with other open-weight models and adapt the naming instructions without rebuilding the workflow around another provider.&lt;/p&gt;

&lt;p&gt;A hosted API could also suggest filenames. Using open-weight AI gives me control over where the text is processed and which model performs the task.&lt;/p&gt;

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

&lt;p&gt;FileSense turns repeated opening, reading, and renaming into one batch review.&lt;/p&gt;

&lt;p&gt;The user still checks the suggestions, but starts with proposed names rather than a blank rename field. That is the effort I wanted to remove for this theme.&lt;/p&gt;

&lt;p&gt;I have not established a reliable time-saving figure yet. Inference speed depends on the machine, and reviewing suggestions takes time too. The intended benefit is less manual reading and typing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations and Next Steps
&lt;/h2&gt;

&lt;p&gt;This version supports text-based PDFs and TXT files. Scanned PDFs need OCR, and PDF naming uses only the first ten pages. Suggestions can miss context, so review remains part of the workflow.&lt;/p&gt;

&lt;p&gt;Next, I want to compare manual renaming with FileSense on a wider range of documents, including the time spent reviewing and correcting suggestions.&lt;/p&gt;

&lt;p&gt;For “Slow and Steady,” I wanted to automate a chore I would otherwise keep postponing: figuring out what &lt;code&gt;document_final_2.pdf&lt;/code&gt; actually contains.&lt;/p&gt;

</description>
      <category>hf26challenge</category>
      <category>devchallenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>PrintBrief: A Local AI Assistant That Turns Messy Messages into Print Orders</title>
      <dc:creator>Saifuddin Malek</dc:creator>
      <pubDate>Sat, 17 Oct 2026 21:20:12 +0000</pubDate>
      <link>https://dev.to/saifuddin_malek_af6c6895a/printbrief-a-local-ai-assistant-that-turns-messy-messages-into-print-orders-2p22</link>
      <guid>https://dev.to/saifuddin_malek_af6c6895a/printbrief-a-local-ai-assistant-that-turns-messy-messages-into-print-orders-2p22</guid>
      <description>&lt;h1&gt;
  
  
  PrintBrief: Turning Messy Customer Messages into Print-Ready Orders with Local AI
&lt;/h1&gt;

&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;“Bhaiya, 25 copies nikal do, A4, kal chahiye.”&lt;/p&gt;

&lt;p&gt;For a print-shop owner, that message leaves several questions: colour or black and white? Single-sided or double-sided? Any binding? What time tomorrow?&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;PrintBrief&lt;/strong&gt;, a local AI assistant that turns informal customer messages into structured, editable print orders.&lt;/p&gt;

&lt;p&gt;It extracts printing instructions, flags missing or contradictory details, and suggests clarification questions. The owner reviews the order, adds a PDF for page counting, and gets an itemized quote based on their shop’s rates.&lt;/p&gt;

&lt;p&gt;Once confirmed, the order is saved locally with a quotation snapshot and a downloadable PDF job slip.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who might pay for it?&lt;/strong&gt; Small neighbourhood and campus print shops that regularly receive orders through messages. The proposed value is less manual order entry, clearer instructions, and fewer mistakes caused by guessing. That willingness to pay still needs validation with shop owners.&lt;/p&gt;

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

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/2vfA7bt_3Do" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The demo shows customer-message extraction, missing-information prompts, manual corrections, quotation calculation, order confirmation, and job-slip download.&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/SaifuddinM23" rel="noopener noreferrer"&gt;
        SaifuddinM23
      &lt;/a&gt; / &lt;a href="https://github.com/SaifuddinM23/printbrief" rel="noopener noreferrer"&gt;
        printbrief
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Local AI Print Shop Order Assistant with in-browser PDF counting, deterministic integer-paise pricing, and job slip generation
    &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;PrintBrief — Local AI Print Shop Order Assistant&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;PrintBrief is a local-first web application designed for neighbourhood and campus print shops. It bridges the gap between chaotic customer WhatsApp/email messages (in English, Hinglish, or shorthand) and precise print production specifications—extracting requirements with a local open-weight LLM, counting PDF pages purely in the browser, calculating deterministic quotes in integer paise, and generating official printable job slips.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;1. The Customer Problem&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Print shop owners face frequent friction when receiving customer orders:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Chaotic Messages&lt;/strong&gt;: Customers send ambiguous text messages like &lt;em&gt;"Bhaiya 10 copy nikal do kal 10 baje"&lt;/em&gt; without specifying single vs double-sided, colour vs B&amp;amp;W, paper size, binding, or AM vs PM.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Costly Printing Mistakes&lt;/strong&gt;: Guessing missing specifications leads to wasted paper, mismatched bindings, and disputed bills.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-Request Cloud Fees &amp;amp; Data Exposure&lt;/strong&gt;: Sending customer text to third-party cloud AI APIs introduces per-request inference fees that accumulate across hundreds…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/SaifuddinM23/printbrief" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Repository: &lt;a href="https://github.com/SaifuddinM23/printbrief" rel="noopener noreferrer"&gt;PrintBrief on GitHub&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;PrintBrief uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;React and Vite&lt;/strong&gt; for the interface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node.js and Express&lt;/strong&gt; for the local backend.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 3 4B through Ollama&lt;/strong&gt; for local order extraction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zod&lt;/strong&gt; to validate and normalize model output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pdf-lib&lt;/strong&gt; for browser-based PDF page counting and job-slip generation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IndexedDB&lt;/strong&gt; for local order history and saved quotation snapshots.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The open-weight model performs the central task: interpreting informal customer language and converting it into structured order fields.&lt;/p&gt;

&lt;p&gt;Application rules then check for issues such as contradictory printing instructions or pickup times without AM/PM. The owner can correct every extracted field before confirming.&lt;/p&gt;

&lt;p&gt;Pricing is calculated in code using integer paise. For example, an 11-page document printed double-sided in three separate sets requires &lt;strong&gt;18 physical sheets and 33 printed sides&lt;/strong&gt;. Binding is charged per set, using the shop’s configured rates.&lt;/p&gt;

&lt;p&gt;The project includes deterministic tests for validation, ambiguity handling, and quotation calculations, plus a conditional live Ollama integration check. These checks do not guarantee extraction accuracy on every possible customer message.&lt;/p&gt;

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

&lt;p&gt;Local inference makes the product practical in three ways.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Customer text stays local.&lt;/strong&gt; With Ollama running on the same computer, the extraction workflow does not need to send customer messages to a third-party AI service. Uploaded PDFs are counted in the browser and are not sent to the model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;There are no per-request cloud inference fees.&lt;/strong&gt; Running the model locally still uses hardware and electricity, but processing another order does not create another paid API request. That gives a small business a different operating-cost model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The model can be changed.&lt;/strong&gt; The Ollama model is configurable, so I can experiment with other open-weight models and improve prompts for the language and shorthand used by a particular shop.&lt;/p&gt;

&lt;p&gt;A closed API could also extract order details. The benefit of this approach is control over where inference happens, which model runs, and how the workflow behaves.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current Status and Next Steps
&lt;/h2&gt;

&lt;p&gt;PrintBrief is a working prototype demonstrated with sample orders. It has not yet been tested by a print-shop owner, and I have not validated pricing or willingness to pay.&lt;/p&gt;

&lt;p&gt;My next step is to test it with a local shop, measure the corrections each order needs, and learn whether it saves enough time to become part of their daily workflow.&lt;/p&gt;

&lt;p&gt;The goal is simple: help a shop owner turn an unclear message into an order they can confidently print.&lt;/p&gt;

</description>
      <category>hf26challenge</category>
      <category>devchallenge</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
    <item>
      <title>GardenFix: Local AI Plant Care That Gets You Off the Screen</title>
      <dc:creator>Saifuddin Malek</dc:creator>
      <pubDate>Sat, 10 Oct 2026 01:45:57 +0000</pubDate>
      <link>https://dev.to/saifuddin_malek_af6c6895a/gardenfix-local-ai-plant-care-that-gets-you-off-the-screen-516k</link>
      <guid>https://dev.to/saifuddin_malek_af6c6895a/gardenfix-local-ai-plant-care-that-gets-you-off-the-screen-516k</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;GardenFix&lt;/strong&gt; is a local AI plant-care assistant built around a simple idea: take a photo, get one useful check, and return to your plant.&lt;/p&gt;

&lt;p&gt;It is for beginners who notice drooping or discoloured leaves but don’t know what to investigate next.&lt;/p&gt;

&lt;p&gt;Users upload a plant photo and answer two questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When did you last water it?&lt;/li&gt;
&lt;li&gt;How much sunlight does it receive?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GardenFix then provides visible observations, possible explanations, and one practical physical check. It also explains what cannot be determined from the photo.&lt;/p&gt;

&lt;p&gt;The screen is the starting point. The useful part happens afterward, when someone inspects the soil, drainage, or surrounding conditions themselves. Suggestions are not confirmed diagnoses.&lt;/p&gt;

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

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/GOQoW_FbaoY" width="710" height="399"&gt;
  &lt;/iframe&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%2F72enn5d9jp2kmj978ayh.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%2F72enn5d9jp2kmj978ayh.png" alt=" " width="800" height="438"&gt;&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%2Fjczxzxnop4ovei0k640u.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%2Fjczxzxnop4ovei0k640u.png" alt=" " width="800" height="438"&gt;&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%2F72l9on9zkvlxoxkeup9u.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%2F72l9on9zkvlxoxkeup9u.png" alt=" " width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GardenFix runs locally. You can try it using the setup instructions in the repository below.&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/SaifuddinM23" rel="noopener noreferrer"&gt;
        SaifuddinM23
      &lt;/a&gt; / &lt;a href="https://github.com/SaifuddinM23/gardenfix" rel="noopener noreferrer"&gt;
        gardenfix
      &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;🌱 GardenFix&lt;/h1&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;A local AI plant-care assistant built for the &lt;strong&gt;Touch Grass&lt;/strong&gt; open-source AI challenge.&lt;br&gt;
Everything runs on your own machine — no paid APIs, no cloud dependencies, no authentication. Designed for local processing; works offline after dependencies and model files are downloaded.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Upload a photo of your plant, tell GardenFix when you last watered it and how much sunlight it gets, and receive:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Plant Condition&lt;/strong&gt; – assessment of overall visual health (Healthy &amp;amp; Thriving, Mild Stress, Severe Distress / Dying)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visible Observations&lt;/strong&gt; – AI observations that may contain errors&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Possible Explanations&lt;/strong&gt; – tentative causes tailored to your watering history and sunlight&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One Practical Outdoor Check&lt;/strong&gt; – a physical check with conditional follow-up actions based on what you find&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Limitations Notice&lt;/strong&gt; – clear transparency about what cannot be determined from a photo alone&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Tech Stack&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;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;React 18 + Vite 5 (system fonts, Vanilla CSS)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;Node.js +&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/SaifuddinM23/gardenfix" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://github.com/SaifuddinM23/gardenfix" rel="noopener noreferrer"&gt;Source code and setup instructions&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The application code is MIT-licensed. Gemma’s model weights are governed separately by its model terms.&lt;/p&gt;

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

&lt;p&gt;The frontend uses &lt;strong&gt;React, Vite, and plain CSS&lt;/strong&gt;. The backend uses &lt;strong&gt;Node.js and Express&lt;/strong&gt;, with Multer for in-memory uploads and Sharp for image processing.&lt;/p&gt;

&lt;p&gt;At its core is &lt;strong&gt;Gemma 3 4B&lt;/strong&gt;, an open-weight vision-language model running locally through &lt;strong&gt;Ollama&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The backend validates and resizes the uploaded image, then sends it to Gemma alongside the user’s watering and sunlight answers. It requests structured output and validates that response before displaying it.&lt;/p&gt;

&lt;p&gt;Gemma performs the image analysis and connects visible features with the supplied care context. The application handles missing model files, unavailable Ollama, and inference errors.&lt;/p&gt;

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

&lt;p&gt;I tested images showing green foliage and another plant with brown leaves and pronounced drooping. The responses reflected those differences, but they also revealed mistakes.&lt;/p&gt;

&lt;p&gt;For example, one response described leaves as detached when the photo did not clearly establish that. Some explanations were also more confident than the evidence justified.&lt;/p&gt;

&lt;p&gt;This reinforced an important design decision: observations, possible explanations, and limitations should appear separately. A fluent AI answer still needs human checking. Broader testing and more careful recommendations remain areas for improvement.&lt;/p&gt;

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

&lt;p&gt;GardenFix’s local approach gives me control over where inference happens and how the model is used.&lt;/p&gt;

&lt;p&gt;After downloading the dependencies and model files, the app is designed to run without a cloud AI service. In the default local configuration, plant photos and care information are processed on my machine.&lt;/p&gt;

&lt;p&gt;There are no per-request AI API charges, although inference still uses local computing resources.&lt;/p&gt;

&lt;p&gt;Using an open-weight model also lets me experiment with prompts, adjust the output structure, and explore other compatible models. When testing reveals misleading responses, I can inspect and change the application’s inference instructions.&lt;/p&gt;

&lt;p&gt;A closed cloud API could analyse plant images too. The benefit here is being able to build around local processing and offline availability after setup, without depending on a remote AI provider.&lt;/p&gt;

&lt;p&gt;For GardenFix, open innovation makes the AI a component I can run and adapt myself.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Best Use of Gemma&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GardenFix uses &lt;code&gt;gemma3:4b&lt;/code&gt; through Ollama as its core image-analysis model. It processes plant photos alongside watering and sunlight context to generate observations, possible explanations, and a practical next check.&lt;/p&gt;

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