Android TV app for managing and tracking a Backyard Ultra race in real time.
A Backyard Ultra is a timed ultramarathon format where runners complete a 6.7 km loop every hour. The last runner still going wins. Any runner who fails to complete a loop within the hour is eliminated.
| Countdown | Timer | Results |
|---|---|---|
![]() |
![]() |
![]() |
- Countdown screen — displays the time remaining before the race starts with auto-start at the scheduled time
- Timer screen — live race clock, current lap, active runners count, lap progress bar (turns red in the last 30s), total elapsed race time
- Results screen — live grid of all runners × laps with:
- Tap a runner's name to record their lap time for the current lap
- Tap a lap cell to cycle its status (empty → completed → eliminated)
- Runners sorted by their time on the current lap (fastest first), then alphabetically
- Current lap column highlighted
- Best lap time shown per runner
- Life line showing each runner's photo advancing along a track as laps are completed
- Settings screen — configure race start time, manage runners, reset the race
- Runners who miss the lap cutoff are automatically eliminated with a time of 1:00:00
| Layer | Technology |
|---|---|
| UI | Jetpack Compose + AndroidX TV Material 3 |
| Architecture | MVVM (ViewModel + StateFlow) |
| Database | Room (SQLite) |
| Dependency Injection | Hilt |
| Navigation | Jetpack Navigation Compose |
| Language | Kotlin |
| Min SDK | 23 |
| Target SDK | 36 |
app/src/main/java/com/athimue/backyard/
├── audio/ # SoundManager (lap start / end-lap warning)
├── composable/ # All screens (Countdown, Timer, Results, Settings, Navigation)
├── data/db/ # Room database, entities, DAOs
├── di/ # Hilt modules (DatabaseModule, RepositoryModule)
├── model/ # Domain models and UI state classes
├── repository/ # Repository interfaces and Room implementations
├── ui/theme/ # AppColors, AppTypography
└── viewmodel/ # ViewModels for each screen
- Android Studio Hedgehog or later
- JDK 11+
- Android TV device or emulator
./gradlew assembleDebug
# Output: app/build/outputs/apk/debug/app-debug.apk- On your TV: Settings → Device Preferences → About → tap Build 7 times to unlock Developer options
- Enable Developer options → USB debugging and note the TV's IP address
- From your machine:
adb connect <TV_IP_ADDRESS>
adb install app/build/outputs/apk/debug/app-debug.apk
# To update an existing installation:
adb install -r app/build/outputs/apk/debug/app-debug.apkThe app will appear in the Android TV launcher.


