<?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>Drowzy: no need to cancel the wake up alarm anymore</title>
      <dc:creator>Matias Silveira</dc:creator>
      <pubDate>Fri, 23 Oct 2026 13:22:51 +0000</pubDate>
      <link>https://dev.to/jmsilveira22/drowzy-no-need-to-cancel-the-wake-up-alarm-anymore-1mog</link>
      <guid>https://dev.to/jmsilveira22/drowzy-no-need-to-cancel-the-wake-up-alarm-anymore-1mog</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Drowzy is an alarm clock you can argue with from under the blanket. When it rings, you don't reach for your phone: you just say "cinco minutitos más" (or "snooze for ten", or "ya estoy despierto, apágala") and it does the right thing. It rings for 5 seconds, goes quiet, listens for 4, understands you, and then snoozes for the time you asked or turns off.&lt;/p&gt;

&lt;p&gt;It's for anyone whose worst daily movement is the arm stretch to the nightstand. It's built around the one thing a lazy person actually wants: that being awake is optional until they decide otherwise, and that the alarm can't be fooled into shutting up for good.&lt;/p&gt;

&lt;p&gt;Safety guards, because a lazy alarm that makes you late is worse than none:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It never dismisses by itself. Silence, mumbling or an unclear sentence keeps it ringing.&lt;/li&gt;
&lt;li&gt;After 3 snoozes, the first "turn it off" only buys 2 more minutes; the next one works.&lt;/li&gt;
&lt;li&gt;If the language model is unreachable, a keyword fallback takes over.&lt;/li&gt;
&lt;li&gt;It gives up (and stays quiet) after 30 minutes instead of pretending you woke up.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&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/drowzy" rel="noopener noreferrer"&gt;
        drowzy
      &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;Drowzy&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;An alarm you snooze or dismiss &lt;strong&gt;by talking&lt;/strong&gt;, without moving. Fully local: whisper.cpp for speech-to-text and an open-weight LLM through Ollama to understand what you mean. Nothing leaves the device, and it works in airplane mode.&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;alarm rings 5 s -&amp;gt; silence -&amp;gt; records 4 s -&amp;gt; whisper.cpp -&amp;gt; Ollama (JSON) -&amp;gt; snooze N min | dismiss | keep ringing
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Say "cinco minutitos más" and it snoozes 5 minutes. Say "ya estoy despierto, apágala" and it stops. Mumbling or noise keeps it ringing.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Safety guards (so it can't make you late)&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;It never dismisses by itself: empty audio, noise or an unclear phrase keeps the alarm ringing.&lt;/li&gt;
&lt;li&gt;After &lt;code&gt;max_snoozes&lt;/code&gt; (default 3) the first "dismiss" only buys a short &lt;code&gt;forced_snooze_minutes&lt;/code&gt;, and long snoozes are capped. The next "dismiss" works.&lt;/li&gt;
&lt;li&gt;If Ollama is down or too slow, a keyword fallback takes over.&lt;/li&gt;
&lt;li&gt;It gives up after &lt;code&gt;max_ring_minutes&lt;/code&gt; and returns…&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/drowzy" 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;alarm rings 5 s -&amp;gt; silence -&amp;gt; record 4 s -&amp;gt; whisper.cpp -&amp;gt; Ollama (JSON) -&amp;gt; snooze N min | dismiss | keep ringing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Speech-to-text:&lt;/strong&gt; &lt;a href="https://github.com/ggml-org/whisper.cpp" rel="noopener noreferrer"&gt;whisper.cpp&lt;/a&gt; with the multilingual &lt;code&gt;ggml-base&lt;/code&gt; model, called as a subprocess. Roughly 2 s per phrase on my laptop's CPU.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Understanding:&lt;/strong&gt; an open-weight model served by &lt;a href="https://ollama.com" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt; (&lt;code&gt;qwen3:4b-instruct&lt;/code&gt; on my PC; &lt;code&gt;qwen2.5:1.5b&lt;/code&gt; is the default for phones). The prompt asks for strict JSON using Ollama's structured output (&lt;code&gt;format=&amp;lt;JSON schema&amp;gt;&lt;/code&gt;, temperature 0) with a few Spanish and English examples: &lt;code&gt;{"action": "snooze|dismiss|ignore", "minutes": 5, "reply": "..."}&lt;/code&gt;. When in doubt, the model is told to pick &lt;code&gt;ignore&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Glue:&lt;/strong&gt; Python with Typer, Pydantic and &lt;code&gt;sounddevice&lt;/code&gt;. On Android it runs in Termux through Termux:API for audio, with &lt;code&gt;scripts/setup_termux.sh&lt;/code&gt; doing the setup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why it rings and listens in turns:&lt;/strong&gt; if it recorded while ringing, the microphone would just hear the alarm. Alternating sound and silence avoids needing echo cancellation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cold start:&lt;/strong&gt; the first LLM call after boot took 37–47 s on CPU. So Drowzy preloads the model 3 minutes before the alarm and keeps it loaded (&lt;code&gt;keep_alive&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The core is covered by 25 unit tests (intent parsing, the ring loop's guards, scheduling) and 11 integration tests that hit a real Ollama model with no fallback allowed.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I verified, and what I didn't
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Verified:&lt;/strong&gt; the full chain with real sound output, real whisper.cpp and a real Ollama model, using synthetic Spanish voice clips fed in place of the microphone: "cinco minutitos más" → 5-minute snooze, "ya estoy despierto, apágala" → dismissed, and the same phrase after 3 snoozes → a forced 2-minute snooze.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not verified yet:&lt;/strong&gt; my laptop's microphone only recorded silence in my test, so I haven't yet shouted a phrase into it. And I haven't run the Android/Termux path on a phone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency is not great yet:&lt;/strong&gt; about 2 s of Whisper plus about 6 s of LLM once the model is warm (4B parameters on CPU). A smaller model should cut that, but I haven't measured it.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It works in airplane mode.&lt;/strong&gt; You can put the phone in airplane mode overnight and the alarm still understands you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your bedroom audio stays on your device.&lt;/strong&gt; An always-listening alarm that streams your voice to a cloud API is not something I'd want next to my bed. Here, audio goes from the microphone to whisper.cpp and nowhere else.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No per-snooze bill.&lt;/strong&gt; I can say "five more minutes" as many times as I like without paying per call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I can swap and tune the model.&lt;/strong&gt; Changing the model is a one-line config edit, and the prompt and examples are mine to adjust to my own way of mumbling.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>python</category>
    </item>
    <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>
