<?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: Khushi .</title>
    <description>The latest articles on DEV Community by Khushi . (@khushi886987).</description>
    <link>https://dev.to/khushi886987</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F99mvlsfu5tfj9m7ku25d.png</url>
      <title>DEV Community: Khushi .</title>
      <link>https://dev.to/khushi886987</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/khushi886987"/>
    <language>en</language>
    <item>
      <title>Clean Air Walk: I asked Gemma when it's safe to touch grass in Delhi NCR (and lost a fight with my own AI model first)</title>
      <dc:creator>Khushi .</dc:creator>
      <pubDate>Tue, 06 Oct 2026 12:18:13 +0000</pubDate>
      <link>https://dev.to/khushi886987/clean-air-walk-i-asked-gemma-when-its-safe-to-touch-grass-in-delhi-ncr-and-lost-a-fight-with-my-3dmm</link>
      <guid>https://dev.to/khushi886987/clean-air-walk-i-asked-gemma-when-its-safe-to-touch-grass-in-delhi-ncr-and-lost-a-fight-with-my-3dmm</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&lt;/a&gt;, theme: Touch Grass.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Every October, the same question shows up in my college group chat in Ghaziabad: &lt;em&gt;"is it okay to go out today?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Stubble-burning season is starting. Some evenings are fine for a run. Other evenings the PM2.5 is so high you can taste it. Air-quality apps give you a number, but a number isn't a plan. My grandfather doesn't want "PM2.5 = 54". He wants to know which morning to walk in the park.&lt;/p&gt;

&lt;p&gt;[ADD 1–2 sentences of your own: a real evening you skipped going out, or went out and regretted it.]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Clean Air Walk&lt;/strong&gt; answers that in one glance: a big face 😊 🙂 😐 😷, plain words ("Okay air right now"), one line of advice, and the best time today. Then you can ask in English, Hindi or Hinglish, by typing or just speaking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"5 km run after college, free after 4 pm. I have mild asthma."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"कल सुबह दादाजी के साथ पार्क में टहलना ठीक रहेगा?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Gemma 4&lt;/strong&gt; reads the 5-day air-quality forecast for your exact location. It answers with one specific day and time, the expected PM2.5, a backup option and a short health note, and reads it aloud. My grandfather will never type a question into a chat box, but he will ask one.&lt;/p&gt;

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

&lt;p&gt;🌿 &lt;strong&gt;Live app:&lt;/strong&gt; &lt;a href="https://clean-air-walk.onrender.com" rel="noopener noreferrer"&gt;https://clean-air-walk.onrender.com&lt;/a&gt;&lt;br&gt;
🇮🇳 &lt;strong&gt;In Hindi:&lt;/strong&gt; &lt;a href="https://clean-air-walk.onrender.com/?lang=hi" rel="noopener noreferrer"&gt;https://clean-air-walk.onrender.com/?lang=hi&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(It runs on Render's free tier, so the first visit after a quiet spell can take about a minute to wake up.)&lt;/p&gt;

&lt;p&gt;[SCREENSHOT: the home screen with the big face, best time today and 5-day row]&lt;/p&gt;

&lt;p&gt;[GIF: tapping 🎤, asking in Hindi, and hearing the answer]&lt;/p&gt;

&lt;p&gt;[SCREENSHOT: the Exercise tab]&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/starkhushi" rel="noopener noreferrer"&gt;
        starkhushi
      &lt;/a&gt; / &lt;a href="https://github.com/starkhushi/clean-air-walk" rel="noopener noreferrer"&gt;
        clean-air-walk
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Gemma 4 finds the cleanest time this week to go outside, in English or Hindi, from the air-quality forecast and real CPCB sensors.
    &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;Clean Air Walk 🌿&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Tell Gemma what you want to do outside. It finds the cleanest time this week.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;October smog in Delhi NCR decides whether an evening run, a walk with grandparents or a
