Skip to content

WebGUI v7.2.0 Version

Latest

Choose a tag to compare

@Abasz Abasz released this 08 Sep 19:19

Version 7.2.0

This release replaces TCX export with a full FIT file export that carries rowing-specific data into Garmin Connect and other platforms, introduces lap and interval support across the whole recording, export and analysis pipeline, adds an Intervals.icu integration with automatic and bulk upload, and brings dedicated kayak ergometer metrics.

New Features

FIT File Export

  • FIT Export: Replaced the TCX export with FIT file export. The generator produces standard Activity files following FIT best practices with summary-last message ordering, including distance, speed, power, cadence, heart rate, HRV data and session summaries. Files are written with the application/vnd.ant.fit MIME type and are compatible with Strava, Garmin Connect and other FIT-capable platforms.
  • Sport Type Detection: The sport type is derived from the connected device, producing rowing/indoorRowing for rowing ergometers and kayaking/generic for kayak ergometers.
  • Multi-Lap Export: FIT files contain one LAP message per lap segment with individual statistics. Pause markers produce a rest lap bracketed by timer stop/start events, and the last active segment is marked as the session end. Sessions without markers produce a single lap.
  • Splits: Added split and split_summary messages so Garmin Connect and other platforms can show per-interval active/rest breakdowns alongside the lap data.
  • Rowing Developer Fields: Added 11 developer field definitions carrying rowing-specific data that has no standard FIT equivalent. Every record includes drive time, recovery time and drag factor; records with handle force data additionally carry drive length, average and peak drive force, and normalized peak force position. Lap and session messages carry the average drag factor.
  • Handle Force Curve: Each record with handle force data also carries the full force curve as a scaled UINT16 array (0.1 N precision) with abscissa metadata, padded to a common point count.

Laps and Intervals

  • Manual Laps: Added a lap button to the dashboard toolbar (visible while a session is running) that records a lap marker at the current stroke. A snackbar confirms each recorded lap with its number.
  • Auto-Lap: Added distance and time based auto-lap. When the accumulated distance or elapsed time crosses the configured threshold a lap is recorded automatically. Configurable from the general settings with an Off/Distance/Time toggle and preset values (200 m–10000 m, or 1–30 min).
  • Auto-Pause: Added an auto-pause option that pauses the session when speed reaches zero, available as a new "On Start & Pause" mode alongside the existing auto-start setting. Pauses are stored as pause markers so rest periods are preserved in exports.
  • Lap Persistence: Added a dedicated laps database table storing session, timestamp, stroke index, lap type (manual/distance/time) and pause flag for every marker.
  • Laps in Session Analysis: The session detail view now segments strokes by stored lap markers, falling back to the previous inactivity-based detection for sessions recorded before this release.
  • Laps in Exports: Lap markers are included in the session JSON export and drive the multi-lap FIT export.

Intervals.icu Integration

  • Automatic Upload: Stopping a session automatically uploads it to Intervals.icu when auto-upload is enabled and an API key is configured.
  • Settings: Added an Intervals.icu section to the General settings tab for the API key, an optional athlete ID and the auto-upload toggle, with visibility toggles for the sensitive fields.
  • Bulk Upload: After saving a new API key or completing first-time setup, the app offers to upload existing sessions in bulk, with a progress dialog and cancellation support.
  • Manual Upload: Added a per-session upload button to the logbook dialog with upload status indication, so individual sessions can be pushed on demand.
  • Upload Tracking: Added a sessionUploads table that records which sessions have already been uploaded so bulk runs skip them.

Kayak Ergometer Support

  • Power Balance Tile: Added a Power Balance tile for ergometers that alternate between left (side A) and right (side B) paddle strokes. The metric compares mean handle force across consecutive odd/even stroke pairs and displays the A/B percentage split, or N/A on non-kayak devices.
  • A/B Side Labels: The Force Curve tile now labels the current stroke side, showing (A) or (B) in the chart title.
  • Balance in Session Analysis: The session detail view shows average balance and balance consistency for kayak sessions, plus a per-lap Balance column in the lap table.

New Tiles

  • Total Work Tile: Added a Total Work metric that accumulates energy across strokes and displays it in kJ. The running total is also included in exports.
  • Peak Force Position Tile: Added a normalized peak force position metric showing, as a percentage, where in the drive the peak force occurs. The value is also included in the CSV export and in the session detail view (summary averages, stroke charts and stroke inspector).

General Updates and Improvements

Configuration

  • Versioned Config Migrations: Replaced the single ad-hoc config migration with sequential, versioned migration steps mirroring Dexie's schema versioning. Each step reads the previous storage format, writes the next and removes stale keys, and is skipped silently when its precondition is not met.
  • Grouped General Config: The flat general config is now split into device (ergometer and heart rate IDs, heart rate monitor type) and session (auto-session, auto-lap) groups, separating connection settings from session behaviour. Existing configs are converted automatically on startup.

UI and UX

  • Toggle Group Settings: Replaced the BLE Mode and Heart Rate Monitor dropdowns with button toggle groups to match the display tab, and reorganized the logging section under separate Log Level and Delta Times headings.
  • Toolbar Space: The time-of-day display is hidden on narrow screens to make room for the lap button.
  • Smaller Stylesheets: Split the global flex-layout stylesheet into utility classes and breakpoint mixins. Components now import only the mixins, eliminating duplicated utility class CSS from every compiled component stylesheet.
  • Project Structure: Moved all dialog components into src/app/dialogs and the toolbar buttons into the dashboard folder.

Bug Fixes

  • Drive/Recovery Chart Scaling (#8): The drive/recovery chart used a fixed 0.1–0.6 s Y-axis range tuned for kayak stroke timings, which cropped most data for rowing ergometers. Rowing sessions now use their own fixed 0.4–3.0 s range, selected by device type and stable across zoom and lap selection.

Framework and Dependency Updates

  • New Dependencies: Added @markw65/fit-file-writer for writing FIT files with developer fields, and @garmin/fitsdk as a development dependency for decoding FIT output in tests. Removed js2xmlparser, which was only used by the TCX export.
  • GitHub Actions: Updated the checkout, setup-node, upload-pages-artifact and deploy-pages actions to their latest versions.
  • TypeScript Config: Consolidated type definitions across the tsconfig files and removed the deprecated baseUrl option.

Developer Experience

  • Simplified Test Configuration: Made deepMerge fully generic with a DeepPartial<T> source and used it across the test suite to replace verbose multi-level spread chains and hardcoded config literals.
  • Split Test Suites: Split the SessionManagerService specs into methods, behaviour, auto-session and auto-lap files, with shared setup extracted into test helpers.
  • Restructured FIT Code: Moved all FIT-related sources and specs into utils/fit-file/ and split the test suite into focused core, developer field and multi-lap spec files.
  • Removed TCX Code: Deleted tcx.interface.ts and createSessionTcxObject now that export uses FIT exclusively.

Breaking Changes

  • TCX Export Removed: Session export now produces .fit files only. The TCX export and its "TCX (Strava)" button have been replaced by the FIT equivalent.
  • Database Schema v4: The database schema has been updated to v4 to add the laps and sessionUploads tables. No data conversion is required and the upgrade runs automatically on first load.
  • Config Schema v6: The stored configuration is migrated to a new nested format on startup. Existing settings are preserved; no user action is required.

Full Changelog: 7.1.0...7.2.0