{"id":39445615,"url":"https://github.com/salahbm/steppify","last_synced_at":"2026-01-18T04:24:37.141Z","repository":{"id":324687718,"uuid":"1098108988","full_name":"salahbm/steppify","owner":"salahbm","description":"Steppify is a Flutter-based mobile application designed to monitor steps and provide user-centered settings","archived":false,"fork":false,"pushed_at":"2025-11-27T04:02:03.000Z","size":526,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-29T21:38:20.926Z","etag":null,"topics":["dart","flutter","live-activity","livewidget","pedometer"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/salahbm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-17T09:12:17.000Z","updated_at":"2025-11-27T04:02:07.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/salahbm/steppify","commit_stats":null,"previous_names":["salahbm/steppify"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/salahbm/steppify","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salahbm%2Fsteppify","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salahbm%2Fsteppify/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salahbm%2Fsteppify/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salahbm%2Fsteppify/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/salahbm","download_url":"https://codeload.github.com/salahbm/steppify/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salahbm%2Fsteppify/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28529526,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T00:39:45.795Z","status":"online","status_checked_at":"2026-01-18T02:00:07.578Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["dart","flutter","live-activity","livewidget","pedometer"],"created_at":"2026-01-18T04:24:37.058Z","updated_at":"2026-01-18T04:24:37.129Z","avatar_url":"https://github.com/salahbm.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Steppify\n\nSteppify is a Flutter-based mobile application designed to monitor steps and provide user-centered settings such as theming, localization, and permissions (e.g. location tracking). The app supports dark mode, multi-language UI (currently English and Korean), and reactive state management using Riverpod.\n\n---\n\n## Features\n\n- Light and Dark Mode\n- English and Korean Localization (`intl_en.arb`, `intl_ko.arb`)\n- Dynamic Theme Switching\n- Location Tracking Toggle\n- Structured Routing\n- Dependency Injection with `riverpod` and `get_it`\n\n---\n\n## Tech Stack\n\n- Flutter 3.x\n- Riverpod (State Management)\n- GetIt (Dependency Injection)\n- Flutter Localizations\n- Kotlin/Swift (platform-specific code)\n\n---\n\n## Project Structure Overview\n\n```text\nlib\n├── config                  # Global configuration\n│   ├── app_localizations.dart  # Localization setup\n│   ├── app_routes.dart         # App-wide route definitions\n│   ├── app_theme.dart          # Light/Dark theme definitions\n│   ├── config.dart             # Barrel file exporting config modules\n│   └── environment.dart        # Environment-specific variables\n├── core                    # Core/shared functionalities\n│   ├── constants               # App-wide constants\n│   ├── error                   # Custom error classes/helpers\n│   ├── network                 # API/network handling\n│   ├── usecases                # Reusable domain logic\n│   ├── utils                   # Utility functions/classes\n│   └── widgets                 # Common/shared UI components\n├── features                # Feature-based modules\n│   ├── home                    # Home screen feature\n│   ├── not_found               # 404/route not found feature\n│   └── settings                # Settings screen feature\n├── injection_container.dart # Dependency Injection setup (with Riverpod \u0026 GetIt)\n├── l10n                    # Localization files (.arb format)\n└── main.dart               # Application entry point\n\n```\n\n---\n\n## Getting Started\n\n### Prerequisites\n\n- Flutter SDK installed: [https://docs.flutter.dev/get-started/install](https://docs.flutter.dev/get-started/install)\n- Dart extension enabled\n- Supported platforms enabled (Android, iOS, Web, etc.)\n\n### Install Dependencies\n\n```sh\nflutter pub get\n```\n\n### Run the App\n\n#### For Android:\n\n```sh\nflutter run -d android\n```\n\n#### For iOS:\n\nMake sure CocoaPods is installed:\n\n```sh\nsudo gem install cocoapods\n```\n\nThen:\n\n```sh\nflutter run -d ios\n```\n\n#### For Web:\n\n```sh\nflutter run -d chrome\n```\n\n#### For Desktop:\n\nEnable desktop targets: [https://docs.flutter.dev/desktop](https://docs.flutter.dev/desktop)\n\n---\n\n## Real Step Tracking Integration\n\nSteppify now ships with a production-ready pedometer stack powered by the\n[`pedometer`](https://pub.dev/packages/pedometer),\n[`permission_handler`](https://pub.dev/packages/permission_handler), and\n[`flutter_background`](https://pub.dev/packages/flutter_background) plugins.\n\n### Dependencies\n\n`pubspec.yaml`\n\n```yaml\ndependencies:\n  pedometer: ^4.0.1\n  permission_handler: ^11.3.1\n  flutter_background: ^1.2.0\n```\n\nFetch the packages with `flutter pub get`.\n\n### Android configuration\n\n`android/app/src/main/AndroidManifest.xml`\n\n```xml\n\u003cmanifest ...\u003e\n    \u003cuses-permission android:name=\"android.permission.ACTIVITY_RECOGNITION\" /\u003e\n    \u003cuses-permission android:name=\"android.permission.FOREGROUND_SERVICE\" /\u003e\n    \u003cuses-permission android:name=\"android.permission.WAKE_LOCK\" /\u003e\n    \u003capplication ...\u003e\n        ...\n    \u003c/application\u003e\n\u003c/manifest\u003e\n```\n\nThese permissions allow the app to access the motion sensors and keep the\nbackground service alive while step tracking.\n\n### iOS configuration\n\n`ios/Runner/Info.plist`\n\n```xml\n\u003ckey\u003eNSMotionUsageDescription\u003c/key\u003e\n\u003cstring\u003eSteppify uses your motion data to count steps and update goals.\u003c/string\u003e\n```\n\nBackground step updates are handled by CoreMotion, so no extra switches are\nrequired beyond the privacy description.\n\n### Data layer wiring\n\n- `PedometerDataSourceImpl` (in `lib/features/pedometer/data`) connects to the\n  native pedometer stream, manages permissions, and optionally enables Android\n  foreground services for background tracking.\n- `PedometerRepositoryImpl` exposes this stream to the domain layer.\n- The `pedometerProvider` file registers the data source and repository with\n  Riverpod so the existing controller/UI continue to function without changes.\n\n### Bonus ideas\n\n- Persist the step totals to a backend (e.g., Supabase/Firebase) on interval by\n  listening to the same stream in a background isolate.\n- Use `flutter_local_notifications` with Riverpod listeners to schedule a\n  congratulatory notification whenever `PedometerEntity.totalSteps` meets or\n  exceeds the user’s daily goal.\n\n---\n\n## Folder Descriptions\n\n- **android**, **ios**, **macos**, **linux**, **windows**: Platform-specific code required to run the Flutter app on different platforms.\n- **web**: For running the app on web browsers.\n- **test**: Contains automated widget test templates.\n- **build**: Generated artifacts by the Flutter compiler.\n- **l10n**: Contains localization files (`.arb`). Used to provide translations for UI text.\n- **analysis_options.yaml**: Flutter lint configuration.\n- **pubspec.yaml**: Project dependencies and Flutter settings.\n\n---\n\n## Localization Info\n\nLocalization files are found in `lib/l10n/`:\n\n- `intl_en.arb`: English translations\n- `intl_ko.arb`: Korean translations\n\n### Adding a New Language\n\nAdd a new `.arb` file in `lib/l10n/` and include it in `pubspec.yaml`:\n\n```yaml\nflutter:\n  assets:\n    - lib/l10n/intl_es.arb\n```\n\nRun:\n\n```sh\nflutter gen-l10n\n```\n\n---\n\n## Development Commands\n\n- Format Code:\n\n```sh\nflutter format .\n```\n\n- Check for Errors:\n\n```sh\nflutter analyze\n```\n\n- Clear the build:\n\n```sh\nflutter clean\n```\n\n---\n\n## License\n\nMIT License. See `LICENSE` file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsalahbm%2Fsteppify","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsalahbm%2Fsteppify","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsalahbm%2Fsteppify/lists"}