<?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: Huzaifa Adam</title>
    <description>The latest articles on DEV Community by Huzaifa Adam (@huzaifa538).</description>
    <link>https://dev.to/huzaifa538</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%2F4177562%2F241b0266-4900-4557-b12c-62674927ccff.png</url>
      <title>DEV Community: Huzaifa Adam</title>
      <link>https://dev.to/huzaifa538</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/huzaifa538"/>
    <language>en</language>
    <item>
      <title>I Built a Gardening App That Works With No Internet — on a Model I Fine-Tuned Myself</title>
      <dc:creator>Huzaifa Adam</dc:creator>
      <pubDate>Sun, 11 Oct 2026 18:01:53 +0000</pubDate>
      <link>https://dev.to/huzaifa538/i-built-a-gardening-app-that-works-with-no-internet-on-a-model-i-fine-tuned-myself-49oa</link>
      <guid>https://dev.to/huzaifa538/i-built-a-gardening-app-that-works-with-no-internet-on-a-model-i-fine-tuned-myself-49oa</guid>
      <description>&lt;h1&gt;
  
  
  I Built a Gardening App That Works With No Internet — on a Model I Fine-Tuned Myself
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass 🌿&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;I live in Karachi, and every October I think about planting palak and methi. Every October I plant nothing — because I never know &lt;em&gt;when&lt;/em&gt; exactly to sow what, and Google gives me advice for Ohio.&lt;/p&gt;

&lt;p&gt;So for Hacktoberfest Week 1 ("Touch Grass" — build something with open-source AI that gets people off the screen and into the world), I built &lt;strong&gt;Baghbaan&lt;/strong&gt;: a kitchen-garden planner for Karachi. Pick a month, pick your space (gamla, balcony, or zameen), and it tells you what to plant right now. There's also an "ask Baghbaan" box that answers gardening questions in Roman Urdu.&lt;/p&gt;

&lt;p&gt;Here's the part I'm proud of: the answers come from an AI model running &lt;strong&gt;on my own machine&lt;/strong&gt;. No API key. No cloud bill. No internet required. You could ask it about dhania from a rooftop with zero signal bars, and it would still answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Karachi has a real gardening window that most apps ignore. October–November is &lt;em&gt;the&lt;/em&gt; time for winter vegetables here — palak, methi, dhania, mooli, gajar — but every planting calendar I found was written for USDA zones. My neighbors get their advice from the nursery wala, which is great, except he's not available at 11pm when you're actually holding the seed packet.&lt;/p&gt;

&lt;p&gt;I wanted something simple: honest local timing, in the language people actually speak at home (Roman Urdu), available even when the internet isn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  The build
&lt;/h2&gt;

&lt;p&gt;Baghbaan has two frontends: the original vanilla JS version and a React + TypeScript rebuild (Vite + Tailwind). A Python server (stdlib only — zero dependencies) serves the page and proxies questions to the model. And a curated JSON dataset: 16 crops, 12 months, watering rules, all specific to Karachi's climate.&lt;/p&gt;

&lt;p&gt;The model is the interesting part. It's a Qwen2.5-7B-Instruct that I fine-tuned myself with QLoRA on a free Colab T4 — &lt;strong&gt;100 gardening Q&amp;amp;A examples&lt;/strong&gt; in Roman Urdu, loss went from 4.48 to 1.39 — then converted to GGUF and served with llama.cpp on my own machine. Total running cost: $0/month.&lt;/p&gt;

&lt;p&gt;But here's the honest engineering: a fine-tuned 7B model can still be confidently wrong. So I don't let it freestyle. Every question gets answered with the curated dataset injected into the prompt, and the app shows which dataset facts were used. I also ran a SkillOpt-style optimization loop on the system prompt — testing it against real questions, keeping only what measurably improved answers (4/12 → 6/12 on my test set). If the model can't be reached, the app falls back to the dataset directly with a small notice. &lt;strong&gt;The dataset is the source of truth; the model is the friendly voice.&lt;/strong&gt; I'd rather show you an honest fallback than a confident hallucination.&lt;/p&gt;

