<?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: Karishma Das</title>
    <description>The latest articles on DEV Community by Karishma Das (@karishma24).</description>
    <link>https://dev.to/karishma24</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%2F4152597%2F9f4bd016-7c67-490f-a296-c41e22e1a7ef.png</url>
      <title>DEV Community: Karishma Das</title>
      <link>https://dev.to/karishma24</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/karishma24"/>
    <language>en</language>
    <item>
      <title>Porchlight: a local AI outdoor coach that fits your body and your day</title>
      <dc:creator>Karishma Das</dc:creator>
      <pubDate>Mon, 12 Oct 2026 05:25:38 +0000</pubDate>
      <link>https://dev.to/karishma24/porchlight-a-local-ai-outdoor-coach-that-fits-your-body-and-your-day-559c</link>
      <guid>https://dev.to/karishma24/porchlight-a-local-ai-outdoor-coach-that-fits-your-body-and-your-day-559c</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;Porchlight is a small outdoor coach that runs on your own computer. You answer a few questions once: how far you can comfortably go from home, whether stairs are a problem, whether heat bothers you, and what you have at home (a window, balcony, doorstep or yard). After that, each time you run it you say how many minutes you have and how your energy is, and it gives you one small mission. For example: stand on the balcony, close your eyes and listen for three sounds.&lt;/p&gt;

&lt;p&gt;I built it because the usual "go outside" ideas assume you can hike, jog or get to a trail. Porchlight is for people who can't do that: older adults, people with limited mobility or low vision, people who struggle in the heat, or anyone who just has five minutes and a doorstep.&lt;/p&gt;

&lt;p&gt;The mission shows up in the terminal and as a page with large text that you can read or print, so the screen part stays short. Then you put the laptop down and go.&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%2Ft8jgi3ezcbdv7veb8ena.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%2Ft8jgi3ezcbdv7veb8ena.png" alt=" " width="800" height="899"&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%2Fx5qnm4tgv5krzj2ppxns.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%2Fx5qnm4tgv5krzj2ppxns.png" alt=" " width="800" height="368"&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%2Fx3eg97n7karmgfnmnlwu.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%2Fx3eg97n7karmgfnmnlwu.png" alt=" " width="800" height="409"&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%2Fzotuk47uf76ny42n3t5f.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%2Fzotuk47uf76ny42n3t5f.png" alt=" " width="800" height="435"&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%2Fzi09iqrjswown5eku3vw.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%2Fzi09iqrjswown5eku3vw.png" alt=" " width="799" height="467"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The Porchlight demo site.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Video:&lt;/strong&gt; the real app running on my laptop, followed by the demo site.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=047kle42H9M" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=047kle42H9M&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Demo site:&lt;/strong&gt; &lt;a href="https://karishma-das.github.io/porchlight/" rel="noopener noreferrer"&gt;https://karishma-das.github.io/porchlight/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The site is only a demo. The real app runs locally with a local model. The "Try the guard" part of the site uses hand-written sample suggestions, not a live AI.&lt;/p&gt;

&lt;p&gt;Here is a real run of the app on my laptop (I shortened the file path on the "Large-print card" line):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ python porchlight.py

=== Porchlight (local model: gemma3:4b) ===
How many minutes do you have? [10]: 15
Is your energy low today? (y/n) [n]: n
Is it hot outside right now? (y/n) [n]: n

Thinking, locally...

Doorstep Reflection  [doorstep, ~15 min]
  1. Stand on your doorstep, feeling the ground beneath your feet.
  2. Close your eyes and listen to the sounds around you – birds, traffic, the wind.
  3. Take a few deep breaths, noticing the rhythm of your own body and the quiet of the moment.

Large-print card: porchlight_card.html

Go outside. Press Enter when you're back...
One line: how did it go?: I had 15 minutes free and felt normal, so Porchlight suggested "Doorstep Reflection." I went outside and stood near my house for 15 minutes. I heard birds singing, leaves moving in the wind, and cars passing by. At first, it felt a little strange to stand quietly, but soon I felt peaceful and enjoyed the sounds around me.
Saved your note.
&lt;/code&gt;&lt;/pre&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/Karishma-Das" rel="noopener noreferrer"&gt;
        Karishma-Das
      &lt;/a&gt; / &lt;a href="https://github.com/Karishma-Das/porchlight" rel="noopener noreferrer"&gt;
        porchlight
      &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;Porchlight: touch grass at your own pace&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;Most "go outside" apps assume you can hike, jog or walk a mile. Porchlight is for everyone else: older adults, people with limited mobility or low vision, people recovering from illness, or anyone with five minutes and a doorstep.&lt;/p&gt;

&lt;p&gt;It runs an &lt;strong&gt;open-weight model (Gemma via Ollama) entirely on your own computer&lt;/strong&gt;. No cloud API, no API keys, no accounts, no &lt;code&gt;pip install&lt;/code&gt;.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How it works&lt;/h2&gt;
&lt;/div&gt;


