-
Notifications
You must be signed in to change notification settings - Fork 0
feat: Phase 06 - Carousel Navigation #46
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
pineapplestrikesback
merged 95 commits into
main
from
feature/phase-06-carousel-navigation
Jan 23, 2026
Merged
Changes from all commits
Commits
Show all changes
95 commits
Select commit
Hold shift + click to select a range
ba6b6a0
docs: map existing codebase
jtomaszewski-gx aec101e
docs: initialize project
jtomaszewski-gx ed02a8b
chore: add project config
jtomaszewski-gx 4836457
docs: define v1 requirements
jtomaszewski-gx 5855cdb
docs: create roadmap (9 phases)
jtomaszewski-gx 8728b72
docs(01): capture phase context
jtomaszewski-gx 1015ce0
docs(01): research phase domain
jtomaszewski-gx f9c2e79
docs(01): create phase plan
jtomaszewski-gx 0b67aea
feat(01-01): create device detection hook
jtomaszewski-gx 4f53484
feat(01-01): create mobile heatmap component shell
jtomaszewski-gx d9201b2
feat(01-01): add conditional rendering for mobile/desktop heatmaps
jtomaszewski-gx 4b5e26e
docs(01-01): complete mobile component foundation plan
jtomaszewski-gx 1dc16cd
docs(01): complete component-foundation phase
jtomaszewski-gx 0b88e88
docs(02): capture phase context
jtomaszewski-gx 2132d0a
docs(02): research visual system phase domain
jtomaszewski-gx 5b99c88
docs(02): create phase 2 visual system plans
jtomaszewski-gx 4f2c847
feat(02-01): add color scale utility with Oklab interpolation
jtomaszewski-gx 022436a
feat(02-01): add CSS design tokens for dark theme visual system
jtomaszewski-gx 2631317
docs(02-01): complete color scale foundation plan
jtomaszewski-gx 78bc968
refactor(02-02): use centralized color-scale in MuscleHeatmap
jtomaszewski-gx 246520d
refactor(02-02): use CSS tokens in TotalVolumeCard progress bar
jtomaszewski-gx ffa447a
docs(02-02): complete component color integration plan
jtomaszewski-gx e6e0597
docs(02): complete visual-system phase
jtomaszewski-gx ec0ac6a
docs(03): research heatmap core phase
jtomaszewski-gx 12ccd15
docs(03): create phase 3 heatmap core plans
jtomaszewski-gx 5155394
feat(03-02): add body visualization to MobileHeatmap
jtomaszewski-gx 170e3fa
refactor(03-01): remove floating cards and leader lines from MuscleHe…
jtomaszewski-gx cf70449
feat(03-01): optimize MuscleHeatmap layout for screen fill
jtomaszewski-gx f45acd8
style(03-02): optimize mobile heatmap layout and touch interaction
jtomaszewski-gx 867f846
docs(03-01): complete simplify heatmap plan
jtomaszewski-gx 0335899
docs(03-02): complete mobile heatmap plan
jtomaszewski-gx 7898f8c
docs(03): complete heatmap-core phase
jtomaszewski-gx 7c61e81
docs(04): capture phase context
jtomaszewski-gx 6e953c6
docs(04): research front/back toggle phase
jtomaszewski-gx 24d8352
docs(04): create phase plan for front/back toggle
jtomaszewski-gx ca44393
feat(04-01): implement 3D flip container with session state hook
jtomaszewski-gx 4063632
docs(04-01): complete front/back toggle plan
jtomaszewski-gx 5cc50f8
docs(04): complete front-back-toggle phase
jtomaszewski-gx 8ed8869
docs(05): research muscle list phase
jtomaszewski-gx 562d186
docs(05): create phase plan for muscle list
jtomaszewski-gx b4f1173
feat(05-01): create MobileMuscleList with collapsible groups
jtomaszewski-gx 3db51ea
docs(05-01): complete collapsible groups plan
jtomaszewski-gx 20bd84d
feat(05-02): wire useScientificMuscleVolume hook and add loading/erro…
jtomaszewski-gx 2156ff3
feat(05-02): add muscle row with progress bar
jtomaszewski-gx f3516d3
feat(05-02): add group summary in header
jtomaszewski-gx 29cba60
docs(05-02): complete progress bars and data plan
jtomaszewski-gx 0808fd3
docs(05): complete muscle-list phase
pineapplestrikesback 7b24e45
docs(06): research phase domain
pineapplestrikesback a20dc5d
docs(06): create carousel navigation phase plan
pineapplestrikesback 3b2e7b5
feat(06-01): add swipeable carousel with embla-carousel-react
pineapplestrikesback b821b3d
docs(06-01): complete carousel navigation plan
pineapplestrikesback 3f0dc3f
feat(06-02): integrate MobileCarousel into Dashboard
pineapplestrikesback a18b834
fix(06-02): improve mobile muscle list layout and grouping
pineapplestrikesback c19adc3
feat(06-02): add bilateral persistent muscle highlighting
pineapplestrikesback b04efbb
docs(06-02): complete dashboard integration and UX improvements plan
pineapplestrikesback f069041
docs(06): complete carousel navigation phase
pineapplestrikesback be60229
refactor(06): apply CodeRabbit review feedback
pineapplestrikesback f92210b
docs(07): capture phase context
pineapplestrikesback a6fd786
docs(07): research phase domain
pineapplestrikesback de5cf4c
docs(07): create phase plan
pineapplestrikesback 1402d0b
feat(07-01): create MuscleDetailModal component
pineapplestrikesback 04c2da2
docs(07-01): complete muscle detail modal plan
pineapplestrikesback 42bfbe6
feat(07-02): integrate MuscleDetailModal into MobileHeatmap
pineapplestrikesback df55739
feat(07-02): add SVG region highlighting when modal open
pineapplestrikesback 13808d8
feat(07-02): improve modal UX and muscle region mappings
pineapplestrikesback a9b0a76
docs(07): complete detail pop-up phase
pineapplestrikesback 54b2197
docs(08): capture phase context
pineapplestrikesback 293e596
docs(08): research tap interactions phase
pineapplestrikesback 80a5b47
docs(08): create phase plan
pineapplestrikesback 3756d16
feat(08-02): add bilateral tap animation to MobileHeatmap
pineapplestrikesback abc367c
feat(08-01): add single-muscle mode to MuscleDetailModal
pineapplestrikesback 677cfeb
style(08-02): suppress default mobile tap highlight
pineapplestrikesback 59b9a37
feat(08-01): add tappable muscle rows to MobileMuscleList
pineapplestrikesback 3deb70b
docs(08-01): complete list tap interactions plan
pineapplestrikesback e3f3867
refactor(08): disable list row modals until more data available
pineapplestrikesback 3e0f4db
docs(08-02): complete bilateral tap animation plan
pineapplestrikesback 2245380
docs(08): complete tap interactions phase
pineapplestrikesback 8795c41
docs(09): capture phase context
pineapplestrikesback f92d5c9
docs(09): research phase domain
pineapplestrikesback 2ee598e
docs(09): create phase plan
pineapplestrikesback 16ac267
fix(09): revise plans based on checker feedback
pineapplestrikesback 252c555
feat(09-01): add schema types and default muscle group configuration
pineapplestrikesback 91b6a08
feat(09-01): create useMuscleGroups hook for reading and mutating config
pineapplestrikesback c6e343d
docs(09-01): complete data layer plan
pineapplestrikesback ccc9c2f
feat(09-02): install dnd-kit and create base components
pineapplestrikesback b2097c4
feat(09-02): create MusclePickerModal and SortableGroupRow
pineapplestrikesback 292b102
feat(09-02): create MuscleGroupEditor and integrate into Settings
pineapplestrikesback 48ee05e
docs(09-02): complete settings UI plan
pineapplestrikesback 7a975fa
feat(09-03): update MobileMuscleList to use custom groups
pineapplestrikesback 243e814
feat(09-03): update MobileHeatmap to gray out hidden muscles
pineapplestrikesback 6269a2d
fix(09-03): address checkpoint feedback
pineapplestrikesback 8d42251
chore: add .worktrees/ to gitignore
pineapplestrikesback d727dee
feat(09): add cross-group muscle drag-drop and UX improvements
pineapplestrikesback cde5f59
fix: address CodeRabbit review comments
pineapplestrikesback e6cac20
Merge branch 'main' into feature/phase-06-carousel-navigation
pineapplestrikesback File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,88 @@ | ||
| # Mobile Muscle Heatmap Refactor | ||
|
|
||
| ## What This Is | ||
|
|
||
| A mobile UI refactor for the muscle heatmap component in ScientificMuscle. The current UI shows everything at once with floating label boxes, creating visual noise and cognitive overload. This refactor moves from label-driven to pattern-driven design — the body becomes a readable heatmap, with numbers relegated to a secondary panel. | ||
|
|
||
| ## Core Value | ||
|
|
||
| The body itself must carry the primary signal. Users should see training distribution at a glance without reading numbers. | ||
|
|
||
| ## Requirements | ||
|
|
||
| ### Validated | ||
|
|
||
| - ✓ Weekly volume tracking per muscle — existing | ||
| - ✓ Front/back anatomical views — existing | ||
| - ✓ 26-muscle granularity with fractional contributions — existing | ||
| - ✓ Per-muscle target goals (0-20 sets) — existing | ||
|
|
||
| ### Active | ||
|
|
||
| - [ ] Body heatmap as primary visualization (no floating labels) | ||
| - [ ] Two-slide horizontal carousel (Instagram-style swipe) | ||
| - [ ] Slide 1: Body heatmap with color-based volume indication | ||
| - [ ] Slide 2: Muscle list grouped by region with progress bars | ||
| - [ ] Tap-to-reveal detail pop-up for individual muscles | ||
| - [ ] Front/Back toggle feels like rotation, not mode switch | ||
| - [ ] Color semantics fixed (red = warnings/overtraining only) | ||
| - [ ] Component isolation from future desktop implementation | ||
|
|
||
| ### Out of Scope | ||
|
|
||
| - Desktop layout — separate milestone, different design | ||
| - Advanced analytics on this screen — belongs elsewhere | ||
| - Recommendations or coaching text — not this screen's job | ||
| - Week-vs-week comparisons — future feature | ||
| - Symmetry warnings — future feature | ||
| - Data model changes — presentation only, model stays | ||
|
|
||
| ## Context | ||
|
|
||
| The existing MuscleHeatmap component works but has misaligned information architecture: | ||
|
|
||
| - Floating red boxes dominate the screen and feel detached from anatomy | ||
| - Red used as neutral color (conventionally signals error/danger) | ||
| - Too many labels = cognitive overload | ||
| - Body diagram is visually interrupted, not the star | ||
| - Users read boxes instead of reading the body | ||
|
|
||
| The refactor preserves the solid data model while changing visual hierarchy: | ||
|
|
||
| - **Primary layer:** Body as heatmap (pattern recognition) | ||
| - **Secondary layer:** Side panel with grouped muscles + progress bars | ||
| - **Tertiary layer:** Pop-up detail cards on interaction | ||
|
|
||
| Mobile layout: Two-slide carousel + modal overlay for detail. | ||
|
|
||
| ### Muscle Grouping Structure | ||
|
|
||
| Groups are visual/navigational, not analytical. Individual muscles stay distinct: | ||
|
|
||
| - **Shoulders:** Ant Delt, Lat Delt, Post Delt | ||
| - **Chest:** Pec (Clavicular), Pec (Sternal) | ||
| - **Back:** Upper Trap, Mid Trap, Low Trap, Lats, Erectors | ||
| - **Arms:** Biceps, Triceps (Long/Lat-Med), Forearms (Flex/Ext) | ||
| - **Core:** Abs, Obliques | ||
| - **Legs:** Quads (RF/Vasti), Hamstrings, Adductors, Glutes (Max/Med), Calves (Gastroc/Soleus) | ||
|
|
||
| ## Constraints | ||
|
|
||
| - **Data model:** Preserve existing — no changes to taxonomy, volume calculation, or DB schema | ||
| - **Mobile-first:** This milestone is mobile-only; desktop handled separately | ||
| - **Component isolation:** Clear separation so mobile and desktop don't affect each other | ||
| - **Tech stack:** React, Tailwind, existing anatomy SVGs in `src/ui/components/anatomy/` | ||
|
|
||
| ## Key Decisions | ||
|
|
||
| | Decision | Rationale | Outcome | | ||
| | ----------------------------- | ------------------------------------------------------- | --------- | | ||
| | Two-slide carousel for mobile | Instagram-familiar pattern, separates glance vs detail | — Pending | | ||
| | Pop-up for muscle detail | Avoids third slide, respects progressive disclosure | — Pending | | ||
| | Groups are visual only | Keeps data granularity, reduces cognitive load | — Pending | | ||
| | Red reserved for warnings | Current red-as-neutral feels angry/judgmental | — Pending | | ||
| | Front/Back as rotation | Should feel like turning an object, not switching tools | — Pending | | ||
|
|
||
| --- | ||
|
|
||
| _Last updated: 2026-01-18 after initialization_ | ||
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,120 @@ | ||
| # Requirements: Mobile Muscle Heatmap Refactor | ||
|
|
||
| **Defined:** 2026-01-18 | ||
| **Core Value:** The body itself must carry the primary signal — users see training distribution at a glance without reading numbers. | ||
|
|
||
| ## v1 Requirements | ||
|
|
||
| ### Carousel Navigation | ||
|
|
||
| - [ ] **NAV-01**: User can swipe horizontally between heatmap and muscle list slides | ||
| - [ ] **NAV-02**: Slide indicator shows current position (dots or similar) | ||
| - [ ] **NAV-03**: Default view is heatmap (slide 1) | ||
|
|
||
| ### Heatmap | ||
|
|
||
| - [x] **HEAT-01**: Body fills screen without floating labels | ||
| - [x] **HEAT-02**: Each muscle region shows color based on weekly volume | ||
| - [x] **HEAT-03**: Color scale uses warm progression (not red as neutral) | ||
| - [ ] **HEAT-04**: Tapping a muscle opens detail pop-up | ||
|
|
||
| ### Muscle List | ||
|
|
||
| - [ ] **LIST-01**: Muscles grouped by region (Shoulders, Chest, Back, Arms, Core, Legs) | ||
| - [ ] **LIST-02**: Groups are collapsible | ||
| - [ ] **LIST-03**: Each muscle shows name + progress bar (0-20 sets) | ||
| - [ ] **LIST-04**: Numeric value shown with secondary emphasis | ||
| - [ ] **LIST-05**: Tapping a muscle opens detail pop-up | ||
|
|
||
| ### Detail Pop-up | ||
|
|
||
| - [ ] **DETAIL-01**: Pop-up shows muscle name, weekly sets, target range | ||
| - [ ] **DETAIL-02**: Pop-up can be dismissed (tap outside or X) | ||
| - [ ] **DETAIL-03**: Pop-up highlights corresponding muscle on heatmap | ||
|
|
||
| ### Visual Language | ||
|
|
||
| - [ ] **VIS-01**: Red reserved for warnings/exceeding limits only | ||
| - [ ] **VIS-02**: Consistent accent color across heatmap, progress bars, highlights | ||
| - [ ] **VIS-03**: Dark neutral background maintained | ||
|
|
||
| ### Front/Back Toggle | ||
|
|
||
| - [ ] **TOGGLE-01**: Toggle feels like rotation, not mode switch | ||
| - [ ] **TOGGLE-02**: Toggle is visually quiet (not emphasized) | ||
| - [ ] **TOGGLE-03**: State persists across slide navigation | ||
|
|
||
| ### Component Architecture | ||
|
|
||
| - [ ] **ARCH-01**: Mobile heatmap component isolated from desktop implementation | ||
| - [ ] **ARCH-02**: Shared data hooks, separate presentation components | ||
|
|
||
| ### Custom Grouping | ||
|
|
||
| - [ ] **GROUP-01**: User can create/edit/delete muscle groups in Settings | ||
| - [ ] **GROUP-02**: Each muscle belongs to exactly one group | ||
| - [ ] **GROUP-03**: Default groupings provided as starting point | ||
| - [ ] **GROUP-04**: Maximum 8 groups allowed | ||
| - [ ] **GROUP-05**: Custom groupings persist per profile | ||
|
|
||
| ## v2 Requirements | ||
|
|
||
| ### Future Enhancements | ||
|
|
||
| - **FUTURE-01**: Desktop layout with side-by-side body + panel | ||
| - **FUTURE-02**: Week-vs-week comparison view | ||
| - **FUTURE-03**: Symmetry warnings (left/right imbalance) | ||
| - **FUTURE-04**: Training recommendations based on gaps | ||
|
|
||
| ## Out of Scope | ||
|
|
||
| | Feature | Reason | | ||
| | --------------------------------- | ---------------------------------------- | | ||
| | Desktop layout | Separate milestone with different design | | ||
| | Analytics/insights on this screen | Belongs in dedicated analytics view | | ||
| | Coaching/recommendation text | Not this screen's purpose | | ||
| | Data model changes | Presentation refactor only | | ||
|
|
||
| ## Traceability | ||
|
|
||
| | Requirement | Phase | Status | | ||
| | ----------- | ----- | -------- | | ||
| | NAV-01 | 6 | Complete | | ||
| | NAV-02 | 6 | Complete | | ||
| | NAV-03 | 6 | Complete | | ||
| | HEAT-01 | 3 | Complete | | ||
| | HEAT-02 | 3 | Complete | | ||
| | HEAT-03 | 3 | Complete | | ||
| | HEAT-04 | 8 | Pending | | ||
| | LIST-01 | 5 | Complete | | ||
| | LIST-02 | 5 | Complete | | ||
| | LIST-03 | 5 | Complete | | ||
| | LIST-04 | 5 | Complete | | ||
| | LIST-05 | 8 | Pending | | ||
| | DETAIL-01 | 7 | Pending | | ||
| | DETAIL-02 | 7 | Pending | | ||
| | DETAIL-03 | 7 | Pending | | ||
| | VIS-01 | 2 | Complete | | ||
| | VIS-02 | 2 | Complete | | ||
| | VIS-03 | 2 | Complete | | ||
| | TOGGLE-01 | 4 | Complete | | ||
| | TOGGLE-02 | 4 | Complete | | ||
| | TOGGLE-03 | 4 | Complete | | ||
| | ARCH-01 | 1 | Complete | | ||
| | ARCH-02 | 1 | Complete | | ||
| | GROUP-01 | 9 | Pending | | ||
| | GROUP-02 | 9 | Pending | | ||
| | GROUP-03 | 9 | Pending | | ||
| | GROUP-04 | 9 | Pending | | ||
| | GROUP-05 | 9 | Pending | | ||
|
|
||
| **Coverage:** | ||
|
|
||
| - v1 requirements: 28 total | ||
| - Mapped to phases: 28 | ||
| - Unmapped: 0 | ||
|
|
||
| --- | ||
|
|
||
| _Requirements defined: 2026-01-18_ | ||
| _Last updated: 2026-01-23 after Phase 6 completion_ |
Oops, something went wrong.
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.
Uh oh!
There was an error while loading. Please reload this page.