&lt;p&gt;The whole thing runs with &lt;code&gt;python3 server.py&lt;/code&gt;. No pip install. No build step.&lt;/p&gt;

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

&lt;p&gt;Try it live: &lt;strong&gt;&lt;a href="https://baghbaan-six.vercel.app" rel="noopener noreferrer"&gt;https://baghbaan-six.vercel.app&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Open it, pick October, and it'll tell you exactly what to sow this week in Karachi — palak, methi, dhania, mooli, gajar, shalgam, matar, lehsan — plus how much water each one needs. Type a question in Roman Urdu ("Methi ko kitna pani chahiye?") and the ask box answers from the same 16-crop dataset, with a note showing whether the answer came from the book or the model.&lt;/p&gt;

&lt;p&gt;The point of the theme is that the screen is the shortest part of the experience: two minutes in the app, then you're outside with a seed packet. That's the whole app — it exists to get you off the screen and into the soil.&lt;/p&gt;

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

&lt;p&gt;Repo: &lt;strong&gt;&lt;a href="https://github.com/Huzaifa538/baghbaan" rel="noopener noreferrer"&gt;https://github.com/Huzaifa538/baghbaan&lt;/a&gt;&lt;/strong&gt; (public, started during the challenge window)&lt;/p&gt;

&lt;h2&gt;
  
  
  How I built it
&lt;/h2&gt;

&lt;p&gt;The open-weight model at the core is &lt;strong&gt;Qwen2.5-7B-Instruct&lt;/strong&gt; (open weights), fine-tuned with QLoRA on 100 Roman Urdu gardening examples using a free Colab T4 GPU, converted to GGUF, and served with &lt;strong&gt;llama.cpp&lt;/strong&gt; for local inference — no cloud, no API, $0/month. The planner itself is a curated JSON dataset (16 crops × 12 months, Karachi-specific), served by a zero-dependency Python server, with React + TypeScript and vanilla JS frontends. The dataset — not the model — is the source of truth; the fine-tuned model is the voice that explains it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why open matters here
&lt;/h2&gt;

&lt;p&gt;The challenge asked us to explain why open innovation matters for what we built. For Baghbaan, it's not philosophical — it's practical:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;It works where the internet doesn't.&lt;/strong&gt; The whole point of "touch grass" is being outside. A cloud AI is a brick on a rooftop with no signal. A local model answers anyway.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It costs nothing to run.&lt;/strong&gt; No per-question meter means a student or a retiree can ask a hundred questions without thinking about it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;My questions stay home.&lt;/strong&gt; Nothing I type is uploaded to anyone's server for training or profiling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I can change how it behaves.&lt;/strong&gt; Because the weights are mine to fine-tune, the next version can learn from actual Karachi gardeners — their soil, their balconies, their mistakes. Try asking a closed API to do that.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ul&gt;
&lt;li&gt;Small models + good data beat big models + hope. A 7B model fine-tuned on 100 gardening examples, grounded with a curated dataset, gives correct answers with personality.&lt;/li&gt;
&lt;li&gt;Fine-tuning and prompt optimization are complements, not substitutes. The fine-tune taught the model &lt;em&gt;how gardeners talk&lt;/em&gt;; the SkillOpt-style loop taught it &lt;em&gt;how to use the facts&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Local inference on CPU is &lt;em&gt;slow&lt;/em&gt; (30–60 seconds for a thoughtful answer). That's the real tradeoff, and it's why the instant dataset-driven planner is the core of the app, not the chat box.&lt;/li&gt;
&lt;li&gt;Writing the dataset taught me more about gardening than the model ever could. I now know when to plant lehsan.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;More crops, and a "meri kiyari" feature to track what you actually planted.&lt;/li&gt;
&lt;li&gt;A proper offline PWA so the whole thing installs on a phone and works in the field.&lt;/li&gt;
&lt;li&gt;Community contributions: the dataset is just JSON — any Karachi gardener can correct it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're in Karachi: October hai, beej bone ka waqt hai. Palak lagao. 🌱&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with Qwen2.5-7B (open weights), llama.cpp, Python stdlib, React, and one JSON file of honest gardening data.&lt;/em&gt;&lt;/p&gt;

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