// NAVIGATION
system.routes [5]
status: 200 OKayupi.dev // ready
Zurück zur Projektübersicht// SYSTEM.PROJECT_VIEW
MultiplatformFEATURED PROJECT

Trainings Penguin

A modern, production-grade Kotlin Multiplatform (KMP) & Compose Multiplatform workout interval timer.

Tech Stack & Eingesetzte Technologien

Kotlin

// PROJEKTBESCHREIBUNG & ARCHITEKTUR

✨ Features#

  • ⏱️ Flexible Workout Intervals:
    • Configurable preparation countdown, round work time, round rest time, total cycles, and cycle breaks.
    • Precise state machine (WorkoutTimerEngine) managing workout phases: PREPARING, WORK, ROUND_REST, CYCLE_REST, PAUSED, and FINISHED.
  • 🎵 Integrated Audio & Music Engine:
    • Acoustic cues: Dynamic sound effects for Go, Rest, Countdown Ticks, and Victory Fanfare.
    • Round music playback: Select custom MP3 tracks for workout sessions.
    • Audio ducking & pause: Intelligently pauses or ducks music volume during rest intervals and restores volume when the round starts.
  • 💾 Presets & Local Persistence:
    • Save, duplicate, rename, and switch between custom workout presets.
    • Backed by Room Multiplatform with SQLite Bundled Driver.
    • User settings & active configurations persist atomically via Jetpack DataStore (Okio JSON serialization).
  • 🎨 Adaptive Material 3 Design:
    • Built 100% with Compose Multiplatform.
    • Dynamic color-coded phase indicators (Work Green, Rest Orange, Cycle Purple).
    • Smooth animations, dark mode support, and responsive layouts tailored for both mobile touchscreens and desktop screens.
  • 📱 Android Background Execution:
    • Android Foreground Service integration ensures timer countdowns and audio cues never get killed by aggressive OS battery optimization.

Key Architectural Highlights:#

  1. Zero Inter-Feature Dependencies: Feature modules (:feature:timer, :feature:settings, :feature:presets) are completely decoupled from each other. Cross-feature navigation is coordinated at the Composition Root level via type-safe routes.
  2. MVI Architecture Standard:
    • Contract (<Feature>Contract.kt): Immutable UI state (UiState), user intents (Action), and one-shot effects (Event).
    • ViewModel (<Feature>ViewModel.kt): Manages StateFlow<UiState> using WhileSubscribed(5000) and single action entry points.
    • Screen Separation: Stateful <Feature>ScreenRoot (handles Koin injection & lifecycle collection) vs. Stateless <Feature>Screen (pure composable, 100% testable and previewable).
  3. Convention Plugins (build-logic):
    • Reusable Gradle convention plugins (ayupi.kmp.library, ayupi.kmp.compose, ayupi.kmp.feature) eliminate boilerplate and enforce dependency versions across all modules.