<?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: Matias Silveira</title>
    <description>The latest articles on DEV Community by Matias Silveira (@jmsilveira22).</description>
    <link>https://dev.to/jmsilveira22</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%2F4162443%2Fa111c0e9-be1e-4aa2-b425-cdb847ca7081.jpeg</url>
      <title>DEV Community: Matias Silveira</title>
      <link>https://dev.to/jmsilveira22</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jmsilveira22"/>
    <language>en</language>
    <item>
      <title>Couchy: a companion with a real voice so my grandmother never misses a pill</title>
      <dc:creator>Matias Silveira</dc:creator>
      <pubDate>Sun, 04 Oct 2026 23:21:33 +0000</pubDate>
      <link>https://dev.to/jmsilveira22/couchy-a-companion-with-a-real-voice-so-my-grandmother-never-misses-a-pill-10co</link>
      <guid>https://dev.to/jmsilveira22/couchy-a-companion-with-a-real-voice-so-my-grandmother-never-misses-a-pill-10co</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;This is an app that I built thinking of my grandmother. She used to have a lot of problems taking her pills because she could not remember neither when nor how to take them. And now I built something that could have helped her a lot back then.&lt;/p&gt;

&lt;p&gt;Couchy is an Android app for my grandmother: a warm companion that reminds them to take their pills, in a voice they&lt;br&gt;
picked, and keeps their family in the loop.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A real alarm.&lt;/strong&gt; It rings like an alarm clock: on the alarm audio stream (so it sounds even if the phone is
muted or in Do Not Disturb), it wakes the screen and opens over the lock screen, and the companion says the
name of the medicine out loud until my grandmother answers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Four companions&lt;/strong&gt; (Grace, Walter, Sunny, Arthur), each with their own voice and personality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Talk back.&lt;/strong&gt; my grandmother can say "I already took it after breakfast" or "I feel a bit dizzy" and the companion
understands, answers, marks the dose, and tells the family if it sounds worrying.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A help button.&lt;/strong&gt; One tap, a short voice note, and every relative gets an urgent Telegram alert with the audio.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Family peace of mind.&lt;/strong&gt; A Telegram bot alerts relatives when a dose is late (60 min by default), when there
has been no activity for a while (3 h by default, configurable, quiet at night), and on request sends adherence
stats: how many pills are taken, how late, how consistent.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://youtube.com/shorts/4fhGci_ESHY?feature=share" rel="noopener noreferrer"&gt;https://youtube.com/shorts/4fhGci_ESHY?feature=share&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;APK: &lt;a href="https://github.com/hetairoii/couchy/releases/tag/v1.0" rel="noopener noreferrer"&gt;https://github.com/hetairoii/couchy/releases/tag/v1.0&lt;/a&gt;  ·  Backend: &lt;a href="https://couchy-api.onrender.com/health" rel="noopener noreferrer"&gt;https://couchy-api.onrender.com/health&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  What my grandmother would have said
&lt;/h2&gt;

&lt;p&gt;I believe this would have been a lot of preassure realising for her. She always knew she had to take the pills, but at some point she forgot how to read and understanding the pills she had to take and how was a whole laborous task for her. I like to think that having this being done by her grandson would have made her smile.&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/hetairoii" rel="noopener noreferrer"&gt;
        hetairoii
      &lt;/a&gt; / &lt;a href="https://github.com/hetairoii/couchy" rel="noopener noreferrer"&gt;
        couchy
      &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;Couchy&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A warm AI companion that helps an elderly person remember their pills, and keeps their family in the loop.&lt;/p&gt;
&lt;p&gt;Built for the DEV &lt;strong&gt;Hacktoberfest 2026 Weekend Challenge: Build for a Friend&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Brain:&lt;/strong&gt; Gemma (open-weight). In production it runs through Google AI Studio (&lt;code&gt;LLM_PROVIDER=google&lt;/code&gt;); locally
it runs with Ollama (&lt;code&gt;LLM_PROVIDER=ollama&lt;/code&gt;). It writes the reminders, understands spoken replies, and drafts
family alerts and summaries. Prompts are in &lt;a href="https://github.com/hetairoii/couchy/docs/prompts.md" rel="noopener noreferrer"&gt;&lt;code&gt;docs/prompts.md&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice:&lt;/strong&gt; ElevenLabs TTS and Scribe. &lt;code&gt;VOICE_PROVIDER=piper&lt;/code&gt; switches to the open-source Piper voices (fully
local); there is no automatic fallback to a different voice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline reminders:&lt;/strong&gt; audio is pre-generated and cached on the phone, so the voice plays without internet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A real alarm:&lt;/strong&gt; on Android a native module (&lt;code&gt;mobile/modules/couchy-alarm&lt;/code&gt;) rings like an alarm clock: on the
alarm audio stream (so it sounds on silent / Do Not Disturb), waking the screen and opening Couchy over the…&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/hetairoii/couchy" 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;Android app (Expo / React Native + a small Kotlin module for the alarm)
        │  events, voice notes
        ▼
FastAPI backend (Render) ──► Gemma  (writes, understands, decides)
        │                ──► ElevenLabs  (voice out, speech in)
        │                ──► Postgres  (doses, settings)
        ▼
