Open-source timer + stopwatch for speakers, trainers, and debaters.
Works offline. No ads. No accounts. No internet permission.
- ⏱️ Configurable timer presets — up to 10 tiles with custom name, duration, and color
- ⏲️ Stopwatch counting up to 60:00 with auto-stop
- 🔔 Time-up alerts — vibration + pulsing red overdue counter (keeps counting past zero)
- 🎨 Customizable tile colors via built-in color picker
- 📳 Optional vibration toggle (per device)
- 🔒 Keep screen on while a timer or stopwatch is active
- 📱 True fullscreen landscape — system bars hidden for maximum visibility
- 🌗 Light / Dark / System theme toggle
- 🚫 100% offline — no internet permission, no accounts, no telemetry
- 🌍 PL + EN localization (Polish native, English complete)
| Home (empty) | Home with tiles | Stopwatch |
|---|---|---|
![]() |
![]() |
![]() |
| Timer countdown | Settings | Add tile form |
|---|---|---|
![]() |
![]() |
![]() |
Built for debate clubs, Toastmasters meetings, lecture halls, and training sessions where:
- A timer needs to be readable from across the room
- Internet access is unreliable or unwanted
- Multiple preset durations are needed (e.g. 5/7/10-minute speeches)
- A stopwatch is needed for cross-examination or Q&A
Open-sourced because privacy-first tools for speakers should be accessible to everyone — and because a project this focused is a clean Flutter reference for the community.
Download the latest APK from GitHub Releases.
Install with ADB:
adb install app-arm64-v8a-release.apkOr transfer the APK to your phone and install it (enable "Install unknown apps" first).
Which APK? Pick
app-arm64-v8a-release.apkfor modern phones (99% of devices sold after 2017). Useapp-armeabi-v7a-release.apkonly for old 32-bit devices.app-x86_64-release.apkis for emulators.
Requirements:
- Flutter 3.35+ (Dart 3.9+)
- Android SDK with
minSdk 24(Android 7.0+)
git clone https://github.com/gerpaick/timer-mowcy
cd timer-mowcy/timer_mowcy
flutter pub get
flutter run# Debug (hot reload)
flutter run
# Release APK (single, larger)
flutter build apk --release
# Split per ABI (smaller files, recommended for distribution)
flutter build apk --release --split-per-abiOutput: timer_mowcy/build/app/outputs/flutter-apk/.
flutter test # run unit + widget tests (52 tests)
flutter test --coverage # generate coverage/lcov.info
flutter analyze # static analysis (should report "No issues found!")| Package | Purpose |
|---|---|
shared_preferences |
Persist tiles + settings |
flutter_colorpicker |
Tile color picker |
wakelock_plus |
Keep screen awake during timer |
vibration |
Haptic feedback on time-up |
flutter_localizations |
i18n infrastructure |
intl |
Locale-aware formatting |
- Polski (PL) — native, complete
- English (EN) — complete
To use the app in English, change your device language or pass --locale=en to flutter run.
timer_mowcy/
├── lib/
│ ├── main.dart # Entry point + MaterialApp
│ ├── l10n/ # PL + EN ARB files + generated code
│ ├── screens/ # Home, Timer, Stopwatch, Config
│ ├── widgets/ # TileWidget, TimeDisplay, ActionButtons
│ │ # + ConfigSettingsSection/Form/TileList
│ ├── models/ # TimerTile
│ └── services/ # TimerController, StopwatchController,
│ # StorageService
├── test/ # 52 unit + widget tests
└── assets/ # Source app icon (1024x1024)
- 📸 Add screenshots + GIF demo to README
- 🎭 Adaptive icon variants (separate foreground + background layers)
- 🔍 More translations (DE, FR, ES — contributions welcome)
- 🤖 GitHub Actions CI (see
.github/workflows/ci.yml) - 📋 Optional: F-Droid submission
Built with these excellent open-source packages:
- Flutter — UI toolkit
shared_preferencesflutter_colorpickerwakelock_plusvibration
Gerard Rakoczy — GitHub profile
See CONTRIBUTING.md.
See CHANGELOG.md.
Apache License 2.0 — see LICENSE.
Copyright 2025 Gerard Rakoczy
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.





