Skip to content

Expand workout management and harden virtual shifting#7

Merged
lookfirst merged 10 commits into
mainfrom
feat/rename-imported-workouts
Jul 21, 2026
Merged

Expand workout management and harden virtual shifting#7
lookfirst merged 10 commits into
mainfrom
feat/rename-imported-workouts

Conversation

@lookfirst

Copy link
Copy Markdown
Collaborator

What changed

  • expands imported GPX workout management with renaming, persistent drag ordering, search, cached starting locations, in-app OpenStreetMap route previews, and animated bicycle playback
  • improves workout route modeling and previews, including point-to-point detection, newly imported workout prioritization, more precise course distance, compact map/profile panels, and persistent tray state
  • hardens Zwift Click V2 behavior with session-scoped connections, accurate connected-device counts, proactive controller event-session refresh, serialized reconnect cleanup, and reliable minus-controller recovery
  • models virtual shifting as the ordered combinations of a 39/53 chainset and 12-speed 12–24 cassette, while preserving applied resistance in recorded sessions and TCX exports
  • adds grade and resistance chart series, clearer chart navigation, tighter dashboard spacing, functional motion under Chromium reduced-motion settings, and restored resistance controls when Click is unavailable
  • restores the selected saved session and Sessions list scroll position after reload

Why

The workout library had grown beyond simple selection and needed durable organization and route context. At the same time, Click controller sessions could expire or report stale connection state, and the dashboard needed to preserve both recorded control data and user navigation state.

Impact

Riders can organize and inspect imported routes more naturally, resume exactly where they left off in Sessions and Workouts, rely on more realistic virtual ratios, and keep Click controllers connected only while riding without losing controller event reliability.

Validation

  • bun run ci
  • 217 tests passing
  • Tailwind diagnostics
  • TypeScript type check
  • production Vite build

lookfirst added 10 commits July 20, 2026 16:36
Remember the open devices, workouts, or history tray across reloads and clear it when closed. Remove decorative modal eyebrow labels, add focused overlay coverage, and document the direct-header design rule.
Add rename, persistent drag ordering, name and difficulty search, whole-tray GPX drop import, and BikeGPX discovery. Label undescribed routes from a cached starting-city lookup with attribution. Preserve open GPX tracks as point-to-point courses, infer loops from nearby endpoints, migrate legacy generated return legs, and keep route progress fixed at the finish. Update workout UI, exports, documentation, validation, and coverage.
- add precise insertion-line reordering with an up/down drag handle

- persist tray scroll position and keep feedback in a stable footer

- save geocoded starting locations and link route bounds on OpenStreetMap

- streamline workout renaming and expand persistence and rendering coverage
Use vertically constrained sortable workout cards with animated insertion space and persisted ordering.

Open imported GPX routes in an in-app Leaflet dialog beside the tray, fit the full route, show endpoints, and animate a standard bicycle marker even when Chromium reports reduced motion.

Update project guidance, documentation, dependencies, and coverage for the revised interactions.
@lookfirst
lookfirst merged commit 83e464f into main Jul 21, 2026
1 check passed
@lookfirst
lookfirst deleted the feat/rename-imported-workouts branch July 21, 2026 05:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant