<?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: Himani Sahu</title>
    <description>The latest articles on DEV Community by Himani Sahu (@himani_sahu_de9e1ed9b002d).</description>
    <link>https://dev.to/himani_sahu_de9e1ed9b002d</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%2F4091606%2F94fe9bb6-06a6-48bb-93c0-a54204e70197.jpg</url>
      <title>DEV Community: Himani Sahu</title>
      <link>https://dev.to/himani_sahu_de9e1ed9b002d</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/himani_sahu_de9e1ed9b002d"/>
    <language>en</language>
    <item>
      <title>Reme (Remember Me)</title>
      <dc:creator>Himani Sahu</dc:creator>
      <pubDate>Mon, 05 Oct 2026 06:22:51 +0000</pubDate>
      <link>https://dev.to/himani_sahu_de9e1ed9b002d/reme-remember-me-791</link>
      <guid>https://dev.to/himani_sahu_de9e1ed9b002d/reme-remember-me-791</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;When I read the prompt about building something for a loved one, I could think of one person, my mom. She runs a business, she's always busy and she skips her multivitamins, more than she takes it. I am not around always to remind her, and when I do I get the same reply, &lt;br&gt;
&lt;em&gt;"lelungi baad mein"&lt;/em&gt; (I'll take it later). Honestly, it annoys me sometimes.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Reme&lt;/strong&gt; (from &lt;em&gt;remember me&lt;/em&gt;). It's a small helper that reminds her on &lt;strong&gt;WhatsApp&lt;/strong&gt;, the only app she actually uses. It writes &lt;strong&gt;from my own number&lt;/strong&gt;, in the &lt;strong&gt;Hinglish&lt;/strong&gt; we text each other in, so to her it's just me checking in.&lt;/p&gt;

&lt;p&gt;This is what our chats looked like before Reme. I was the reminder system:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Me:&lt;/strong&gt; mummy khana done? &lt;em&gt;(Mummy, eaten?)&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;Mummy:&lt;/strong&gt; Han krungi thodi der mein &lt;em&gt;(Yeah, I'll eat in a bit)&lt;/em&gt;&lt;br&gt;
...an hour later...&lt;br&gt;
&lt;strong&gt;Me:&lt;/strong&gt; done?&lt;br&gt;
&lt;strong&gt;Mummy:&lt;/strong&gt; Haa beta ho gya just abhi &lt;em&gt;(Yes dear, just did)&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;Me:&lt;/strong&gt; Vitamins le liye? &lt;em&gt;(Took your vitamins?)&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;Mummy:&lt;/strong&gt; Ha le liya &lt;em&gt;(Yes, took it)&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What Reme does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;At 11:45, after her breakfast (she eats around 11 to 11:30), it asks &lt;em&gt;"Mummy, nashta ho gaya?"&lt;/em&gt; (had breakfast?)&lt;/li&gt;
&lt;li&gt;When she says yes, it reminds her to take the vitamin.&lt;/li&gt;
&lt;li&gt;It understands &lt;em&gt;"10 min ruko"&lt;/em&gt; (wait 10 min), &lt;em&gt;"lelungi baad mein"&lt;/em&gt;(I will take it later) and &lt;em&gt;"aaj nahi lena, pet kharab hai"&lt;/em&gt; (not today, upset stomach) and waits or backs off.&lt;/li&gt;
&lt;li&gt;If she ignores three nudges, it stops nagging &lt;strong&gt;her&lt;/strong&gt; and messages &lt;strong&gt;me&lt;/strong&gt; instead: &lt;em&gt;"Ek call kar lo?"&lt;/em&gt; (maybe give her a call?)&lt;/li&gt;
&lt;li&gt;It &lt;strong&gt;stays quiet&lt;/strong&gt; on everything else. When she asks &lt;em&gt;"Ab ghar kab aaogi?"&lt;/em&gt; (when are you coming home?), that's a conversation for me, not a bot.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/48Ev12pvfUE" 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/Siddhi-sahu" rel="noopener noreferrer"&gt;
        Siddhi-sahu
      &lt;/a&gt; / &lt;a href="https://github.com/Siddhi-sahu/reme" rel="noopener noreferrer"&gt;
        reme
      &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;Reme&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Remember me.&lt;/em&gt; A WhatsApp nudge that reminds my mummy to take her daily multivitamin after breakfast, in Hinglish, from my own number.&lt;/p&gt;
&lt;p&gt;It understands her replies ("Haan", "Ha leli", "10 min ruko", "aaj nahi lena") with &lt;strong&gt;Gemma 3 4B running locally through Ollama&lt;/strong&gt;, so her messages never leave my laptop.&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;15:20  Reme → mummy: Mummy, lunch ho gaya? 🍽️
15:22  mummy: Haan                     [gemma: meal_done]
15:23  Reme → mummy: Mummy, vitamin le lijiye 💊
15:23  mummy: Ok                       [ignored: just an acknowledgement]
15:23  mummy: Ha leli                  [gemma: vitamin_taken]
15:23  Reme → mummy: Shabaash mummy! 💊❤️
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;(the first real run, 4 Oct 2026)&lt;/em&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;ul&gt;
&lt;li&gt;
&lt;strong&gt;One vitamin a day, after breakfast&lt;/strong&gt; (she eats around 11 to 11:30). Once it's taken, Reme goes quiet for the day.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;She messages first&lt;/strong&gt; ("nashta ho gaya"): Reme reminds her 15 minutes later.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;She doesn't&lt;/strong&gt;: at 11:45 Reme asks "nashta ho gaya?", then nudges…&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/Siddhi-sahu/reme" 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;The open Stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 3 4B&lt;/strong&gt; (Google's open-weight model) running locally with &lt;strong&gt;Ollama&lt;/strong&gt; on my MacBook Air. About 2 seconds per message.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Baileys&lt;/strong&gt;, an open-source WhatsApp Web client (no browser needed), linked to my own WhatsApp like WhatsApp Web.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node.js + TypeScript&lt;/strong&gt;, and &lt;strong&gt;SQLite&lt;/strong&gt; (built into Node) so reminders survive a restart.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gemma has exactly one job: read her message and say what it means. Ollama's &lt;code&gt;format&lt;/code&gt; option takes a JSON schema, so Gemma &lt;em&gt;has&lt;/em&gt; to answer in this shape:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Intent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;object&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
 &lt;span class="na"&gt;intent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;enum&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;meal_done&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;vitamin_taken&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;snooze&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;skip&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;other&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
 &lt;span class="na"&gt;meal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;enum&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;breakfast&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;lunch&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dinner&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;unknown&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;nullable&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
 &lt;span class="na"&gt;snooze_minutes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;number&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;nullable&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
 &lt;span class="na"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;ollama&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
 &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gemma3:4b&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="na"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
   &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;system&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;SYSTEM&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
   &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Your last message to her: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;lastSent&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;\nHer message: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
 &lt;span class="p"&gt;],&lt;/span&gt;
 &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toJSONSchema&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Intent&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
 &lt;span class="na"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;temperature&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything after that is ordinary code: when to remind, how many times, when to tell me. &lt;strong&gt;Every message she receives is written by me&lt;/strong&gt; in one file. I tried letting Gemma write the replies and got gems like &lt;em&gt;"Aaja mummy, tumhari dawa bhi le hi le"&lt;/em&gt; (roughly "come mummy, just take your medicine too"). When it's your mom on the other end, predictable beats clever.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Making a 4B model reliable&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I tested every change against real messages, most of them my mom's actual texts.&lt;/p&gt;

&lt;p&gt;Four bugs that taught me something:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;firstly, &lt;strong&gt;"Ok" counted as "vitamin taken".&lt;/strong&gt; even If the ok was out of context. remember would stop reminding. Rewording the prompt didn't fix it, so a few lines of code do: a bare ok/acha/👍 to a statement is never "taken".&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;My own question was ambiguous.&lt;/strong&gt; The check-in used to say &lt;em&gt;"lunch ho gaya? Ho gaya ho to vitamin le lijiye"&lt;/em&gt; (had lunch? if so, take the vitamin), so "haan" could mean either. I fixed the wording, not the model.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;"Our Lunch ho gya" at 2:35pm was classified as dinner.&lt;/strong&gt; Now the meal comes from the word she used, or else the clock. The model doesn't guess.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fixing one thing broke another.&lt;/strong&gt; &lt;em&gt;"Han krungi thodi der mein"&lt;/em&gt; (yeah, I'll do it in a bit) was read as "done". When I explained future tense in the prompt, Gemma started calling a plain "haan" a snooze. Future tense in Hindi has a visible ending (&lt;em&gt;-ungi&lt;/em&gt;), so it became one line of code instead.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The lesson from all four: &lt;strong&gt;with a small model, keep the prompt for fuzzy language and move every predictable rule into code.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To test whole mornings without waiting for real ones, &lt;code&gt;pnpm simulate&lt;/code&gt; runs a fake clock through five scenarios (she replies, she says "lelungi baad mein", she says "not today", she ignores it) in seconds.&lt;/p&gt;

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

&lt;p&gt;Uhmm, so,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;These are my mother's health details and her personal chats with her daughter. With Gemma running locally, no AI company ever sees them, so her messages never leave my laptop.&lt;/li&gt;
&lt;li&gt;Its free, and works.&lt;/li&gt;
&lt;/ul&gt;

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

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

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

&lt;h2&gt;
  
  
  My mother's reply
&lt;/h2&gt;

&lt;p&gt;I told her that it wasn't me who texted her last day, she said,(rough translation) "I didnot know, I thought it was you. My daughter couldn't even text me herself huhu" lol.&lt;/p&gt;

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