- Enforce positive bundle size, matching SHA-256, user-scoped object keys, and legacyUnverified status for historical bundles in R2UploadService and FirebaseSyncProvider
- Update SyncManager reconciliation to accept legacyUnverified status, mark historical rides as synced without re-upload, and track legacy unverified counts
- Add 18-test vitest suite for Cloudflare Worker /r2/verify endpoint covering CORS, auth, validation, ownership, HEAD/GET, legacy bundles, and errors
- Harden test/disposable_backup_recovery_verification_test.dart with candidate path discovery and CI skip guard
Ride History & Replay: View past rides, replay telemetry synchronized with a Google Map.
Audio Alerts: Text-to-speech alerts for milestones and ride states to keep your eyes on the road.
Data Export: Export your ride telemetry to .csv or .gpx for external analysis.
Setup & Building
Ensure you have the Flutter SDK installed.
Clone this repository.
Run flutter pub get to fetch dependencies.
Add your Google Maps API key in android/app/src/main/AndroidManifest.xml (replace YOUR_API_KEY_HERE).
Run flutter run or flutter build apk.
Architecture
Framework: Flutter (Material 3).
State Management: Riverpod for reactive UI state.
Database: Drift (SQLite) for robust, local storage.
Sensor Fusion: Complementary filter combining accelerometer and gyroscope for precise lean angles.
Documentation
The active documentation map and dated evidence archive are indexed in docs/README.md.
Disclaimer
This application relies on the accuracy of your smartphone's internal sensors. It should be securely mounted to the motorcycle using a rigid mount. Do not interact with the screen while riding. Ride safely!