<?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: PARTH BIDARI</title>
    <description>The latest articles on DEV Community by PARTH BIDARI (@parth_bidari).</description>
    <link>https://dev.to/parth_bidari</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%2F2113698%2Ff9fc55f2-1527-4a98-986c-01b5651af713.png</url>
      <title>DEV Community: PARTH BIDARI</title>
      <link>https://dev.to/parth_bidari</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/parth_bidari"/>
    <language>en</language>
    <item>
      <title>SunRhythm: A Privacy-First Daylight Coach That Runs on Your Own Machine</title>
      <dc:creator>PARTH BIDARI</dc:creator>
      <pubDate>Mon, 12 Oct 2026 05:13:51 +0000</pubDate>
      <link>https://dev.to/parth_bidari/sunrhythm-a-privacy-first-daylight-coach-that-runs-on-your-own-machine-1ho4</link>
      <guid>https://dev.to/parth_bidari/sunrhythm-a-privacy-first-daylight-coach-that-runs-on-your-own-machine-1ho4</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;SunRhythm&lt;/strong&gt; is a local-first circadian health app that gets desk workers off their screens and into real daylight at the right times of day.&lt;/p&gt;

&lt;p&gt;If you're a developer or remote worker who spends 10+ hours under LED light, you know the pattern: afternoon crashes, late bedtimes, and habit trackers that die because they want constant manual input. SunRhythm needs &lt;strong&gt;zero data entry&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Open it and it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Finds the sun for you:&lt;/strong&gt; it uses your browser location and computes today's dawn, sunrise, solar noon, sunset and dusk on-device.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plans three daylight micro-breaks:&lt;/strong&gt; a morning light anchor, a midday reset and a sunset wind-down, timed to &lt;em&gt;today's&lt;/em&gt; sun.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gets you to actually step outside:&lt;/strong&gt; a "Step outside" button turns the whole screen into one giant countdown clock. A gentle chime and a vibration remind you when a break opens, and one tap on the banner starts the timer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tracks your progress automatically:&lt;/strong&gt; finishing a break logs it and the minutes outside. No typing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shows what's next at a glance:&lt;/strong&gt; the next break with a live countdown, a sun-position bar, and a timeline that ticks off finished breaks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A small Settings panel (wake and sleep times, manual location) is optional. Defaults work on first launch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who it's for:&lt;/strong&gt; SDEs, remote workers and anyone whose daylight exposure is a commute from the couch to the desk.&lt;/p&gt;

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

&lt;p&gt;SunRhythm runs entirely in your browser and talks to a local Ollama on your own machine, so there is no hosted version. Nothing about your location or sleep schedule ever leaves your device. Here is the app in action:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dashboard: next break, sun position, today's progress&lt;/strong&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%2Fss84dg1u3zmao7hon5f1.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%2Fss84dg1u3zmao7hon5f1.png" alt=" " width="800" height="1674"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI plan from a local Gemma 3 model (note the "AI plan" label)&lt;/strong&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%2F11y5o96fdkzh9on049ys.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%2F11y5o96fdkzh9on049ys.png" alt=" " width="800" height="1674"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step Outside mode: one giant countdown&lt;/strong&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%2Faweiy14ubfx9mlr9w1x8.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%2Faweiy14ubfx9mlr9w1x8.png" alt=" " width="800" height="1674"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reminder banner, and the "Today" card after finishing a break&lt;/strong&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%2Fym36buq1e9v6dwvmaaf3.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%2Fym36buq1e9v6dwvmaaf3.png" alt=" " width="800" height="1682"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Settings: wake and sleep times, optional location override&lt;/strong&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%2Ffbdbq57ih59zpodz1xoj.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%2Ffbdbq57ih59zpodz1xoj.png" alt=" " width="800" height="1674"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Want to try it? It takes about a minute. See the run steps in the Code section 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/Parth-G27" rel="noopener noreferrer"&gt;
        Parth-G27
      &lt;/a&gt; / &lt;a href="https://github.com/Parth-G27/SunRhythm" rel="noopener noreferrer"&gt;
        SunRhythm
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Privacy-first daylight break scheduler for desk workers. Local sun math + optional local Ollama AI plan. React + Vite + Tailwind.
    &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;☀️ SunRhythm&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;A privacy-first daylight coach for people who live on their screens.&lt;/strong&gt;
