LunarLog is an Android app for menstrual cycle and wellness tracking with a local-first privacy model.
What It Does
- Tracks cycle start and end dates
- Supports daily logs for symptoms, mood, flow, sleep, hydration, and notes
- Provides calendar and analysis views for trends and predictions
- Includes period history and detail screens for edits and corrections
- Generates report-friendly exports and supports local backup/restore
- Offers app lock, reminders, app widget support, and in-app update checks
Core Principles
- Privacy first: no required account and no cloud dependency
- Offline ready: core usage does not depend on network
- Full feature set: advanced insights without paywalls
Tech Stack
- Kotlin
- Jetpack Compose (Material 3)
- MVVM architecture
- Hilt for dependency injection
- Room (SQLite) for persistence
- Coroutines and Flow
- WorkManager for scheduled notifications
- Navigation Compose
Requirements
- Android Studio with Android SDK 34
- JDK 17
- Android device or emulator (API 26+)
Getting Started
- Clone the repository.
- Open the project in Android Studio.
- Let Gradle sync finish.
- Run the
appconfiguration on a device/emulator.
Command Line Build and Test
./gradlew :app:assembleDebug ./gradlew test
Project Structure
app/src/main/java/com/lunarlog: application codeapp/src/main/java/com/lunarlog/ui: Compose screens and UI componentsapp/src/main/java/com/lunarlog/data: Room entities, DAOs, repositories, and data managementapp/src/main/java/com/lunarlog/logic: prediction, anomaly detection, and insight logicapp/src/main/java/com/lunarlog/update: GitHub release update check and APK install flowapp/src/test/java/com/lunarlog: unit testsscripts: release helper scripts.github/workflows/release.yml: signed APK release automation
Versioning and Releases
- App version is defined in
app/build.gradle.kts(versionCode,versionName). CHANGELOG.mdis the source for release notes.- The release workflow builds a signed release APK and publishes a GitHub Release when
mainis updated with version/changelog changes.
Testing
Current unit tests cover key logic and repository behaviors, including cycle prediction, reminder policy, narrative generation, period summaries, and selected ViewModels.
Run all unit tests:
./gradlew test
Security and Privacy Notes
android:allowBackupis disabled in the manifest.- App lock and biometric flow are supported.
- Data backup/restore is handled locally by the app.
- Update checks query GitHub Releases and install from release APK assets.
Related Docs
PROJECT_DESC.md: short project summaryPROJECT_SPEC.md: feature roadmap and implementation phasesCHANGELOG.md: release history