<?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: Trupti Lande</title>
    <description>The latest articles on DEV Community by Trupti Lande (@trupti_lande_7ff53a0e94f5).</description>
    <link>https://dev.to/trupti_lande_7ff53a0e94f5</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%2F4153698%2Fa9e600d4-9ead-4883-9c58-2620893f7b79.png</url>
      <title>DEV Community: Trupti Lande</title>
      <link>https://dev.to/trupti_lande_7ff53a0e94f5</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/trupti_lande_7ff53a0e94f5"/>
    <language>en</language>
    <item>
      <title>My Aaji Can't Read Her Prescription. So I Built Her a Companion.</title>
      <dc:creator>Trupti Lande</dc:creator>
      <pubDate>Sun, 04 Oct 2026 16:33:04 +0000</pubDate>
      <link>https://dev.to/trupti_lande_7ff53a0e94f5/my-aaji-cant-read-her-prescription-so-i-built-her-a-companion-e2l</link>
      <guid>https://dev.to/trupti_lande_7ff53a0e94f5/my-aaji-cant-read-her-prescription-so-i-built-her-a-companion-e2l</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;p&gt;My Aaji is comfortable in Marathi.&lt;/p&gt;

&lt;p&gt;A prescription, unfortunately, doesn't care.&lt;/p&gt;

&lt;p&gt;It comes home as a small piece of paper filled with medicine names, abbreviations like &lt;code&gt;1-0-1&lt;/code&gt;, and instructions like "after food" and somehow, she's expected to figure it all out and remember it every single day.&lt;/p&gt;

&lt;p&gt;I kept thinking: we have AI that can write essays, generate code and hold a conversation. Why can't I make something that simply makes &lt;em&gt;this one thing&lt;/em&gt; easier for her?&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Med Companion&lt;/strong&gt;.&lt;/p&gt;

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

&lt;p&gt;Med Companion turns a photo of a prescription into &lt;strong&gt;verified medication reminders in her own language&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;She (or a family member) takes a photo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma&lt;/strong&gt; extracts what is actually written.&lt;/li&gt;
&lt;li&gt;A family member &lt;strong&gt;checks it against the original prescription.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Temporal&lt;/strong&gt; makes sure a reminder doesn't disappear if nobody responds.&lt;/li&gt;
&lt;li&gt;When it's time, the reminder is read aloud in &lt;strong&gt;Marathi, Hindi or Tamil&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;She can simply say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"मी घेतली."&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;I took it.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And if a dose still isn't confirmed after a couple of reminders, it shows up in a &lt;strong&gt;Family view&lt;/strong&gt;, so someone can check in with a phone call instead of finding out days later.&lt;/p&gt;

&lt;p&gt;There is one rule behind all of it:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The AI is never allowed to guess.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If the prescription doesn't print a time, Med Companion doesn't invent one.&lt;br&gt;
If a medicine name isn't clear, it asks for verification.&lt;br&gt;
Nothing gets scheduled until a person checks the extracted details against the original.&lt;/p&gt;