SunRhythm works out when the sun is up where you are, schedules three short outdoor breaks around it, and turns your screen into one big countdown when it's time to go outside.&lt;/p&gt;
&lt;p&gt;Everything runs in your browser. The only network call the app can ever make is to an &lt;a href="https://ollama.com" rel="nofollow noopener noreferrer"&gt;Ollama&lt;/a&gt; instance on your own machine.&lt;/p&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/Parth-G27/SunRhythm/docs/screenshots/1-dashboard.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FParth-G27%2FSunRhythm%2FHEAD%2Fdocs%2Fscreenshots%2F1-dashboard.png" alt="SunRhythm dashboard" width="260"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/Parth-G27/SunRhythm/docs/screenshots/3-step-outside.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FParth-G27%2FSunRhythm%2FHEAD%2Fdocs%2Fscreenshots%2F3-step-outside.png" alt="Step Outside countdown" width="260"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/Parth-G27/SunRhythm/docs/screenshots/2-ai-plan.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FParth-G27%2FSunRhythm%2FHEAD%2Fdocs%2Fscreenshots%2F2-ai-plan.png" alt="AI plan from a local model" width="260"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Ten hours under LED light means afternoon crashes and late bedtimes. Habit trackers don't fix that because they demand constant manual input. SunRhythm asks for nothing: open it, and it already knows where the sun is and what to do next.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automatic solar times.&lt;/strong&gt; Uses your browser location to compute dawn, sunrise, solar noon, sunset and dusk on-device with &lt;a href="https://github.com/mourner/suncalc" rel="noopener noreferrer"&gt;&lt;code&gt;suncalc&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Three daylight breaks a day.&lt;/strong&gt; A morning light anchor, a midday reset and a sunset wind-down, timed to today's…&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/Parth-G27/SunRhythm" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Run it yourself:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/Parth-G27/SunRhythm
&lt;span class="nb"&gt;cd &lt;/span&gt;SunRhythm
npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run dev     &lt;span class="c"&gt;# app&lt;/span&gt;
npm &lt;span class="nb"&gt;test&lt;/span&gt;        &lt;span class="c"&gt;# 44 unit tests&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Optional AI plan (any small Ollama model works):&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama pull gemma3:1b
ollama serve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

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

&lt;p&gt;&lt;strong&gt;The open-source AI:&lt;/strong&gt; local inference with &lt;strong&gt;Ollama&lt;/strong&gt;, running an open-weight &lt;strong&gt;Gemma 3&lt;/strong&gt; model (&lt;code&gt;gemma3:1b&lt;/code&gt; verified; the app also prefers &lt;code&gt;gemma3:4b&lt;/code&gt; and &lt;code&gt;phi3&lt;/code&gt; if installed). The browser talks straight to &lt;code&gt;localhost:11434&lt;/code&gt;. There is no backend, no API key and no cloud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How the AI is wired in:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The app asks Ollama which models are installed and uses a preferred one, otherwise the first installed chat model.&lt;/li&gt;
&lt;li&gt;The prompt contains only wake and sleep times and today's sunrise and sunset. &lt;strong&gt;Coordinates and place names are never sent&lt;/strong&gt;, not even to the local model.&lt;/li&gt;
&lt;li&gt;Small models are messy, so replies are strictly validated: exactly 3 breaks, valid times inside waking hours, non-empty text. The parser tolerates time ranges like &lt;code&gt;07:00-07:30&lt;/code&gt; and nested arrays, and retries once.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graceful degradation:&lt;/strong&gt; the UI shows a computed static schedule instantly and &lt;em&gt;upgrades&lt;/em&gt; to the AI plan only if it validates. If Ollama is off, slow (20 s limit), or returns garbage, the user never sees an error. The AI is an enhancement, never a dependency.&lt;/li&gt;
&lt;li&gt;A good plan is cached for the day in localStorage, so reloads don't re-run the model.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Stack:&lt;/strong&gt; React + Vite + Tailwind CSS v4, lucide-react icons, &lt;code&gt;suncalc&lt;/code&gt; for solar math, Web Audio (a synthesized chime, no audio files) and the Vibration API for alerts, and Vitest (44 tests). Persistence is &lt;code&gt;localStorage&lt;/code&gt; only. There is no state library; each concern is a small service plus a hook.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How I built it:&lt;/strong&gt; spec-driven development with &lt;strong&gt;GitHub Spec Kit&lt;/strong&gt; and Claude Code. I wrote a short constitution first (local-first, localStorage-only, graceful fallback, minimal friction, keep it simple). Each of the 9 features then went through spec → plan → tasks → implementation, with a Constitution Check at each plan. Testing the real model against the real app also caught a bug a stubbed test would have missed: my hard-coded model name wasn't installed on the machine, so the AI path silently never ran. It now auto-detects an installed model.&lt;/p&gt;

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

