โ† Back to Projects
Choklo icon

Choklo

Your pet's personal health assistant - because they can't set their own alarms.

Flutter Firebase Riverpod Android iOS
Status: In active development ยท App Store release TBD

The Story

My cat Choklo has hypertrophic cardiomyopathy (HCM) - a heart condition that requires daily medication and careful monitoring. I needed an app that could track his breathing rate over time (critical for detecting fluid buildup), generate graphs I could show his vet, share care duties with family members, and yes - remind me to give him his pills without fail. Nothing I found did all of that well, so I built it.

What It Does

๐Ÿซ

Breathing Monitor

Track respiratory rate - critical for pets with heart conditions. Count manually, tap along with breaths, or let the microphone detect breathing patterns automatically. Historical graphs show trends over weeks and months.

๐Ÿ“Š

Vet-Ready Reports

Generate breathing rate graphs and medication history to share with your vet. No more "I think he's been breathing faster lately" - show them the data.

๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง

Shared Care

Invite family members to share pet care. Everyone sees the same medication schedule, breathing logs, and gets notified. No more "did you give him his pill?" texts.

๐Ÿ’Š

Bulletproof Reminders

Notifications that won't let you forget. Auto-snooze keeps buzzing until you confirm the dose. Survives app kills, phone restarts, and aggressive battery optimizers.

๐Ÿ“ฆ

Medication Inventory

Visual pill tracker shows remaining doses at a glance. Get low-stock alerts before you run out, so you're never caught scrambling for a refill.

๐Ÿพ

Multi-Pet Management

Swipe between pets with detailed profiles: age, weight, species, breed, medical notes, and photos. Each pet gets their own medication schedule and health tracking.

Why The Notifications Actually Work

Most reminder apps fail when Android's battery optimizations kill them in the background. Choklo uses native Android BroadcastReceivers and AlarmManager to fire notifications at the OS level - the app doesn't even need to be running. Missed a notification? It auto-snoozes and tries again until you actively confirm or skip.

flowchart LR
    subgraph OS[Android OS Layer]
        A[AlarmManager]
    end
    
    subgraph APP[Choklo App]
        B[BroadcastReceiver]
        C[Notification]
    end
    
    subgraph USER[User Response]
        D[Full-screen Alert]
        E[Confirmed]
        F[Ignored]
    end
    
    A -- triggers --> B
    B -- builds --> C
    C -- displays --> D
    D -- tap confirm --> E
    D -- timeout --> F
    F -. reschedules .-> A
          

Tech Highlights

  • โ–ธ Flutter + Riverpod - Clean architecture with reactive state management
  • โ–ธ Firebase Backend - Auth, Firestore, Cloud Storage for cross-device sync
  • โ–ธ Native Kotlin - Custom BroadcastReceivers for reliable notifications
  • โ–ธ Audio Processing - Microphone-based breathing detection with trend charts
  • โ–ธ Testable Architecture - Swappable notification scheduler for unit testing

Named after the patient: Choklo is my cat. This app exists because his health depends on consistent care - and now our whole family can help keep track.