A score tracker for Wear OS. I built this because I am hilariously bad at keeping score when playing squash.
Works on any Wear OS 3+ watch (Galaxy Watch, Pixel Watch, etc.). No phone required.
Each sport defaults to its standard rally-point target. Tennis and padel use 15-30-40 scoring and are always indefinite.
| Sport | Target |
|---|---|
| Squash | 11 |
| Badminton | 21 |
| Table Tennis | 11 |
| Pickleball | 11 |
| Racquetball | 15 |
| Tennis | -- (standard) |
| Padel | -- (standard) |
- 2-player -- Split-screen tap scoring. Top half scores for one player, bottom half for the other. Handles serving rotation and game tracking automatically.
- 3-player cut-throat -- Server vs receiver with a waiting player rotating in. Option for self-score only (tap anywhere to increment your own count).
- Quick start -- Pick a sport, tap start, go. Name fields and advanced settings are available but not required.
- Per-sport scoring targets with optional indefinite mode
- Voice announcements using on-device TTS (toggleable during play)
- Undo last point
- Ambient mode support -- stays visible when the screen dims
- Match history stored locally on the watch (last 10 matches)
- Kotlin, Jetpack Compose for Wear OS
- Minimum SDK 30 (Wear OS 3)
- Scoring logic is immutable -- each point produces a new
Matchstate - StateFlow-driven UI
app/src/main/java/com/squashscore/
model/ Player, GameState, Sport, Match
viewmodel/ MatchViewModel (state + actions + TTS)
tts/ TtsManager (Android TTS wrapper)
data/ MatchRepository (JSON persistence)
ui/ Screens: Setup, Score, ThreePlayer, Summary, History
./gradlew assembleDebug # Build debug APK
./gradlew installDebug # Install to connected watch via ADBFor ADB over Wi-Fi on the watch:
Settings > Developer Options > ADB Debugging > Debug over Wi-Fi
adb connect <watch-ip>:5555
MIT