&lt;p&gt;SunRhythm needs your &lt;strong&gt;location&lt;/strong&gt; and your &lt;strong&gt;sleep schedule&lt;/strong&gt;, which is some of the most personal data there is. With a closed cloud API, the honest design would be "send your coordinates and bedtime to someone else's server." With an open-weight model running locally through Ollama, the privacy promise is a fact you can verify in the Network tab: the only requests go to &lt;code&gt;localhost&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Open models also made these things possible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No keys, no bills, no rate limits:&lt;/strong&gt; it works offline, on a plane, and for anyone who can run a 1B-parameter model on a laptop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You choose the model:&lt;/strong&gt; swap &lt;code&gt;gemma3:1b&lt;/code&gt; for &lt;code&gt;phi3&lt;/code&gt; or a bigger model with no code change, and the app adapts to whatever is installed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reliability becomes your job, and that's a good thing:&lt;/strong&gt; a small local model is imperfect, so I built validation, retries and a static fallback. The result is an app that is useful with or without the AI.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>hacktoberfest</category>
    </item>
    <item>
      <title>Pawelle: a private pet companion for my friend's cat, powered by a local open model</title>
      <dc:creator>PARTH BIDARI</dc:creator>
      <pubDate>Mon, 05 Oct 2026 00:03:35 +0000</pubDate>
      <link>https://dev.to/parth_bidari/pawelle-a-private-pet-companion-for-my-friends-cat-powered-by-a-local-open-model-4ni6</link>
      <guid>https://dev.to/parth_bidari/pawelle-a-private-pet-companion-for-my-friends-cat-powered-by-a-local-open-model-4ni6</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Pawelle is a small app that helps my friend Shontu look after her cat, Pinky. Each day Shontu taps through a quick check-in (mood, appetite, energy, play, litter box), and Pawelle writes a short, friendly plan for food and play. It also keeps a diary-style history, so she can see how Pinky has been lately.&lt;/p&gt;

&lt;p&gt;The plan is written by a small open-weight AI running on her own computer. There's no account and no cloud, and Pinky's details and photos stay on the machine.&lt;/p&gt;

&lt;p&gt;I wanted something simple she would actually use every day. After trying it, this is what Shontu told me:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;She loved the app and how easy it is to use. She can now keep track of Pinky in a diary-like way, and the AI meal plan is giving her much better ideas on how to look after Pinky. She's going to use it every day.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/Dmo-R7GNiC8" width="710" height="399"&gt;
  &lt;/iframe&gt;
&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/Parth-G27" rel="noopener noreferrer"&gt;
        Parth-G27
      &lt;/a&gt; / &lt;a href="https://github.com/Parth-G27/pawelle" rel="noopener noreferrer"&gt;
        pawelle
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Local-first pet wellbeing app: daily plans from an on-device open model
    &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;Pawelle 🐾&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;A gentle, private pet-wellbeing companion that runs entirely on your own computer.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tell Pawelle about your cat, check in once a day, and get a short, kind plan for food and play, written by a small open-weight AI model running locally. No account, no cloud, no data leaving your laptop.&lt;/p&gt;
