-
-
Mole tracking on a body map, with a ghost-overlay camera for repeat photos.
-
Medication: schedule, stock left, reminders that say what they're about.
-
Blood pressure with category read-out, history and trend.
-
Trends across modules — insights are Pro.
-
Pro through RevenueCat: monthly, annual, lifetime. Your data is never behind the wall.
-
Every module is optional; free keeps any three.
-
One panel: blood pressure, weight, medication, skincare, moles, water, sleep
Inspiration
Health tracking on a phone is split across six apps that each want an account, a subscription and your data on their server. My family's actual needs were mundane: my father's blood pressure twice a day, a parent's medication schedule, a sunscreen that expires nine months after opening, a mole on my back I want to photograph the same way every three months. None of that needs a cloud. All of it needs to be in one place and to produce something a doctor will read.
BodyBook is the health notebook I wanted to hand to my parents: one panel, plain numbers, reminders that say what they are about, and a report you can print.
What it does
Seven modules, each optional, each on the same home panel:
- Blood pressure — systolic/diastolic/pulse with a category read-out, trend over time and a reminder that tells you to rest five minutes with your arm at heart level before measuring.
- Weight — trend, weekly change, BMI if you want it.
- Medication & supplements — schedule, stock counting ("12 tablets left"), notifications with "Taken" and "Snooze 15 min" actions, low-stock warnings by name.
- Skincare routine & products — morning/evening steps and a product shelf with period-after-opening tracking; the app warns 30 days before a product expires.
- Moles — a body map, a ghost-overlay camera that shows the previous photo transparently so the new one lines up, and a before/after comparison slider.
- Water and Sleep — quick logging, daily targets.
Across modules: insights (blood pressure against sleep, weight against water), a PDF doctor report for any period, JSON export of everything, offline-first, no account. Seven languages, switchable in the app.
How I built it
Kotlin + Jetpack Compose, single-activity, Room for storage, WorkManager and exact alarms for the notification engine. Notifications are localised inside the receiver because the raw context does not know the app language on API 26–32 — one of several bugs that only showed up on a real device with a Turkish system and an English app.
Monetization — RevenueCat. One entitlement (pro), a subscription with monthly and annual base plans and a lifetime one-time product, all created in Play Console and imported into RevenueCat. The Pro object wraps the SDK; the rest of the app asks one question. If the SDK key is empty the paywall never appears and the app behaves as a full version — a misconfigured billing layer must never lock a user out. Google's new one-time-product model needed legacyCompatible = true before RevenueCat could see the product at all.
The free tier caps modules, not data. Free users pick any three modules and get one doctor report. Pro unlocks all seven, unlimited reports and cross-module insights. Export and the data itself are never locked — that is the promise behind "your data stays yours". Everyone who installed 1.0 before the paywall existed is permanently Pro; taking back what they were given would punish the first users.
Store. Listing in seven languages (en, tr, de, es, fr, it, ar), each short description written to the 80-character limit, each title opening with that language's most searched term.
Challenges I ran into
- Notification taps "crashed" the app. They did not — the activity was being torn down and recreated, the user lost their screen and saw a blank frame.
singleTask+onNewIntentfixed it, and the hunt surfaced three more real bugs (snooze produced empty notifications, wrong language, alarms set on already-taken doses). - Play's one-time product model silently hides products from older billing clients and from RevenueCat's importer unless a flag is set.
- Data safety is not "we don't collect". RevenueCat collects purchase history, so the form changed — and a public data-deletion page had to exist before I could answer "yes" to deletion.
- Two stores, two timelines. Google approved the same product in two days; the iOS build is still waiting on App Store review. The Android version is the one you can install today.
What's next
Read which module people enable first; cross-module insights are the Pro feature I expect to carry. A caregiver mode — one phone tracking two people — is the most requested thing so far.
Built With
- android-notifications
- camerax
- google-play-billing
- jetpack-compose
- kotlin
- python
- revenuecat
- room
- workmanager
Log in or sign up for Devpost to join the conversation.