{"id":28907926,"url":"https://github.com/josephdourden/settimer","last_synced_at":"2025-07-13T10:34:16.878Z","repository":{"id":299993670,"uuid":"999130645","full_name":"JosephDoUrden/SetTimer","owner":"JosephDoUrden","description":"A minimalist workout timer app designed specifically for set-based workouts like ab/core training, HIIT, and interval training. Focus on your workout while Workout Set Timer handles the timing automatically.","archived":false,"fork":false,"pushed_at":"2025-06-19T09:37:29.000Z","size":10878,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-19T10:38:56.236Z","etag":null,"topics":["fitness","flutter","ios-app","mobile-app","timer","workout"],"latest_commit_sha":null,"homepage":"https://apps.apple.com/tr/app/workout-set-timer/id6747051697","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JosephDoUrden.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-09T19:34:57.000Z","updated_at":"2025-06-19T10:17:17.000Z","dependencies_parsed_at":"2025-06-19T10:49:15.458Z","dependency_job_id":null,"html_url":"https://github.com/JosephDoUrden/SetTimer","commit_stats":null,"previous_names":["josephdourden/settimer"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/JosephDoUrden/SetTimer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JosephDoUrden%2FSetTimer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JosephDoUrden%2FSetTimer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JosephDoUrden%2FSetTimer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JosephDoUrden%2FSetTimer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JosephDoUrden","download_url":"https://codeload.github.com/JosephDoUrden/SetTimer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JosephDoUrden%2FSetTimer/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261153706,"owners_count":23116918,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fitness","flutter","ios-app","mobile-app","timer","workout"],"created_at":"2025-06-21T16:06:38.082Z","updated_at":"2025-07-13T10:34:16.867Z","avatar_url":"https://github.com/JosephDoUrden.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Workout Set Timer 🏋️‍♂️\n\nA minimalist workout timer app designed specifically for set-based workouts like ab/core training, HIIT, and interval training. Focus on your workout while Workout Set Timer handles the timing automatically.\n\n**Created by [Yusufhan Saçak](https://yusufhan.dev/)** as an open source project demonstrating modern Flutter development practices while providing real value to the fitness community.\n\n## ✨ Features\n\n- **Custom Set Configuration**: Set any number of sets (1-20)\n- **Flexible Duration**: Configure set duration from 10 seconds to 5 minutes\n- **Smart Rest Intervals**: Automatic rest periods after every N sets\n- **Auto-Progression**: Automatically moves between sets and rest periods\n- **Background Support**: Continue workouts with screen locked or app in background\n- **Audio Alerts**: Clear sound notifications for set start/end and rest periods\n- **Modern UI**: Dark theme with beautiful gradients and intuitive controls\n- **One-Tap Start**: Simple interface focused on workout flow\n- **Progress Tracking**: Visual progress bar and set counter\n\n## 📱 Screenshots\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"assets/images/Simulator Screenshot - iPhone 15 Pro Max - 2025-06-14 at 21.43.11.png\" width=\"200\" alt=\"Timer Ready State\" /\u003e\n  \u003cimg src=\"assets/images/Simulator Screenshot - iPhone 15 Pro Max - 2025-06-14 at 21.43.26.png\" width=\"200\" alt=\"Timer Configuration\" /\u003e\n  \u003cimg src=\"assets/images/Simulator Screenshot - iPhone 15 Pro Max - 2025-06-14 at 21.44.00.png\" width=\"200\" alt=\"Timer Running\" /\u003e\n  \u003cimg src=\"assets/images/Simulator Screenshot - iPhone 15 Pro Max - 2025-06-14 at 21.44.23.png\" width=\"200\" alt=\"Timer In Progress\" /\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"assets/images/Simulator Screenshot - iPhone 15 Pro Max - 2025-06-14 at 21.44.28.png\" width=\"200\" alt=\"Settings Screen\" /\u003e\n  \u003cimg src=\"assets/images/Simulator Screenshot - iPhone 15 Pro Max - 2025-06-14 at 21.44.33.png\" width=\"200\" alt=\"Timer Settings\" /\u003e\n  \u003cimg src=\"assets/images/Simulator Screenshot - iPhone 15 Pro Max - 2025-06-14 at 21.44.37.png\" width=\"200\" alt=\"Rest Period\" /\u003e\n  \u003cimg src=\"assets/images/Simulator Screenshot - iPhone 15 Pro Max - 2025-06-14 at 21.44.41.png\" width=\"200\" alt=\"Workout Complete\" /\u003e\n\u003c/div\u003e\n\n*Beautiful dark theme with modern gradients and intuitive controls*\n\n## 🚀 Getting Started\n\n### Prerequisites\n\n- Flutter 3.5.3 or higher\n- Dart SDK 3.5.3 or higher\n- Android Studio / Xcode for device testing\n\n### Installation\n\n1. **Clone the repository**\n   ```bash\n   git clone https://github.com/JosephDoUrden/settimer.git\n   cd settimer\n   ```\n\n2. **Install dependencies**\n   ```bash\n   flutter pub get\n   ```\n\n3. **Run the app**\n   ```bash\n   flutter run\n   ```\n\n### Building for Release\n\n#### Android\n```bash\n# Debug APK\nflutter build apk --debug\n\n# Release APK\nflutter build apk --release\n\n# App Bundle for Play Store\nflutter build appbundle --release\n```\n\n#### iOS\n```bash\n# Open in Xcode\nopen ios/Runner.xcworkspace\n\n# Build from command line\nflutter build ios --release\n```\n\n## 🎯 How to Use\n\n1. **Configure Settings**: Tap the settings button to customize:\n   - Total number of sets\n   - Duration per set\n   - Rest duration\n   - Rest interval (after how many sets)\n\n2. **Start Workout**: Tap the play button to begin\n3. **Hands-Free Operation**: The app automatically handles:\n   - Set countdown\n   - Rest periods\n   - Moving to next set\n   - Workout completion\n\n4. **Control Options**:\n   - **Pause**: Pause the current timer\n   - **Reset**: Reset to beginning\n   - **Settings**: Modify configuration (only when stopped)\n\n## 🏗️ Architecture\n\nWorkout Set Timer follows clean architecture principles with MVC pattern:\n\n```\nlib/\n├── controllers/          # Business logic and state management\n│   └── timer_controller.dart\n├── models/              # Data models\n│   └── timer_model.dart\n├── services/            # External services\n│   ├── audio_service.dart\n│   └── background_service.dart\n├── views/               # UI components\n│   └── timer_view.dart\n└── main.dart           # App entry point\n```\n\n### Key Technologies\n\n- **State Management**: Provider pattern with ChangeNotifier\n- **Audio**: flutter_ringtone_player for system sounds and notifications\n- **Background Processing**: App lifecycle management with timer synchronization\n- **UI**: Material Design 3 with custom dark theme and animations\n- **Platform Integration**: Native iOS audio session and Android wake lock support\n\n## 🎨 Design Philosophy\n\nWorkout Set Timer embraces minimalism with a focus on:\n\n- **Zero Distraction**: Clean interface without unnecessary elements\n- **Workflow**: Automatic progression eliminates manual intervention\n- **Visual Clarity**: High contrast dark theme with accent colors\n- **Accessibility**: Large touch targets and clear visual hierarchy\n\n### Color Palette\n\n- **Primary (Work)**: `#00D4AA` - Energizing teal\n- **Secondary (Rest)**: `#FF6B35` - Calming orange\n- **Background**: `#0A0A0A` to `#2A2A2A` gradient\n- **Text**: White with varying opacity for hierarchy\n\n## 🔧 Configuration\n\n### Default Settings\n- **Sets**: 3\n- **Set Duration**: 30 seconds\n- **Rest Duration**: 10 seconds\n- **Rest Interval**: Every 1 set\n\n### Customization Ranges\n- **Total Sets**: 1-20\n- **Set Duration**: 10-300 seconds\n- **Rest Duration**: 5-120 seconds\n- **Rest Interval**: 1-5 sets\n\n## 📱 Platform Support\n\n### Android\n- **Minimum SDK**: API 21 (Android 5.0)\n- **Target SDK**: API 34 (Android 14)\n- **Permissions**: WAKE_LOCK, VIBRATE\n- **Features**: Background processing, system sounds\n\n### iOS\n- **Deployment Target**: iOS 12.0+\n- **Orientation**: Portrait only\n- **Background Modes**: background-processing, background-fetch\n- **Audio**: Background audio session support\n\n## 🧪 Testing\n\n### Manual Testing Checklist\n\n- [ ] Timer counts down correctly\n- [ ] Set transitions work automatically\n- [ ] Rest periods trigger at correct intervals\n- [ ] Background mode maintains timer\n- [ ] Sound alerts play at appropriate times\n- [ ] Settings persist between sessions\n- [ ] App handles orientation locks\n- [ ] No crashes during extended use\n\n## 🤝 Contributing\n\n1. Fork the repository\n2. Create a feature branch: `git checkout -b feature/amazing-feature`\n3. Commit changes: `git commit -m 'Add amazing feature'`\n4. Push to branch: `git push origin feature/amazing-feature`\n5. Open a Pull Request\n\n### Development Guidelines\n\n- Follow Flutter best practices\n- Maintain clean architecture separation\n- Add tests for new features\n- Update documentation for API changes\n- Use conventional commit messages\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 🙏 Acknowledgments\n\n- Flutter team for the amazing framework\n- Material Design for UI inspiration\n- flutter_ringtone_player package for audio functionality\n- Provider package for state management\n\n## 📞 Support \u0026 Contact\n\n- **Issues**: [GitHub Issues](https://github.com/JosephDoUrden/settimer/issues)\n- **Discussions**: [GitHub Discussions](https://github.com/JosephDoUrden/settimer/discussions)\n- **Website**: [yusufhan.dev](https://yusufhan.dev/)\n\n## 👨‍💻 Author\n\n**Yusufhan Saçak**\n- **LinkedIn:** [Yusufhan Saçak](https://www.linkedin.com/in/yusufhansacak/)\n- **Twitter:** [@0xSCK](https://twitter.com/0xSCK)\n- **Medium:** [My Medium Profile](https://medium.com/@yusufhansacak)\n- **Website:** [yusufhan.dev](https://yusufhan.dev/)\n\nFor business inquiries, please use LinkedIn or the contact form on my website.\n\n---\n\n**Workout Set Timer** - Focus on your workout, let us handle the timing. 💪\n\nBuilt with ❤️ using Flutter\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjosephdourden%2Fsettimer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjosephdourden%2Fsettimer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjosephdourden%2Fsettimer/lists"}