&lt;p&gt;Pawelle was built for a friend, &lt;strong&gt;Shontu&lt;/strong&gt;, and her cat &lt;strong&gt;Pinky&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Pawelle gives general wellbeing suggestions. &lt;strong&gt;It is not a vet&lt;/strong&gt; and never diagnoses or recommends medicine.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What it does&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cat profile&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A three-step onboarding (only the name is required), up to two photos, allergies and conditions, and a "Pawelle knows Pinky 65%" nudge to add more.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Daily check-in&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mood, appetite, energy, play and litter box in a few taps, or one tap for "just like usual".&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Today's plan&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;One button asks a local AI model for a short plan: meals, play ideas and things to&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/Parth-G27/pawelle" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;It's MIT licensed. To run it, install Ollama, run &lt;code&gt;ollama pull gemma3:1b&lt;/code&gt;, then &lt;code&gt;npm install&lt;/code&gt; and &lt;code&gt;npm run dev&lt;/code&gt;. The README has the details.&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%2F1fq01nfi9z004gkfvfpc.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%2F1fq01nfi9z004gkfvfpc.png" alt=" " width="800" height="574"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;The front end is React with Vite and Tailwind. The back end is Express with SQLite. The AI is &lt;strong&gt;Gemma 3 1B&lt;/strong&gt;, an open-weight model that runs locally through &lt;strong&gt;Ollama&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I started with the model's weak spot. When I asked it for an unusual pasta recipe, it invented a dish and fake links, with total confidence. A pet app can't do that, so I kept the model on a short leash:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Safety rules run first, in plain code.&lt;/strong&gt; Two days of "not eating", or a danger word like chocolate or lilies in a note, skips the model entirely and shows a calm "please contact your vet" banner.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The model has a tiny job.&lt;/strong&gt; It writes one friendly sentence and picks meal times and play ideas from fixed lists. The app writes the rest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Everything it returns is checked.&lt;/strong&gt; Allergens, medicine words, made-up numbers and links are rejected. After one retry, you get a clearly labelled basic plan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free-text notes never reach the model&lt;/strong&gt;, so they can't be used to steer it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In a 24-run test with the real model, all 24 plans were valid, with a median time of about 2.6 seconds.&lt;/p&gt;

&lt;p&gt;I built it spec-first (a short spec, plan and task list for each feature, all in the repo), with an AI coding assistant doing much of the typing.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy.&lt;/strong&gt; A pet's health details and photos never leave the laptop. There's no server to trust.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No keys, no bills.&lt;/strong&gt; Everything talks to localhost, with no API keys and no cost per request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swap the model with one setting.&lt;/strong&gt; &lt;code&gt;OLLAMA_MODEL&lt;/code&gt; changes it. I picked a tiny model so it runs on any laptop, and a bigger one is a one-line change.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I could see and fix what went wrong.&lt;/strong&gt; The prompt, safety rules and allowed options are plain files in the repo, so when the model misbehaved, I tightened them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A closed API would have been quicker to set up, but it would have sent a friend's data away and charged per call. Using a small model also made me build the guardrails, and I think the app is better for it.&lt;/p&gt;

&lt;p&gt;One honest note: Gemma is open-weight under Google's own terms rather than a standard open-source licence. The app itself is MIT.&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;Pawelle runs &lt;strong&gt;Gemma 3 1B&lt;/strong&gt;, Google's open-weight model, locally through Ollama. It's the only AI in the app. Gemma writes the friendly summary of each plan and picks meal times and play ideas, inside a safety harness: red-flag checks run before it, its choices come from fixed lists, and everything it writes is checked afterwards.&lt;/p&gt;

&lt;p&gt;Gemma 3 1B is small enough to run on any laptop, and a bigger Gemma (like 4B) is a one-setting change (&lt;code&gt;OLLAMA_MODEL&lt;/code&gt;). The Ollama client and the prompt are in &lt;a href="https://github.com/Parth-G27/pawelle/blob/main/pawelle-app/server/src/services/ollama.js" rel="noopener noreferrer"&gt;&lt;code&gt;ollama.js&lt;/code&gt;&lt;/a&gt; and &lt;a href="https://github.com/Parth-G27/pawelle/blob/main/pawelle-app/server/src/services/prompts.js" rel="noopener noreferrer"&gt;&lt;code&gt;prompts.js&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

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