Telegram bot ──► family
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Gemma is the brain.&lt;/strong&gt; Every piece of "thinking" goes through it, always with structured JSON output validated&lt;br&gt;
with Pydantic and a fixed fallback if a call fails:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It writes ten fresh, personal reminders per medicine (it knows my grandmother's name, family, likes and routine) so
the companion never repeats itself.&lt;/li&gt;
&lt;li&gt;It classifies what my grandmother says out loud (&lt;code&gt;taken&lt;/code&gt;, &lt;code&gt;snooze&lt;/code&gt;, &lt;code&gt;skip&lt;/code&gt;, &lt;code&gt;concern&lt;/code&gt;, &lt;code&gt;chat&lt;/code&gt;) and writes the reply,
including when to alert the family.&lt;/li&gt;
&lt;li&gt;It drafts the family alerts and the weekly summary from numbers computed in pandas, never from the model's
own arithmetic.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It never gives medical advice. In production the model is &lt;code&gt;gemma-4-26b-a4b-it&lt;/code&gt; served through Google AI Studio;&lt;br&gt;
the repo also runs it fully local with Ollama (&lt;code&gt;gemma3:4b&lt;/code&gt;) through the included Docker Compose.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ElevenLabs gives it a voice.&lt;/strong&gt; &lt;code&gt;eleven_v3&lt;/code&gt; voices the pre-generated reminders (with expressive tags like&lt;br&gt;
&lt;code&gt;[warmly]&lt;/code&gt;), &lt;code&gt;eleven_flash_v2_5&lt;/code&gt; voices live replies, and Scribe turns my grandmother's speech into text for Gemma.&lt;br&gt;
Reminders are generated ahead of time and cached on the phone, so the alarm speaks even with no internet. If the&lt;br&gt;
voice is ever unavailable, the app shows large text and vibrates: it never falls back to a robotic system voice,&lt;br&gt;
which would confuse the person it is built for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The alarm is native.&lt;/strong&gt; A small Kotlin module (&lt;code&gt;mobile/modules/couchy-alarm&lt;/code&gt;) uses &lt;code&gt;AlarmManager.setAlarmClock&lt;/code&gt;&lt;br&gt;
and a foreground service on &lt;code&gt;USAGE_ALARM&lt;/code&gt;, plus a full-screen intent, so it behaves like a real alarm clock and&lt;br&gt;
survives reboots. A checklist in the caregiver settings walks through the permissions Android requires.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Designed for an older person.&lt;/strong&gt; Large text, 64 dp buttons, one main action per screen, no typing in the daily&lt;br&gt;
flow, caregiver settings behind a PIN, and an illustrated look that matches the portraits of the companions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deployed for free.&lt;/strong&gt; The API runs on Render's free tier with a free Postgres, and I built the app with&lt;br&gt;
Claude Code as my coding agent.&lt;/p&gt;

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

&lt;p&gt;It matters how we innovate because it changes how people's live their lifes. And through innovation we make the world slightly better day by day.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Health data is sensitive.&lt;/strong&gt; With an open-weight model the same code runs on a server I control. For a
caregiver, "where does my mother's medication list go?" has a real answer: swap one environment variable
(&lt;code&gt;LLM_PROVIDER=ollama&lt;/code&gt;) and the model runs on a laptop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero per-token cost.&lt;/strong&gt; Reminders are written once, cached and reused, and an open model has no usage bill, so
a family could run this indefinitely.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swappable parts.&lt;/strong&gt; Gemma 4 in the cloud, &lt;code&gt;gemma3:1b&lt;/code&gt; on a small server, or a local voice with Piper
(&lt;code&gt;VOICE_PROVIDER=piper&lt;/code&gt;): each is one setting, not a rewrite.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Behavior I can change.&lt;/strong&gt; The prompts live in a plain file (&lt;code&gt;docs/prompts.md&lt;/code&gt;) and I tuned the tone, the safety
rules and the structured outputs myself, which a closed assistant would not let me do.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Honest trade-offs.&lt;/strong&gt; In production Gemma is hosted by Google, so the "stays on my server" benefit applies to the&lt;br&gt;
local setup, not to the live demo. And ElevenLabs is not open source: the text of each reminder, including the&lt;br&gt;
medicine name, goes to it to be voiced.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://dev.to/agent_sessions/building-couchy-an-open-source-ai-companion-app-that-reminds-elderly-users-to-take-their-pills-k6plmh"&gt;https://dev.to/agent_sessions/building-couchy-an-open-source-ai-companion-app-that-reminds-elderly-users-to-take-their-pills-k6plmh&lt;/a&gt;&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;: Gemma is the agent's brain: personalised reminders, understanding spoken replies,
deciding when to alert the family, and writing alerts and summaries. Runs on Google AI Studio or locally with Ollama.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of ElevenLabs&lt;/strong&gt;: gives the open-source agent a voice (TTS), transcribes my grandmother's speech for Gemma
(Scribe), and narrates the demo video.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Render&lt;/strong&gt;: the agent's backend (FastAPI, Telegram watchdog, voice pipeline) runs on Render.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Limitations and what is next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The native alarm is Android only; iOS would need a different approach.&lt;/li&gt;
&lt;li&gt;On Render's free tier the server sleeps after 15 minutes without traffic, so a monitor pings it every 5 minutes.&lt;/li&gt;
&lt;li&gt;The weekly family report is sent on request (&lt;code&gt;/report&lt;/code&gt; in Telegram), not yet on a schedule.&lt;/li&gt;
&lt;li&gt;A risk model that predicts which doses will be late (TabPFN) exists in the repo but is not enabled in production.&lt;/li&gt;
&lt;/ul&gt;

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