# Features: Workout Logging UX Improvements

**Project:** Gravl — PPL Workout Tracker
**Researched:** 2026-02-15

## Table Stakes (Must-Have)

| Feature | Complexity | Dependencies | Notes |
|---------|-----------|--------------|-------|
| Input validation (no negative reps, weight min 0) | Low | None | Currently broken — allows any value |
| Weight unit display (kg suffix) | Low | None | Missing — only placeholder text |
| Mobile input layout (44px min touch targets) | Low | None | Currently compressed inputs |
| Add/remove sets per exercise | Medium | Backend log changes | Fixed set count is rigid |
| Pre-fill last workout's weight/reps | Medium | Progression API | Users need reference for what to lift |
| Exercise search/filter | Medium | Exercise list API | Needed for custom workout builder |

## Differentiators (Competitive Advantage)

| Feature | Complexity | Dependencies | Notes |
|---------|-----------|--------------|-------|
| Custom workout builder | High | New DB tables, new endpoints | Build workouts from exercise list |
| Modify program workouts | Medium | Custom workout infra | Swap/add exercises mid-workout |
| Rapid-fire set logging | Medium | Stepper inputs | Auto-advance, minimal taps per set |
| Progressive overload visualization | Medium | History data | Show trend vs last workout clearly |
| Rest timer with notifications | Low | Browser APIs | setInterval + Notification API |
| Superset/circuit support | High | Schema changes | Group exercises for alternating sets |

## Anti-Features (Deliberately Avoid)

| Feature | Why to Avoid |
|---------|-------------|
| Social features | Users hate mandatory social in workout apps |
| Complex periodization | Overcomplicates a personal PPL tracker |
| Video exercise demos | Storage/bandwidth cost, not core value |
| Gamification (badges, streaks) | Distracts from simple logging |
| AI workout generation | Scope creep — user knows their program |

## Priority for This Milestone

1. **Input fixes** — validation, units, layout (table stakes, low effort)
2. **Flexible sets** — add/remove sets (table stakes, medium effort)
3. **Custom workouts** — build from scratch + modify program (differentiator, high effort)
