Problem
qfit currently carries three UI layers from successive iterations:
- Legacy
.ui long-scroll dock — still owns many real widgets, settings bindings, and workflow callbacks.
- Intermediate workflow-sections refactor — rearranges the legacy widgets into collapsible sections, but is now mostly hidden by the live local-first shell.
- Local-first tabbed dock — the current visible user surface, but it still depends on hidden legacy widgets as backing controls.
This creates a mismatch: the visible UI is cleaner, but some behavior still lives in hidden legacy controls. Users may not be able to discover or configure all features from the current tabbed UI.
Functionality to audit/re-expose in the local-first UI
Known candidates from the current code/UI split:
- Mapbox background-map configuration and loading
- enable basemap
- preset
- custom style owner / style ID
- tile rendering mode
- explicit load/apply basemap action
- Activity styling / visualization options
- style preset
- preview sort if still product-relevant
- Map filters
- name/date/distance/detailed-route filters are moved into the Map page, but should be verified in the live layout.
- Data/storage settings
- GeoPackage output path and browse action
- sampled activity point generation
- point sampling stride
- Advanced fetch settings
- page size / max pages
- detailed route fetching
- detailed route strategy
- max detailed routes this run
- Analysis controls
- Atlas/export controls
- PDF output path and browse action
- any remaining export settings still only present in hidden backing controls
- Connection/settings controls
- Strava and Mapbox credentials should have one clear Settings home, without duplicate hidden ownership.
Proposal
Consolidate the production dock around the local-first tabbed UI as the only user-facing dock architecture:
- Migrate every still-needed legacy control into explicit local-first page content or Settings content.
- Remove the dependency on hidden legacy widgets for user-facing configuration where practical.
- Delete or retire the legacy long-scroll
.ui surface once parity is reached.
- Delete or retire the intermediate
WorkflowSectionCoordinator collapsible-section path once it no longer owns production behavior.
- Keep callback/application logic, but bind it to local-first widgets directly instead of hidden legacy widgets.
Acceptance criteria
- The local-first tabbed UI exposes all supported user-facing qfit functionality.
- No supported feature is configurable only through hidden legacy widgets.
- The legacy long-scroll dock is no longer installed or required as a user-facing surface.
- The intermediate workflow-section rearrangement path is removed or reduced to non-production compatibility only.
- Settings persistence continues to load existing user preferences without breaking migration.
- Tests cover the local-first UI parity for the migrated controls/actions.
Execution guidance
Use this issue as the cleanup/consolidation umbrella for retiring the legacy and intermediate UI layers. Do not implement the whole umbrella in one large PR. Split the work into small, reviewable PR-sized slices, for example:
- Re-expose one missing feature area in the local-first UI.
- Move its settings/callback bindings from hidden legacy widgets to local-first widgets.
- Add focused tests for that migrated surface.
- Only then remove or simplify the now-unused legacy/intermediate code for that slice.
Each PR should preserve existing settings compatibility and keep the visible local-first UI coherent.
Problem
qfit currently carries three UI layers from successive iterations:
.uilong-scroll dock — still owns many real widgets, settings bindings, and workflow callbacks.This creates a mismatch: the visible UI is cleaner, but some behavior still lives in hidden legacy controls. Users may not be able to discover or configure all features from the current tabbed UI.
Functionality to audit/re-expose in the local-first UI
Known candidates from the current code/UI split:
Proposal
Consolidate the production dock around the local-first tabbed UI as the only user-facing dock architecture:
.uisurface once parity is reached.WorkflowSectionCoordinatorcollapsible-section path once it no longer owns production behavior.Acceptance criteria
Execution guidance
Use this issue as the cleanup/consolidation umbrella for retiring the legacy and intermediate UI layers. Do not implement the whole umbrella in one large PR. Split the work into small, reviewable PR-sized slices, for example:
Each PR should preserve existing settings compatibility and keep the visible local-first UI coherent.