* fix(dashboard): ensure Touring map follows rider and supports recenter (#48) * fix(social): make shared session telemetry read-only and authoritative (#50) * fix(social): use recorded telemetry for feed charts and verify GPS badge (#51) * fix(social): standardize community feed typography and theme colors (#49) * fix(social): prevent horizontal overflow in GPX export snackbar (#52) - Wrap GPX export snackbar message Text in Expanded with maxLines: 2 and TextOverflow.ellipsis - Add ValueKey('gpx_export_button_<id>') for deterministic testing - Wrap narrow feed header/metric/empty-state Row labels in Flexible to prevent overflow under 320px/360px at 1.5x text scale - Add BUG-005 widget tests across 320x640, 360x800, and 800x480 viewports at 1.5x text scale * fix(social): harden share modal, inspector theming, and PR #78 accuracy (#49, #50, #51, #52) - Require a selected recorded Ride in ShareSessionModal before enabling publish - Theme ShareSessionModal and FeedTelemetryInspectorModal for Light and Dark modes - Use LayoutBuilder width for FeedTelemetryInspectorModal scrubber drag/tap - Route PopupMenuButton export_gpx action through the overflow-safe GPX snackbar - Enforce telemetrySamples >= 2 when provided to verifyGpsCriteria * fix(android): remediate map follow smoothness, orientation controls, starting location, and landscape overflow (#79, #80, #81, #52) * fix(android): stop Pro upsell sheet overflowing in landscape (#52 / BUG-005) The "Forensic CSV & PDF Export" Pro upsell sheet showed "BOTTOM OVERFLOWED BY 90 PIXELS" in landscape on a Pixel 8a. showProUpgradeSheet built a non-scrolling Column inside a default modal bottom sheet, which Flutter caps at 9/16 of the screen height (about 230 dp in landscape) - shorter than the header, description and two actions. Use isScrollControlled and wrap the content in a SingleChildScrollView so the sheet can take the full height and never overflows. This also covers every other caller (garage, add motorcycle, ride detail). Tests: pro_upgrade_sheet_landscape_test covers 914x411 (Pixel 8a), 800x360 and 780x360 at 1.0x and 1.3x text scale plus NOT NOW dismissal. Verified to fail on the old code (RenderFlex overflowed 64-144 px) and pass on the fix. Full suite 1700 passed, flutter analyze clean. Not validated on the physical device yet. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * fix(social): require telemetry evidence, geodesic GPS threshold, and 3 MPH lean gate (#50, #51) --------- Co-authored-by: Developer <dev@example.com> Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> |
||
|---|---|---|
| .agents/skills | ||
| .continue/mcpServers | ||
| .github | ||
| .token-optimizer/wiki | ||
| .wrangler/cache | ||
| android | ||
| assets | ||
| backend/motorsignal_api | ||
| cloudflare/motorsignal-r2-worker | ||
| docs | ||
| field_test_export_ride3_unzipped | ||
| field_test_export_ride4_unzipped | ||
| field_test_export_unzipped/field_test_session | ||
| firebase/emulator-tests | ||
| integration_test | ||
| ios | ||
| lib | ||
| linux | ||
| macos | ||
| patrol_test | ||
| qa_screenshots | ||
| ride_logs | ||
| scripts | ||
| server/waze_relay | ||
| test | ||
| tool | ||
| tools | ||
| web | ||
| website | ||
| windows | ||
| .firebaserc | ||
| .gitattributes | ||
| .gitignore | ||
| .metadata | ||
| AGENTS.md | ||
| CHANGELOG.md | ||
| GEMINI.md | ||
| PRODUCT.md | ||
| README.md | ||
| analysis_options.yaml | ||
| azure-pipelines.yml | ||
| field_test_export.zip | ||
| field_test_export_ride3.zip | ||
| field_test_export_ride4.zip | ||
| firebase.emulator.json | ||
| firebase.json | ||
| firestore.indexes.json | ||
| firestore.rules | ||
| fix_exceptions.dart | ||
| generate_icon.dart | ||
| pubspec.lock | ||
| pubspec.yaml | ||
| release_manifest.json | ||
| serve_apk.js | ||
| skills-lock.json | ||
README.md
Motorcycle Digital Dashboard 🏍️
A high-performance, dark-themed telemetry and analytics dashboard for motorcycles, built with Flutter.
Features
- Real-time Telemetry: Uses GPS and IMU sensors to calculate speed, lean angle (bank), and acceleration/braking G-forces.
- Automatic Ride Recording: Automatically starts tracking when movement is detected and logs your trip.
- Performance Analysis: Automatically measures 0-60 MPH and 0-100 MPH acceleration times.
- 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
.csvor.gpxfor external analysis.
Setup & Building
- Ensure you have the Flutter SDK installed.
- Clone this repository.
- Run
flutter pub getto fetch dependencies. - Add your Google Maps API key in
android/app/src/main/AndroidManifest.xml(replaceYOUR_API_KEY_HERE). - Run
flutter runorflutter 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!