<?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: Senthil raja .R</title>
    <description>The latest articles on DEV Community by Senthil raja .R (@senthil_raja_r).</description>
    <link>https://dev.to/senthil_raja_r</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%2F3923680%2F6d9264de-2639-4d2b-b36d-e3389d847ce0.jpg</url>
      <title>DEV Community: Senthil raja .R</title>
      <link>https://dev.to/senthil_raja_r</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/senthil_raja_r"/>
    <language>en</language>
    <item>
      <title>SunSeat: Touch Grass in 20 Minutes with Offline Gemma</title>
      <dc:creator>Senthil raja .R</dc:creator>
      <pubDate>Sun, 11 Oct 2026 18:22:42 +0000</pubDate>
      <link>https://dev.to/senthil_raja_r/sunseat-touch-grass-in-20-minutes-with-offline-gemma-39eh</link>
      <guid>https://dev.to/senthil_raja_r/sunseat-touch-grass-in-20-minutes-with-offline-gemma-39eh</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;SunSeat: a 20-minute sunny-bench finder for night-shift workers, SAD winters, and overstimulated brains. Enter location + minutes + needs (flat / quiet / toilet / shade / dog), get 3 sun pockets with a 0-100 go-now score + a 60-second mission card. Screen time under a minute, the rest is outside.&lt;/p&gt;

&lt;p&gt;I built it for myself in Chennai: short October evenings, no time for a hike, need sun fast without scrolling.&lt;/p&gt;

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

&lt;p&gt;Live: &lt;a href="https://sun-seat.onrender.com" rel="noopener noreferrer"&gt;https://sun-seat.onrender.com&lt;/a&gt; (verified &lt;code&gt;/api/health ok&lt;/code&gt;, frontend serves)&lt;br&gt;
Video (90s): screen search -&amp;gt; walk -&amp;gt; sunny bench -&amp;gt; mission card read aloud (narration in &lt;code&gt;demo-narration.txt&lt;/code&gt;, MP3 via ElevenLabs).&lt;br&gt;
Offline proof: load once online, airplane mode on, reload &lt;code&gt;/&lt;/code&gt; - results render from &lt;code&gt;localStorage sunseat_last&lt;/code&gt;. Screenshot in repo &lt;code&gt;docs/&lt;/code&gt; after you test.&lt;br&gt;
Cover: &lt;code&gt;frontend/cover.svg&lt;/code&gt; (1000x420).&lt;/p&gt;

&lt;p&gt;Local fallback if needed: &lt;code&gt;pip install -r requirements.txt &amp;amp;&amp;amp; uvicorn backend.main:app --port 8000&lt;/code&gt;.&lt;/p&gt;

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

&lt;p&gt;Repo: &lt;a href="https://github.com/Senthil455/Sun-Seat" rel="noopener noreferrer"&gt;https://github.com/Senthil455/Sun-Seat&lt;/a&gt; (MIT)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;backend/main.py&lt;/code&gt; - FastAPI, solar math, OSM Overpass, Open-Meteo, &lt;code&gt;best_hour_tabpfn()&lt;/code&gt;, &lt;code&gt;gemma_brief()&lt;/code&gt; via Ollama&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;frontend/index.html&lt;/code&gt; - single-file PWA, offline cache, free TTS Speak button&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;scripts/tabpfn_demo.py&lt;/code&gt; + &lt;code&gt;data/weather_history.csv&lt;/code&gt; - TabPFN evidence, CI check&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tests/test_api.py&lt;/code&gt; - 3 tests, all passing&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Dockerfile&lt;/code&gt; + &lt;code&gt;render.yaml&lt;/code&gt; + &lt;code&gt;.github/workflows/ci.yml&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Open core, not decoration:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Gemma via Ollama writes the mission card. Prompt + output logged in &lt;code&gt;/api/brief&lt;/code&gt;. Local run returns &lt;code&gt;mode:local-open-weight&lt;/code&gt; - proof in &lt;code&gt;docs/ollama-proof-gemma2-2b.json&lt;/code&gt; (full &lt;code&gt;gemma2:2b&lt;/code&gt;, tested on laptop; &lt;code&gt;docs/ollama-proof.json&lt;/code&gt; shows the lighter &lt;code&gt;gemma3:270m&lt;/code&gt; swap). Render free has no GPU/Ollama so it returns an honest &lt;code&gt;hosted-template-fallback&lt;/code&gt; - cite the proof files as evidence.&lt;/li&gt;
&lt;li&gt;OSM Overpass supplies parks / benches / toilets + &lt;code&gt;surface/smoothness/incline&lt;/code&gt; tags. Open-Meteo supplies cloud + radiation. Pure-python solar elevation + transparent &lt;code&gt;sun_score()&lt;/code&gt; 0-100.&lt;/li&gt;
&lt;li&gt;TabPFN: &lt;code&gt;scripts/tabpfn_demo.py&lt;/code&gt; trains &lt;code&gt;TabPFNRegressor&lt;/code&gt; on &lt;code&gt;data/weather_history.csv&lt;/code&gt; when installed, else sklearn fallback with stderr log. Backend &lt;code&gt;best_hour_tabpfn()&lt;/code&gt; does the same live. Run &lt;code&gt;python scripts/tabpfn_demo.py --json&lt;/code&gt; and paste output.&lt;/li&gt;
&lt;li&gt;SerpApi &lt;code&gt;/api/foliage&lt;/code&gt;: live search when &lt;code&gt;SERPAPI_KEY&lt;/code&gt; set, else &lt;code&gt;cached-offline&lt;/code&gt;. Sentry inits when &lt;code&gt;SENTRY_DSN&lt;/code&gt; set - paste trace + &lt;code&gt;latency_ms&lt;/code&gt; from &lt;code&gt;/api/pockets&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Swap models in one var: &lt;code&gt;OLLAMA_MODEL=llama3.2:1b&lt;/code&gt;.&lt;/p&gt;

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

&lt;p&gt;Closed maps hide the tags I filter on - surface, smoothness, bench, toilets. I cannot build flat/quiet/toilet search on Google Maps API. OSM exposes them freely.&lt;/p&gt;

&lt;p&gt;Closed AI dies on the trail: needs signal, per-token cost, uploads your location + photo. SunSeat caches OSM + weather JSON after first fetch, then Gemma 2B runs on the laptop with no internet, $0, private. I edited the prompt locally, swapped models, no approval, no bill. That offline airplane-mode run is the whole point - and only possible open.&lt;/p&gt;

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

&lt;p&gt;Built with GitHub Copilot CLI + this coding agent. Process evidence: commit history + CI run &lt;code&gt;.github/workflows/ci.yml&lt;/code&gt; (health + tabpfn check). Screenshots attached: Ollama &lt;code&gt;mode:local-open-weight&lt;/code&gt; brief, airplane-mode reload.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Best Use of Gemma (local &lt;code&gt;gemma2:2b&lt;/code&gt; mission card)&lt;/li&gt;
&lt;li&gt;Best Use of Render (Dockerfile + live URL)&lt;/li&gt;
&lt;li&gt;Best Use of TabPFN (CSV forecast, &lt;code&gt;scripts/tabpfn_demo.py&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Best Use of SerpApi (live foliage grounding / cached fallback)&lt;/li&gt;
&lt;li&gt;Best Use of GitHub Copilot (Copilot CLI + Actions CI)&lt;/li&gt;
&lt;li&gt;Best Use of ElevenLabs (&lt;code&gt;demo-narration.txt&lt;/code&gt; -&amp;gt; MP3 narration)&lt;/li&gt;
&lt;/ul&gt;

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