weekend cricket match is a good idea. Clean Air Walk reads the 5-day air-quality forecast
for your exact location, checks it against your nearest real sensor, and lets you ask in
plain English, Hindi or Hinglish:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"5 km run after college, free after 4 pm. I have mild asthma."&lt;/em&gt;
&lt;em&gt;"मुझे दादाजी के साथ सुबह पार्क में टहलना है। कौन सा दिन सबसे अच्छा है?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Gemma 4 answers with one specific day and time, the expected PM2.5, a backup, and a
short health note.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;More features&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;⚙️ &lt;strong&gt;My profile&lt;/strong&gt;: asthma, going out with elderly people or kids, usual free hours, favourite
activity and language. It's saved only in your browser. The question always wins, and…&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/starkhushi/clean-air-walk" 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;&lt;strong&gt;1. The data.&lt;/strong&gt; The Copernicus CAMS model forecasts PM2.5 for the whole planet. I get it hourly for any coordinates through Open-Meteo, with temperature and rain. No key needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. A reality check.&lt;/strong&gt; OpenAQ publishes readings from real ground stations, including India's CPCB network. The app finds the nearest live sensor and shows how far the forecast was from reality over the latest 72 hours of readings. At Sanjay Nagar in Ghaziabad, it was off by about 22 µg/m³ and ran about 12 µg/m³ low. That's worth knowing when the app calls a slot "Okay".&lt;/p&gt;

&lt;p&gt;Two surprises: one CPCB station on OpenAQ can list several PM2.5 sensors, with old hardware whose data ends in 2022, so the app picks the live one. And the NCR feed paused for days, so the app never shows a 4-day-old reading as "now".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Gemma understands, Python verifies.&lt;/strong&gt; My first version handed the forecast table to Gemma 4 (&lt;code&gt;gemma-4-26b-a4b-it&lt;/code&gt;) with a list of rules. The answers sounded great and were sometimes wrong. Someone "free after 4 pm" with asthma got a Friday noon slot. For health advice, "sounds great, sometimes wrong" isn't good enough. So I split the job:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Gemma extracts constraints&lt;/strong&gt; as JSON: days, earliest start, latest finish, duration, whether a sensitive person is involved, and language. "Kal shaam" becomes tomorrow, 16:00–20:00. A follow-up like "what if only Thursday?" keeps "after 4 pm, asthma".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python searches&lt;/strong&gt; for the cleanest windows that fit exactly, scored by the worst 2-hour slot inside each, and flags honestly when nothing is good enough for a sensitive person.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma explains&lt;/strong&gt; only the verified options, like a friend, in the person's language.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After the split, every test question came back right. A 4-year-old on a Moderate Thursday got an honest &lt;em&gt;"no slot is Satisfactory, consider indoor play or another day"&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Features built around that core&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎤 &lt;strong&gt;Voice in, voice out&lt;/strong&gt; in English or Hindi, using the browser's built-in Web Speech API, so there's no extra service or key.&lt;/li&gt;
&lt;li&gt;⚙️ &lt;strong&gt;My profile&lt;/strong&gt;: tick "asthma", "free from 4 pm", "run, 30 min" once. It's stored only in your browser. "Can I go out tomorrow?" then means exactly that, while the question always wins.&lt;/li&gt;
&lt;li&gt;🏃 &lt;strong&gt;Exercise &amp;amp; mood&lt;/strong&gt;: &lt;em&gt;how hard&lt;/em&gt; to exercise outside right now, following India's CPCB health advice and the US EPA's guidance on outdoor exertion, and stricter for sensitive profiles. When outdoors is off, &lt;strong&gt;"Gemma, make my 20-min indoor plan"&lt;/strong&gt; writes a routine. For asthma it was gentle and said you can stop any time. For an elderly parent, in Hindi, it suggested chair-supported squats. Grey, polluted weeks also wear on mood, so the tab ends with small habits for smoggy days and India's free Tele-MANAS helpline (14416).&lt;/li&gt;
&lt;li&gt;📷 &lt;strong&gt;Sky check&lt;/strong&gt;: Gemma 4 is multimodal. Photograph the sky and it rates the haze, then compares it with the forecast. On a smoggy New Delhi station photo it said &lt;em&gt;"looks worse than the forecast, though fog can look like smog"&lt;/em&gt;. On a clear skyline, &lt;em&gt;"clearer than the forecast"&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;📲 &lt;strong&gt;Installable and offline&lt;/strong&gt;: it's a Progressive Web App. Add it to your home screen, and the last forecast still shows with no signal.&lt;/li&gt;
&lt;li&gt;🫁 &lt;strong&gt;Feeling unwell outside?&lt;/strong&gt; Plain safety steps in English and Hindi, including when to call 112.&lt;/li&gt;
&lt;li&gt;🇮🇳 &lt;strong&gt;One switch for the whole app&lt;/strong&gt;: English / हिंदी changes every label, the times ("शाम 7 से 9 बजे"), the voice and Gemma's answers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. Staying up on a free tier.&lt;/strong&gt; Once live, a burst of questions showed Google's free Gemma endpoint returning random server errors and rate limits on about half the requests. Now the app retries with backoff, falls back from Gemma 4 26B to 31B, understands questions with a keyword parser if Gemma's first step fails, answers with a plain summary of the verified options if Gemma is unreachable, and caches repeated questions. The next burst of 10 questions got 10 correct answers and zero errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stack:&lt;/strong&gt; FastAPI, one HTML page with Chart.js and the Web Speech API, a service worker, Gemma 4 through the Gemini API, deployed on Render.&lt;/p&gt;

