Skip to content
All projectsNative Android app

BUILD

A personal scheduling and fitness problem, turned into a native Android product.

Type
Native Android app
Status
Product
Stack
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.

App architecture
  1. User schedule
  2. App logic (MVVM)
  3. Room data
  4. Dynamic planning
  5. 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

    UI

  • Material 3

  • MVVM

    Architecture

  • Room

    Persistence

  • Coroutines & Flow

    Reactive data

  • AlarmManager

    Reminders

  • JUnit · Robolectric · Roborazzi

    Testing

Why it matters

Native product engineering: taking an everyday problem from idea to a structured, tested mobile application.

Next project

KnowledgeTree

Enter a subject, get a structured path to learn it.