&lt;ol&gt;

&lt;li&gt;Answer a few questions once (how far you can go, stairs, heat, vision, what you have at home). They are saved only in a local file.&lt;/li&gt;

&lt;li&gt;Each day, say how much time and energy you have.&lt;/li&gt;

&lt;li&gt;The local model suggests a tiny outdoor mission (a balcony, a doorstep, a window, or a short walk).&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;The model suggests, the code decides.&lt;/strong&gt; Every suggestion is checked against your hard limits (distance, stairs, heat, time, no strenuous words)…&lt;/li&gt;

&lt;/ol&gt;&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Karishma-Das/porchlight" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;To run it you need Python 3 and &lt;a href="https://ollama.com" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt;. No pip installs and no API keys:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ollama pull gemma3:4b
python porchlight.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The main files are &lt;code&gt;porchlight.py&lt;/code&gt; (the app and the guard), &lt;code&gt;card.py&lt;/code&gt; (the page), &lt;code&gt;test_guard.py&lt;/code&gt; (a test for the guard) and &lt;code&gt;index.html&lt;/code&gt; (the demo site).&lt;/p&gt;

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

&lt;p&gt;The model is Gemma (&lt;code&gt;gemma3:4b&lt;/code&gt;), running locally through Ollama. The app is plain Python using only the standard library, and it talks to Ollama's local HTTP API.&lt;/p&gt;

&lt;p&gt;The idea I built around is that the model suggests and the code decides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The model is asked to reply with a small JSON object: a title, a place, minutes, distance, whether it needs stairs, sun or shade, and exactly three steps.&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;validate&lt;/code&gt; function checks that reply against the person's limits: the places they have, their minutes, their distance, stairs, direct sun on a hot day, and a short blocklist of words like run, climb, hike and barefoot.&lt;/li&gt;
&lt;li&gt;If a reply breaks a rule, it is rejected and the model is asked again, with the reason included. After three failed tries, the app uses a built-in safe mission instead.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;card.py&lt;/code&gt; writes the page as one offline HTML file. The default look is purple, and there is a high-contrast, large-text mode for low vision.&lt;/li&gt;
&lt;li&gt;The profile and the history are plain JSON files on your computer, and they are kept out of the repo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How I tested it&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In my real runs with my own profile (150 m, no stairs, 15 minutes), Gemma followed the rules every time, so the guard never had to reject anything. To check that the guard works anyway, &lt;code&gt;test_guard.py&lt;/code&gt; runs six hand-written suggestions through the same &lt;code&gt;validate&lt;/code&gt; function for three made-up test profiles. No model is used. The result was 6 accepted and 12 rejected, and the same suggestion can pass for one profile and fail for another. For example, a doorstep breathing mission is fine for someone who can walk 150 m, but it is rejected for someone who can't leave home. The guard on the demo site is a JavaScript copy of the same rules. The test profiles are not real users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Taking it outside&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I did two missions outside. The first was "Doorstep Reflection" (the run above): I stood near my house for 15 minutes and heard birds, leaves and cars. It felt strange for the first few minutes, then it felt peaceful. The second was "Balcony Breathing": I spent about 15 minutes on my balcony, looked at the view and took slow, deep breaths. I felt relaxed afterwards. That is one person's two outings, not a test of any health benefit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What went wrong&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In my first run, the model told me to stand barefoot on the doorstep. That can be unsafe for some people (hot or rough ground), and the guard let it through because it wasn't a rule yet. I added "barefoot" to the blocklist.&lt;/li&gt;
&lt;li&gt;In the balcony run, step 2 told me to close my eyes and focus on the colours I could see, and step 3 just said to repeat for 15 minutes. The guard accepted it, because it checks safety limits and not whether the instructions make sense. I haven't built a second check for that.&lt;/li&gt;
&lt;li&gt;The model is slow on my laptop, especially on the first run.&lt;/li&gt;
&lt;li&gt;Porchlight doesn't assess anyone's health and isn't medical advice.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;What someone can physically manage is personal information. With an open-weight model running through Ollama, that profile and the history stay in two local files on the person's own computer. There is no account, no API key and no server holding it. A closed API would have meant sending someone's limits to a server they don't control.&lt;/p&gt;

&lt;p&gt;It also costs nothing to run. Because I ran the model myself and could read its raw reply, I was able to wrap it in a guard and send a rejected answer back with the reason. The model can be swapped with one setting (&lt;code&gt;PL_MODEL&lt;/code&gt;), though I only used &lt;code&gt;gemma3:4b&lt;/code&gt;. It will work without internet once the model is downloaded.&lt;/p&gt;

&lt;p&gt;The trade-off is that a small local model is slower and sometimes gives odd suggestions, which is why the guard exists.&lt;/p&gt;

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

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

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