&lt;h3&gt;
  
  
  The part where my AI model lost
&lt;/h3&gt;

&lt;p&gt;My first plan wasn't Gemma. I wanted to &lt;em&gt;beat&lt;/em&gt; the global forecast. A 45 km grid cell can't know my street, so I'd use TabPFN, an open-weight tabular foundation model, to learn the gap between CAMS and the real sensor. Before shipping it, I tested it properly on 3 real CPCB stations (Ghaziabad, Anand Vihar, Noida Sector 62), with 6 rolling 72-hour backtests each:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Average error (µg/m³)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Raw CAMS global model&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;19.9&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CAMS + simple bias fix&lt;/td&gt;
&lt;td&gt;20.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TabPFN predicting PM2.5&lt;/td&gt;
&lt;td&gt;23.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TabPFN predicting the sensor/CAMS gap&lt;/td&gt;
&lt;td&gt;22.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TabPFN + latest sensor reading&lt;/td&gt;
&lt;td&gt;22.4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The global model won. The test window caught the start of smog season, when PM2.5 jumped from monsoon levels of around 28 to over 100, which the model had never seen. So I removed it. Shipping a model that makes the forecast worse, just to have "AI" in the pipeline, would have been the opposite of the point. The AI moved to where it actually helps: turning a correct forecast into a decision a person can act on.&lt;/p&gt;

&lt;p&gt;I also tried running Gemma on a 1-CPU server. Gemma 4 E2B needed about 4 GB of memory and managed 4 tokens per second. Gemma 3 1B fit, but recommended a Moderate slot to someone with asthma when better ones existed, and answered Hindi in English. For health-adjacent answers, quality won.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;I can take Gemma anywhere.&lt;/strong&gt; Today the app calls Gemma 4 through Google's API because it's fast and free. The weights are open, though, and the same code talks to any OpenAI-compatible server. One environment variable moves it to a laptop with Ollama or a college lab GPU with llama.cpp. No one can deprecate my model or change it under me.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hindi wasn't an afterthought.&lt;/strong&gt; An open model that handles Hindi and Hinglish means my grandfather can use this in the language he thinks in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The whole chain is open.&lt;/strong&gt; Copernicus data, OpenAQ, Open-Meteo, Gemma and this repo. Anyone in Lahore, Dhaka or Lucknow can fork it for their city tomorrow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open tools let me prove a negative.&lt;/strong&gt; TabPFN being open is exactly why I could test it on my own data and publish the result, even when the result was "don't use it here".&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Air quality is a public-health problem. The tools for living with it should be public too.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; Gemma 4 is the core. It turns a numeric forecast into a personal plan in English and Hindi, writes indoor workouts, and reads sky photos with its vision. Self-hosting is supported through any OpenAI-compatible Gemma server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Render:&lt;/strong&gt; the app and its agent front end run on Render as a web service.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Gemma 4 by Google DeepMind (Apache 2.0). Data: Copernicus CAMS via Open-Meteo, OpenAQ, CPCB. General guidance, not medical advice.&lt;/em&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%2Fjxw9egcy5gbp4ynh0gkp.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%2Fjxw9egcy5gbp4ynh0gkp.png" alt=" " width="800" height="593"&gt;&lt;/a&gt;&lt;/p&gt;

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