Conversation
- Add 67 new tests for sync endpoint validation, queue retry/overflow, and sync engine concurrency (fix isSyncing crash bug with try/finally) - Remove DATABASE_PATH env var; auto-detect /data/ (Docker) or ./data/ (local) - Trim verbose UI text, remove "by exercise" history view, redesign workout summary with stats grid, consolidate weight unit display, empty default inputs - Add deployment docs to README - Fix E2E test warnings (PWA workbox glob, stale assertions, form race)
Replace the scrollable exercise list (which caused race conditions from concurrent onchange form submissions) with a wizard-style flow. Each exercise is shown individually with Next/Skip/Previous/Finish navigation. Data saves happen on button press, not on input change. New components: WorkoutWizard, ExerciseStep, WizardProgressBar, WizardBottomBar. Simplified offline queue by consolidating UPDATE_SET, SKIP_EXERCISE, UNSKIP_EXERCISE, UPDATE_UNIT into a single SAVE_EXERCISE action. Exercises without logged reps are implicitly skipped on workout completion.
…me units, validation - Replace array-length sync trigger with fingerprint-based change detection in WorkoutWizard, so server updates (e.g. placeholder IDs becoming real) are picked up even when exercise count stays the same - Extract duplicated placeholder-set creation into createPlaceholderSet helper - Remove placeholder flash on online addSet by skipping the placeholder and letting invalidateAll + syncFromServer bring in the real set - Surface save errors to the user instead of silently swallowing non-OK responses; display inline error text above the bottom bar - Replace plain getUnit() function with $derived rune in ExerciseStep for guaranteed reactivity when toggling units - Convert lbs volume to kg in getWorkoutSummary so total volume is always displayed in kg on the summary page - Tighten set ID validation in sync endpoint and saveExercise action: skip only negative IDs (offline placeholders), return 400 for other invalid values
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
isSyncingcould get permanently stuck after an unhandled exception./data/workout-tracker.dbin Docker,./data/workout-tracker.dblocally. Removed from env files, Docker config, CI, and Playwright config.createPlaceholderSethelpergetUnit()function with$derivedrune for guaranteed reactivity when toggling unitsTest plan