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, andFINISHED.
- 🎵 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:#
- 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. - MVI Architecture Standard:
- Contract (
<Feature>Contract.kt): Immutable UI state (UiState), user intents (Action), and one-shot effects (Event). - ViewModel (
<Feature>ViewModel.kt): ManagesStateFlow<UiState>usingWhileSubscribed(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).
- Contract (
- 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.
- Reusable Gradle convention plugins (
