- Add replay regression test suite covering irregular/jittered timestamps, identical/zero dt, inverted timestamps, large gaps, pause/resume timing reconciliation, manual seek, speed changes, and large datasets (144k points).
- Harden advancePlaybackIndex against non-finite/NaN budget and timestamp delta anomalies.
- Reset lastTimeRef and cap frameDelta in WebTelemetryReplayModal to eliminate sudden jumps on speed switching or background tab resumes.
- Guard group-ride creation with in-flight isSubmitting state and disabled submit button in CreateGroupRideModal; guarantee unique collision-free ride IDs across concurrent submissions.
- Remove obsolete Vercel reference in website/.env.example in favor of Vultr VPS and Caddy; add npm test script.
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!