Build streaks. Break bad patterns. One tap to log Water, Exercise, Sleep, and Meditation โ with real stats that actually tell you something.
๐ฑ Features โข ๐๏ธ Architecture โข ๐ Getting Started โข ๐ฏ Future Goals โข ๐ Live Demo
SplashโโโโโโโโโโโโโโโDashboardโโโโโโโโโโโโHabit Stats
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย
Log EntryโโโโโโโโโโโโโโโEntry DetailโโโโโโโโโโโโDate Filter
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย
๐ All high-resolution screenshots are available in the
screenshots/directory.
Most people want to build better health habits โ drink more water, exercise regularly, sleep enough, meditate daily. The problem? Habit apps are either:
- Too complex โ bloated with features nobody uses, requiring setup that feels like a project.
- Too shallow โ basic streak counters with no real insight into your actual patterns.
- Not local-first โ requiring accounts, subscriptions, or cloud sync before you can log a single glass of water.
I built Wellora to fix that.
Wellora is a focused, offline-first native Android app that makes habit tracking effortless. Log your Water ๐ง, Exercise ๐, Sleep ๐ด, and Meditation ๐ง in seconds โ and get back genuinely useful stats: daily totals, weekly averages, monthly summaries, and consecutive-day streaks. No account. No subscription. No internet required.
One app. Four habits. Complete clarity on how consistent you actually are.
- 2ร2 category grid with today's logged total and unit displayed per habit.
- Streak badge (๐ฅ Nd) automatically surfaces on any card where you have an active consecutive-day streak.
- Dynamic greeting with today's date โ the app always feels current.
- One-tap FAB to quickly log any entry without navigating to a specific category first.
- Dedicated stats page for each of the 4 habit types.
- Summary cards showing: total today, total this week, total this month, and weekly average.
- Animated progress bar visualising today's total against the week's best.
- Full scrollable history of every logged entry for that habit.
- Date range filter โ tap the calendar to drill into any single day's history.
- Quick-filter chips to toggle between custom date ranges and the default "this week" view.
- Inline delete with a confirmation dialog to prevent accidental removal.
- Supports all 4 habit types from a single form โ the unit label auto-updates (ml / min / hrs) as you switch.
- Numeric input with built-in validation: blank and zero values are rejected with clear inline error messages.
- Date picker restricted to today or past dates only โ no future logging.
- Optional free-text notes field for context (e.g., "post-gym session", "woke up at 3am").
- Full edit support: pre-populates all fields when editing an existing entry.
- Full read-only breakdown of a single logged entry: habit type, value + unit, date, timestamp, and notes.
- Direct shortcut to edit the entry from the detail screen.
- Calculates consecutive-day streaks per habit type independently using epoch-day arithmetic.
- Streak resets if no entry was logged on either today or yesterday โ accurate and honest.
- Streak count displayed live on the dashboard and in the stats screen.
- Built entirely with Jetpack Compose + Material 3.
- Each habit has its own accent colour and icon โ Water (blue), Exercise (green), Sleep (indigo), Meditation (purple).
- Animated splash screen with the Wellora logo on launch.
- Snackbar feedback for every create, update, and delete action.
- Fully offline โ all data lives in a local Room (SQLite) database.
Wellora is built using the MVVM (Model-View-ViewModel) architectural pattern, with a Repository layer for clean separation between the database and the UI:
wellora/
โโโ README.md # This file
โโโ LICENSE # CC BY-NC 4.0 open-source rights
โโโ screenshots/ # High-res UI captures and GIFs
โ โโโ screen_splash.gif
โ โโโ screen_dashboard.png
โ โโโ screen_stats.png
โ โโโ screen_add_edit.png
โ โโโ screen_detail.png
โ โโโ screen_date_filter.png
โโโ app/
โ โโโ build.gradle.kts # App-level build configurations
โ โโโ src/main/
โ โโโ AndroidManifest.xml # App manifest (permissions, components)
โ โโโ java/com/wellness/habitlog/
โ โโโ MainActivity.kt
โ โโโ AppNavigation.kt # Sealed routes + NavHost graph
โ โโโ data/
โ โ โโโ HabitEntry.kt # Room @Entity โ core data model
โ โ โโโ HabitDao.kt # DAO: queries, aggregates, streak data
โ โ โโโ HabitDatabase.kt # Room database singleton
โ โ โโโ HabitRepository.kt # Abstracts all DAO access
โ โโโ viewmodel/
โ โ โโโ HabitViewModel.kt # State, filters, streak engine, summaries
โ โโโ ui/
โ โโโ screens/
โ โ โโโ SplashScreen.kt
โ โ โโโ MainScreen.kt # Dashboard grid
โ โ โโโ HabitStatsScreen.kt # Per-habit analytics + history
โ โ โโโ AddEditScreen.kt # Log / edit entry form
โ โ โโโ DetailScreen.kt # Read-only entry view
โ โโโ components/
โ โ โโโ HabitCard.kt # Reusable history list item
โ โ โโโ SummaryCard.kt # Animated stats card
โ โ โโโ HabitUtils.kt # Colour, icon, format helpers
โ โโโ theme/
โ โโโ Color.kt
โ โโโ Theme.kt # Material 3 colour scheme
โโโ gradle/ # Gradle wrapper and version catalog
โ โโโ libs.versions.toml # Centralized dependency management
โโโ build.gradle.kts # Project-level build configurations
โโโ settings.gradle.kts # Project settings and module definitions
โโโ gradlew # Linux/macOS build script
โโโ gradlew.bat # Windows build script
| Layer | Technology |
|---|---|
| Language | Kotlin 2.0.21 |
| UI Framework | Jetpack Compose + Material 3 |
| Navigation | Navigation Compose 2.7.7 (string-route based) |
| State Management | ViewModel + StateFlow + SharedFlow |
| Local Database | Room 2.6.1 (SQLite) |
| Async / Reactive | Kotlin Coroutines + Flow |
| Annotation Processing | KSP 2.0.21-1.0.25 |
| Architecture Pattern | MVVM + Repository |
| Build System | Gradle KTS + Version Catalog |
| Min SDK | API 26 (Android 8.0 Oreo) |
| Target SDK | API 34 (Android 14) |
The streak algorithm runs entirely in the ViewModel using epoch-day arithmetic โ no third-party library required:
// Streak logic โ HabitViewModel.kt
private suspend fun calculateStreak(habitType: String): Int {
val epochDays = repository.getDistinctEpochDaysForHabit(habitType).sortedDescending()
if (epochDays.isEmpty()) return 0
val todayEpochDay = (System.currentTimeMillis() / 86_400_000L).toInt()
if (epochDays.first() < todayEpochDay - 1) return 0 // gap > 1 day โ streak dead
var streak = 0
var expected = epochDays.first()
for (day in epochDays) {
if (day == expected) { streak++; expected-- } else break
}
return streak
}A streak breaks immediately if the last logged day is more than one calendar day before today โ no grace periods, no artificial inflation.
| Screen | What It Does |
|---|---|
| Splash | Animated Wellora logo on launch |
| Dashboard (Main) | 2ร2 grid of habit categories โ daily totals, streak badges, quick-add FAB |
| Habit Stats | Full analytics for one habit: summary cards, animated progress bar, date-filtered history, inline delete |
| Add / Edit Entry | Single form to log or update any entry โ type selector, value input, date picker, notes |
| Detail | Read-only view of a single log entry with edit shortcut |
- Android Studio Hedgehog or later
- JDK 11+
- Android device or emulator (API 26+)
git clone https://github.com/meel-ayush/wellora.git
cd welloraOpen the project in Android Studio โ select your device โ click โถ Run
No API keys, no internet connection, no backend required. The app runs fully offline using a local Room database.
Wellora v1.0 stores all data locally using Room (SQLite). Entries persist across app restarts on the same device indefinitely. There is no cloud sync, no user account, and no network dependency โ this was a deliberate design decision to ensure the app is instant, private, and dependency-free while the core tracking engine and UX were being validated.
Here's what's planned for upcoming versions:
- Daily targets & progress rings โ Set a daily goal per habit (e.g., 2000ml water) and see a progress ring fill in real time.
- Bar / line charts โ Visual weekly and monthly trend charts using a charting library.
- Push notifications & reminders โ Configurable daily reminders per habit with custom times.
- Cloud sync & multi-device support โ Firebase Firestore backend for syncing across devices.
- Custom habit types โ Allow users to define their own habits beyond the built-in four.
- Export to CSV โ One-tap export of the full history for personal data analysis.
- Widgets โ Home screen widgets showing today's totals and streak counts.
- Dark mode โ Full Material 3 dynamic colour theming with dark/light toggle.
Most wellness apps are either overkill or oversimplified. Wellora finds the productive middle ground: enough structure to build real habits, enough simplicity to actually use it every day.
This project demonstrates:
- End-to-end native Android development with Jetpack Compose and Material 3.
- Production-grade Room database integration with complex DAO queries (aggregates, date-range filtering, epoch-day streak arithmetic).
- Reactive UI architecture using StateFlow and coroutine-based data pipelines.
- Clean MVVM + Repository separation that is genuinely ready to scale โ plug in a Firestore backend and nothing in the ViewModel or UI layer needs to change.
Ayush Meel
This project is licensed under the Creative Commons Attribution-NonCommercial 4.0 International License (CC BY-NC 4.0).
In short: You are free to download, modify, and use this code privately for local learning or school projects. However, if you share this project or any modifications publicly, you must give clear credit to the original author. You are strictly prohibited from using this project, its code, or its concepts for commercial purposes, generating revenue, or business operations without explicit written permission.