Skip to content
Merged
Show file tree
Hide file tree
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 Jan 18, 2026
aec101e
docs: initialize project
jtomaszewski-gx Jan 18, 2026
ed02a8b
chore: add project config
jtomaszewski-gx Jan 18, 2026
4836457
docs: define v1 requirements
jtomaszewski-gx Jan 18, 2026
5855cdb
docs: create roadmap (9 phases)
jtomaszewski-gx Jan 18, 2026
8728b72
docs(01): capture phase context
jtomaszewski-gx Jan 18, 2026
1015ce0
docs(01): research phase domain
jtomaszewski-gx Jan 18, 2026
f9c2e79
docs(01): create phase plan
jtomaszewski-gx Jan 18, 2026
0b67aea
feat(01-01): create device detection hook
jtomaszewski-gx Jan 18, 2026
4f53484
feat(01-01): create mobile heatmap component shell
jtomaszewski-gx Jan 18, 2026
d9201b2
feat(01-01): add conditional rendering for mobile/desktop heatmaps
jtomaszewski-gx Jan 18, 2026
4b5e26e
docs(01-01): complete mobile component foundation plan
jtomaszewski-gx Jan 18, 2026
1dc16cd
docs(01): complete component-foundation phase
jtomaszewski-gx Jan 18, 2026
0b88e88
docs(02): capture phase context
jtomaszewski-gx Jan 18, 2026
2132d0a
docs(02): research visual system phase domain
jtomaszewski-gx Jan 18, 2026
5b99c88
docs(02): create phase 2 visual system plans
jtomaszewski-gx Jan 18, 2026
4f2c847
feat(02-01): add color scale utility with Oklab interpolation
jtomaszewski-gx Jan 18, 2026
022436a
feat(02-01): add CSS design tokens for dark theme visual system
jtomaszewski-gx Jan 18, 2026
2631317
docs(02-01): complete color scale foundation plan
jtomaszewski-gx Jan 18, 2026
78bc968
refactor(02-02): use centralized color-scale in MuscleHeatmap
jtomaszewski-gx Jan 18, 2026
246520d
refactor(02-02): use CSS tokens in TotalVolumeCard progress bar
jtomaszewski-gx Jan 18, 2026
ffa447a
docs(02-02): complete component color integration plan
jtomaszewski-gx Jan 18, 2026
e6e0597
docs(02): complete visual-system phase
jtomaszewski-gx Jan 18, 2026
ec0ac6a
docs(03): research heatmap core phase
jtomaszewski-gx Jan 18, 2026
12ccd15
docs(03): create phase 3 heatmap core plans
jtomaszewski-gx Jan 18, 2026
5155394
feat(03-02): add body visualization to MobileHeatmap
jtomaszewski-gx Jan 18, 2026
170e3fa
refactor(03-01): remove floating cards and leader lines from MuscleHe…
jtomaszewski-gx Jan 18, 2026
cf70449
feat(03-01): optimize MuscleHeatmap layout for screen fill
jtomaszewski-gx Jan 18, 2026
f45acd8
style(03-02): optimize mobile heatmap layout and touch interaction
jtomaszewski-gx Jan 18, 2026
867f846
docs(03-01): complete simplify heatmap plan
jtomaszewski-gx Jan 18, 2026
0335899
docs(03-02): complete mobile heatmap plan
jtomaszewski-gx Jan 18, 2026
7898f8c
docs(03): complete heatmap-core phase
jtomaszewski-gx Jan 18, 2026
7c61e81
docs(04): capture phase context
jtomaszewski-gx Jan 19, 2026
6e953c6
docs(04): research front/back toggle phase
jtomaszewski-gx Jan 19, 2026
24d8352
docs(04): create phase plan for front/back toggle
jtomaszewski-gx Jan 19, 2026
ca44393
feat(04-01): implement 3D flip container with session state hook
jtomaszewski-gx Jan 19, 2026
4063632
docs(04-01): complete front/back toggle plan
jtomaszewski-gx Jan 19, 2026
5cc50f8
docs(04): complete front-back-toggle phase
jtomaszewski-gx Jan 19, 2026
8ed8869
docs(05): research muscle list phase
jtomaszewski-gx Jan 22, 2026
562d186
docs(05): create phase plan for muscle list
jtomaszewski-gx Jan 22, 2026
b4f1173
feat(05-01): create MobileMuscleList with collapsible groups
jtomaszewski-gx Jan 22, 2026
3db51ea
docs(05-01): complete collapsible groups plan
jtomaszewski-gx Jan 22, 2026
20bd84d
feat(05-02): wire useScientificMuscleVolume hook and add loading/erro…
jtomaszewski-gx Jan 22, 2026
2156ff3
feat(05-02): add muscle row with progress bar
jtomaszewski-gx Jan 22, 2026
f3516d3
feat(05-02): add group summary in header
jtomaszewski-gx Jan 22, 2026
29cba60
docs(05-02): complete progress bars and data plan
jtomaszewski-gx Jan 22, 2026
0808fd3
docs(05): complete muscle-list phase
pineapplestrikesback Jan 22, 2026
7b24e45
docs(06): research phase domain
pineapplestrikesback Jan 22, 2026
a20dc5d
docs(06): create carousel navigation phase plan
pineapplestrikesback Jan 22, 2026
3b2e7b5
feat(06-01): add swipeable carousel with embla-carousel-react
pineapplestrikesback Jan 22, 2026
b821b3d
docs(06-01): complete carousel navigation plan
pineapplestrikesback Jan 22, 2026
3f0dc3f
feat(06-02): integrate MobileCarousel into Dashboard
pineapplestrikesback Jan 22, 2026
a18b834
fix(06-02): improve mobile muscle list layout and grouping
pineapplestrikesback Jan 22, 2026
c19adc3
feat(06-02): add bilateral persistent muscle highlighting
pineapplestrikesback Jan 22, 2026
b04efbb
docs(06-02): complete dashboard integration and UX improvements plan
pineapplestrikesback Jan 22, 2026
f069041
docs(06): complete carousel navigation phase
pineapplestrikesback Jan 22, 2026
be60229
refactor(06): apply CodeRabbit review feedback
pineapplestrikesback Jan 22, 2026
f92210b
docs(07): capture phase context
pineapplestrikesback Jan 23, 2026
a6fd786
docs(07): research phase domain
pineapplestrikesback Jan 23, 2026
de5cf4c
docs(07): create phase plan
pineapplestrikesback Jan 23, 2026
1402d0b
feat(07-01): create MuscleDetailModal component
pineapplestrikesback Jan 23, 2026
04c2da2
docs(07-01): complete muscle detail modal plan
pineapplestrikesback Jan 23, 2026
42bfbe6
feat(07-02): integrate MuscleDetailModal into MobileHeatmap
pineapplestrikesback Jan 23, 2026
df55739
feat(07-02): add SVG region highlighting when modal open
pineapplestrikesback Jan 23, 2026
13808d8
feat(07-02): improve modal UX and muscle region mappings
pineapplestrikesback Jan 23, 2026
a9b0a76
docs(07): complete detail pop-up phase
pineapplestrikesback Jan 23, 2026
54b2197
docs(08): capture phase context
pineapplestrikesback Jan 23, 2026
293e596
docs(08): research tap interactions phase
pineapplestrikesback Jan 23, 2026
80a5b47
docs(08): create phase plan
pineapplestrikesback Jan 23, 2026
3756d16
feat(08-02): add bilateral tap animation to MobileHeatmap
pineapplestrikesback Jan 23, 2026
abc367c
feat(08-01): add single-muscle mode to MuscleDetailModal
pineapplestrikesback Jan 23, 2026
677cfeb
style(08-02): suppress default mobile tap highlight
pineapplestrikesback Jan 23, 2026
59b9a37
feat(08-01): add tappable muscle rows to MobileMuscleList
pineapplestrikesback Jan 23, 2026
3deb70b
docs(08-01): complete list tap interactions plan
pineapplestrikesback Jan 23, 2026
e3f3867
refactor(08): disable list row modals until more data available
pineapplestrikesback Jan 23, 2026
3e0f4db
docs(08-02): complete bilateral tap animation plan
pineapplestrikesback Jan 23, 2026
2245380
docs(08): complete tap interactions phase
pineapplestrikesback Jan 23, 2026
8795c41
docs(09): capture phase context
pineapplestrikesback Jan 23, 2026
f92d5c9
docs(09): research phase domain
pineapplestrikesback Jan 23, 2026
2ee598e
docs(09): create phase plan
pineapplestrikesback Jan 23, 2026
16ac267
fix(09): revise plans based on checker feedback
pineapplestrikesback Jan 23, 2026
252c555
feat(09-01): add schema types and default muscle group configuration
pineapplestrikesback Jan 23, 2026
91b6a08
feat(09-01): create useMuscleGroups hook for reading and mutating config
pineapplestrikesback Jan 23, 2026
c6e343d
docs(09-01): complete data layer plan
pineapplestrikesback Jan 23, 2026
ccc9c2f
feat(09-02): install dnd-kit and create base components
pineapplestrikesback Jan 23, 2026
b2097c4
feat(09-02): create MusclePickerModal and SortableGroupRow
pineapplestrikesback Jan 23, 2026
292b102
feat(09-02): create MuscleGroupEditor and integrate into Settings
pineapplestrikesback Jan 23, 2026
48ee05e
docs(09-02): complete settings UI plan
pineapplestrikesback Jan 23, 2026
7a975fa
feat(09-03): update MobileMuscleList to use custom groups
pineapplestrikesback Jan 23, 2026
243e814
feat(09-03): update MobileHeatmap to gray out hidden muscles
pineapplestrikesback Jan 23, 2026
6269a2d
fix(09-03): address checkpoint feedback
pineapplestrikesback Jan 23, 2026
8d42251
chore: add .worktrees/ to gitignore
pineapplestrikesback Jan 23, 2026
d727dee
feat(09): add cross-group muscle drag-drop and UX improvements
pineapplestrikesback Jan 23, 2026
cde5f59
fix: address CodeRabbit review comments
pineapplestrikesback Jan 23, 2026
e6cac20
Merge branch 'main' into feature/phase-06-carousel-navigation
pineapplestrikesback Jan 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,6 @@ scripts/pr-review-agent/node_modules
scripts/pr-review-agent/dist
scripts/pr-review-agent/data
scripts/pr-review-agent/.env

# Git worktrees
.worktrees/
88 changes: 88 additions & 0 deletions .planning/PROJECT.md
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_
Comment thread
pineapplestrikesback marked this conversation as resolved.
120 changes: 120 additions & 0 deletions .planning/REQUIREMENTS.md
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_
Loading