https://github.com/igorganapolsky/random-timer
Train reaction, not rhythm. Native iOS + Android random timer for combat sports, BJJ, boxing, and HIIT.
https://github.com/igorganapolsky/random-timer
android foreground-service glassmorphism hiit hilt interval-timer ios jetpack-compose kotlin live-activities material-design-3 mobile-app mvvm open-source random-timer swift swiftui tactical-training timer workout-timer
Last synced: 6 days ago
JSON representation
Train reaction, not rhythm. Native iOS + Android random timer for combat sports, BJJ, boxing, and HIIT.
- Host: GitHub
- URL: https://github.com/igorganapolsky/random-timer
- Owner: IgorGanapolsky
- License: mit
- Created: 2025-08-27T15:09:01.000Z (9 months ago)
- Default Branch: develop
- Last Pushed: 2026-05-19T00:34:47.000Z (13 days ago)
- Last Synced: 2026-05-19T00:55:34.338Z (13 days ago)
- Topics: android, foreground-service, glassmorphism, hiit, hilt, interval-timer, ios, jetpack-compose, kotlin, live-activities, material-design-3, mobile-app, mvvm, open-source, random-timer, swift, swiftui, tactical-training, timer, workout-timer
- Language: Python
- Homepage: https://apps.apple.com/us/app/random-tactical-timer/id6758355312
- Size: 133 MB
- Stars: 1
- Watchers: 0
- Forks: 1
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Codeowners: CODEOWNERS
- Security: SECURITY.md
- Support: support/index.html
- Agents: AGENTS.md
Awesome Lists containing this project
README
# Random Tactical Timer
[](LICENSE)
[](https://github.com/IgorGanapolsky/Random-Timer/actions/workflows/ci.yml)
[](https://github.com/IgorGanapolsky/Random-Timer/actions/workflows/claude-review.yml)
[](docs/pr-review-bots.md)
[](docs/pr-review-bots.md)
[](BUGBOT.md)
[](docs/pr-review-bots.md)
[](native-ios/)
[](native-android/)
**Train reaction, not rhythm.** Random interval timer for **MMA, BJJ, boxing, muay thai, kickboxing, HIIT, CrossFit, sparring, tabata, pad work, and tactical drills**. Native **iOS + Android** app: the buzzer fires at a **random** moment inside your range so you cannot anticipate it.
*Store-facing line:* **TRAIN FOR CHAOS. NOT RHYTHM.** — same headline as [App Store description](native-ios/fastlane/metadata/en-US/description.txt) and [Play Store full description](native-android/fastlane/metadata/android/en-US/full_description.txt) (en-US).
| Store | One-liner (en-US) |
|--------|-------------------|
| **App Store** subtitle | [Random HIIT & combat training](native-ios/fastlane/metadata/en-US/subtitle.txt) |
| **Play** short description | [Random tactical timer: MMA, BJJ, boxing, muay thai & HIIT. AI coach voices.](native-android/fastlane/metadata/android/en-US/short_description.txt) |
---
## Screenshots = store assets
Images below are **not** a second set of mocks — they are the **same files** shipped in Fastlane metadata (en-US).
**iPhone** (`native-ios/fastlane/screenshots/en-US/`)
**Android phone** (`native-android/fastlane/metadata/android/en-US/images/phoneScreenshots/`)
*iPad / additional iOS sizes: same folder (`5_ipad_*` … `7_ipad_*`).*
---
## Diagrams
### Training loop
```mermaid
flowchart LR
A[Set min/max range] --> B[Start]
B --> C[Drill / train]
C --> D[Random cue]
D --> E{Loop?}
E -->|Yes| C
E -->|No| F[Stop / dismiss]
```
### Repository layout
```mermaid
flowchart TB
subgraph apps [Native apps]
iOS[iOS — SwiftUI / Live Activities / StoreKit]
AND[Android — Compose / FGS / Play Billing]
end
subgraph meta [Store & screenshots]
FM[iOS Fastlane metadata + screenshots]
AM[Android Fastlane metadata + images]
end
subgraph auto [Automation]
PY[scripts/ — Python tooling]
GA[.github/workflows — CI & release]
end
iOS --> FM
AND --> AM
apps --> GA
PY --> GA
```
---
## Tech summary
| Layer | Stack |
|--------|--------|
| **iOS** | Swift 6, SwiftUI, Live Activities, AVFoundation alerts, StoreKit, PostHog |
| **Android** | Kotlin, Jetpack Compose, Hilt, foreground service, Play Billing, PostHog, Firebase crash/analytics |
| **Repo** | Python automation in [`scripts/`](scripts/), workflows in [`.github/workflows/`](.github/workflows/), Fastlane under each `native-*` tree |
## Build & verify
Entry point: **[`Makefile`](Makefile)**.
```bash
make verify
```
Details: iOS `native-ios/` (`xcodebuild`), Android `native-android/` (`./gradlew …`). See Makefile targets for simulators, Maestro, and platform-specific checks.
---
## Docs index
| Doc | Purpose |
|-----|---------|
| [`docs/REPO_PROFILE.md`](docs/REPO_PROFILE.md) | **GitHub About** text, topics, links — keep in sync with this README |
| [`docs/pr-review-bots.md`](docs/pr-review-bots.md) | PR review / bot matrix |
| [`docs/north-star-baseline.md`](docs/north-star-baseline.md) | Dated WQTU snapshot (verify live metrics in PostHog) |
| [`CLAUDE.md`](CLAUDE.md) | Operator rules, budgets, release flow |
| [`AGENTS.md`](AGENTS.md) | Agent / AI instructions |
| [`PRIVACY_POLICY.md`](PRIVACY_POLICY.md) | Privacy (linked from store metadata) |
## Repository layout (2026)
| Path | Role |
|------|------|
| [`marketing/site/`](marketing/site/) | **GitHub Pages** deploy root (`daily-growth-publishing` workflow) |
| [`marketing/product-pages/`](marketing/product-pages/) | Product landing HTML + AMP + `llms.txt` (kept out of repo root) |
| [`config/`](config/) | Tooling config (e.g. Sonar properties) |
| [`scripts/shell/`](scripts/shell/) | Bash entrypoints; Python automation stays in [`scripts/`](scripts/) (see [`scripts/README.md`](scripts/README.md)) |
## License
[MIT](LICENSE) — Igor Ganapolsky