&lt;p&gt;Because with medicine, &lt;em&gt;"I'm not sure"&lt;/em&gt; is a much better answer than a confident wrong one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try it in 30 seconds:&lt;/strong&gt; open the app, tap &lt;strong&gt;Try sample prescription&lt;/strong&gt; (it's fictional), watch it stop at &lt;em&gt;"Do not schedule yet"&lt;/em&gt; until every detail is verified, then confirm and hear the Marathi reminder.&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://drive.google.com/file/d/15URuIYFq9CZv1bk1mObt_xuAasB_DQec/view?usp=sharing" rel="noopener noreferrer" class="c-link"&gt;
            Untitled design (1).mp4 - Google Drive
          &lt;/a&gt;
        &lt;/h2&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fssl.gstatic.com%2Fdocs%2Fdoclist%2Fimages%2Fdrive_favicon_2026_32dp.png" width="32" height="32"&gt;
          drive.google.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The demo uses a fictional, clearly labelled sample prescription and walks through the whole journey:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;photo → extraction → caregiver verification → reminder → voice confirmation → family view&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Demo mode compresses reminder times into seconds, so you don't have to wait until 9 AM.)&lt;/em&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/TruptiLande" rel="noopener noreferrer"&gt;
        TruptiLande
      &lt;/a&gt; / &lt;a href="https://github.com/TruptiLande/med-companion" rel="noopener noreferrer"&gt;
        med-companion
      &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;Med Companion&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Prescription photo -&amp;gt; PaddleOCR -&amp;gt; Gemma (Ollama) -&amp;gt; caregiver confirms -&amp;gt; Temporal reminders -&amp;gt; ElevenLabs voice -&amp;gt; family alert
The AI only explains what is printed on the prescription. It never prescribes or changes doses.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Run&lt;/h2&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;ollama pull gemma3:4b&lt;/code&gt; (or set GEMMA_MODEL to any Gemma tag you have)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;py -3.12 -m pip install -r backend/ocr/requirements.txt&lt;/code&gt; (EasyOCR models download the first time fallback is needed)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;temporal server start-dev&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cd backend &amp;amp;&amp;amp; cp .env.example .env &amp;amp;&amp;amp; npm i &amp;amp;&amp;amp; npm run worker&lt;/code&gt; and, in a second terminal, &lt;code&gt;npm run dev&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cd frontend &amp;amp;&amp;amp; npm i &amp;amp;&amp;amp; npm run dev&lt;/code&gt; -&amp;gt; &lt;a href="http://localhost:5173" rel="nofollow noopener noreferrer"&gt;http://localhost:5173&lt;/a&gt;
Set DEMO=1 in .env so reminders fire in seconds (retry after 60s) instead of at clock time.
Set &lt;code&gt;OCR_CONFIDENCE_THRESHOLD&lt;/code&gt; in &lt;code&gt;backend/.env&lt;/code&gt; to adjust when EasyOCR fallback is attempted. Low-confidence results stay in caregiver review.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Voice reminders&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Automatic spoken reminders are enabled while the app is open. If your browser…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/TruptiLande/med-companion" 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;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Prescription photo
     ↓
PaddleOCR / EasyOCR
     ↓
Gemma (local, via Ollama)
     ↓
Human verification
     ↓
Temporal → reminders → family view
     ↓
Marathi / Hindi / Tamil voice
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemma + Ollama&lt;/strong&gt; extract the medicine name, strength and frequency at &lt;code&gt;temperature: 0&lt;/code&gt;, with the output validated by a strict schema. Anything unclear comes back as &lt;code&gt;null&lt;/code&gt; and goes to review instead of being guessed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PaddleOCR / EasyOCR&lt;/strong&gt; read the photo locally. When confidence is low, the app says so and keeps the prescription in review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Temporal&lt;/strong&gt; runs every dose as a durable workflow: wait, remind, listen for "taken" or "snooze", retry, then mark it missed and flag the family. It survives restarts, which matters for something people rely on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mastra&lt;/strong&gt; powers a small assistant that answers questions like &lt;em&gt;"What medicines do I take today?"&lt;/em&gt; using only the confirmed schedule. It refuses to give medical advice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ElevenLabs&lt;/strong&gt; provides the spoken Marathi, Hindi and Tamil. It's optional: without it, the app falls back to browser speech or plain text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React + Vite&lt;/strong&gt; for the interface, local &lt;strong&gt;MongoDB&lt;/strong&gt; for state.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;A prescription contains someone's name, medicines and health information. For something this personal, I wanted &lt;strong&gt;control and privacy to be part of the design, not an afterthought.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Running the core AI locally with open pieces gave me things a closed API couldn't:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Her prescription doesn't leave the machine&lt;/strong&gt; just to be understood. OCR, Gemma, Temporal and the database all run locally. Only the optional voice feature needs the internet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control over behavior, not just prompts.&lt;/strong&gt; Because I run the model myself, I could enforce strict schemas, &lt;code&gt;null&lt;/code&gt; over guesses, and a mandatory human check.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No per-reminder cost.&lt;/strong&gt; A reminder app that nudges someone daily for years shouldn't come with a metered bill.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's swappable.&lt;/strong&gt; Changing the model is a single setting, so a better open Marathi-capable model can drop in later.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ElevenLabs is a closed service, so I kept it &lt;strong&gt;optional on purpose.&lt;/strong&gt; The safety loop never depends on it.&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; local Gemma for strict, validated extraction and plain-language explanations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Temporal:&lt;/strong&gt; a durable workflow for every dose, with snooze, retries, missed-dose handling and family escalation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Mastra:&lt;/strong&gt; a tool-using schedule assistant that answers only from the confirmed schedule.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of ElevenLabs:&lt;/strong&gt; spoken multilingual reminders, with graceful fallback when offline.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;This isn't meant to replace a doctor.&lt;br&gt;
It isn't meant to replace a pharmacist.&lt;br&gt;
And it definitely isn't meant to replace family.&lt;/p&gt;

&lt;p&gt;It's just meant to make one small part of taking medicine a little less confusing for someone I love.&lt;/p&gt;

&lt;p&gt;I'm still waiting to properly hand it over to my Aaji, so I won't invent a reaction for the sake of this post.&lt;/p&gt;

&lt;p&gt;But I know what I hope happens.&lt;/p&gt;

&lt;p&gt;The next time she looks at that little prescription slip, she won't have to figure it out alone.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;काळजी घ्या, Aaji.&lt;/em&gt; (&lt;em&gt;"Take care."&lt;/em&gt;)&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Med Companion only uses information explicitly present on a prescription. It never prescribes, changes doses, or provides medical advice. Every schedule must be verified by a person before reminders begin.&lt;/em&gt;&lt;/p&gt;

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