BUILD
A personal scheduling and fitness problem, turned into a native Android product.
- Native Android app
- Product
- Kotlin, Jetpack Compose, Material 3
Overview
BUILD is a personal fitness and routine management app for Android. It brings workouts, nutrition, hydration, supplements, reminders and notes into one place — and adapts when schedules change.
The problem
Training, nutrition and daily routines usually live in separate apps and notes, and none of them cope well when a week doesn't go to plan. The starting point was a personal one: keeping a changing routine organised without juggling several tools.
Approach
Rather than a simple tracker, BUILD treats the routine as structured data with a schedule attached. Workouts, sets, repetitions and progression sit alongside nutrition, protein, hydration and supplements; reminders are scheduled from that data, and the plan can be reorganised when the schedule changes.
- User schedule
- App logic (MVVM)
- Room data
- Dynamic planning
- Reminders
Omar’s contribution
- Turned a personal routine problem into a product definition
- Built the app natively in Kotlin with Jetpack Compose and Material 3
- Structured the app with MVVM and unidirectional data flow
- Implemented persistence with Room and reactive updates with Coroutines and Flow
- Scheduled reminders with AlarmManager
- Added automated tests with JUnit, Robolectric and Roborazzi
What it does
- Workout tracking: exercises, sets, repetitions, progression
- Nutrition, protein and hydration tracking
- Supplements
- Reminders and notes
- Dynamic routines that adapt to changing schedules
- Material 3 design, responsive layouts and dark mode
Architecture
- UI: Jetpack Compose with Material 3
- Presentation: MVVM with unidirectional data flow
- Data: Room database as the single source of truth
- Concurrency: Kotlin Coroutines and Flow for reactive updates
- Scheduling: AlarmManager for reminders
- Quality: JUnit, Robolectric and Roborazzi screenshot tests
Key decisions
- Native Kotlin rather than a web wrapper — reminders and offline data need the platform
- Room as the single source of truth, with Flow keeping the UI in sync
- Unidirectional data flow to keep a feature-rich app predictable
- Automated tests, including screenshot tests, from the start
The hard part
The difficult part is not tracking — it is change. A routine that moves around needs data, scheduling and reminders that stay consistent with each other.
Outcome
A working native Android app with structured data, dynamic scheduling, reminders, persistent storage and automated tests — built around a personal routine.
Technology
Kotlin
Jetpack Compose
Material 3
MVVM
Room
Coroutines & Flow
AlarmManager
JUnit · Robolectric · Roborazzi
Why it matters
Native product engineering: taking an everyday problem from idea to a structured, tested mobile application.
Next project
Enter a subject, get a structured path to learn it.