Choklo
Your pet's personal health assistant - because they can't set their own alarms.
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.