A board game round timer application designed to help players time their rounds with configurable durations, audio cues, and session tracking capabilities.
- Configurable round duration
- Visual and audio countdown feedback with increasing urgency
- Overtime tracking when rounds exceed configured time
- "Games" to group rounds and track history separately
- Round history with statistics for each game
- Customizable audio cues
- Clean, modern interface
- Setup & Start: Configure the round duration and select a game, then start the timer.
- Active Round: The timer counts down with visual and audio cues, and tracks overtime if needed.
- History: Review past rounds and statistics for each game.
- Game Management: Create, rename, and switch between different games.
- Settings: Customize audio cues and other features.
-
Language: Kotlin
-
Framework: Kotlin Multiplatform
-
UI: Compose Multiplatform
-
State Management: Kotlin Coroutines & StateFlow
-
Persistence: Platform-specific storage (
SharedPreferenceson Android,NSUserDefaultson iOS) -
Targets: Android, iOS, Desktop (JVM), Web (Wasm)
-
/composeApp is for code that will be shared across your Compose Multiplatform applications. It contains several subfolders:
- commonMain is for code that’s common for all targets.
- Other folders are for Kotlin code that will be compiled for only the platform indicated in the folder name. For example, if you want to use Apple’s CoreCrypto for the iOS part of your Kotlin app, the iosMain folder would be the right place for such calls. Similarly, if you want to edit the Desktop (JVM) specific part, the jvmMain folder is the appropriate location.
-
/iosApp contains iOS applications. Even if you’re sharing your UI with Compose Multiplatform, you need this entry point for your iOS app. This is also where you should add SwiftUI code for your project.
To build and run the development version of the app, use the run configuration from the run widget in your IDE’s toolbar or build it directly from the terminal.
- on macOS/Linux
./gradlew :composeApp:assembleDebug
- on Windows
.\gradlew.bat :composeApp:assembleDebug
To build and run the development version of the desktop app, use the run configuration from the run widget in your IDE’s toolbar or run it directly from the terminal:
- on macOS/Linux
./gradlew :composeApp:run
- on Windows
.\gradlew.bat :composeApp:run
To build and run the development version of the web app, use the run configuration from the run widget in your IDE's toolbar or run it directly from the terminal:
- for the Wasm target (faster, modern browsers):
- on macOS/Linux
./gradlew :composeApp:wasmJsBrowserDevelopmentRun
- on Windows
.\gradlew.bat :composeApp:wasmJsBrowserDevelopmentRun
- on macOS/Linux
- for the JS target (slower, supports older browsers):
- on macOS/Linux
./gradlew :composeApp:jsBrowserDevelopmentRun
- on Windows
.\gradlew.bat :composeApp:jsBrowserDevelopmentRun
- on macOS/Linux
To build and run the development version of the iOS app, use the run configuration from the run widget in your IDE’s toolbar or open the /iosApp directory in Xcode and run it from there.
./gradlew :composeApp:run
./gradlew :composeApp:assembleDebug
./gradlew :composeApp:wasmJsBrowserDevelopmentRun