Simplifies the progression model to a universal rep ladder: every exercise follows 6→8→10→12 reps at current weight, then +5 lbs and reset to 6. Replaces per-user wk1/wk4 rep and weight targets with a single starting_weight field. - Add Alembic migration to drop wk1_reps/wk4_reps/wk1_weight/wk4_weight, add starting_weight (migrated from wk1_weight) - Run Alembic migrations on app startup instead of create_all, with auto-detection and stamping for legacy databases - Include alembic/ and alembic.ini in Docker image - Rewrite progression_service.get_suggestion() with ladder logic: climb, hold, weight_increase, hold_at_top, deload - Replace wk1/wk4 grid in exercise cards with rep ladder progress bar - Add color-coded progression badges by type - Change weight log input from text to number with pre-filled suggestion - Normalize weight input in routes (0→BW, bare number→N lbs) - Remove schedule page (route, template, nav link, tests) - Simplify user_programs.yaml from 4 fields to 1 per exercise - Update all tests for new schema and progression logic Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
30 lines
1.5 KiB
HTML
30 lines
1.5 KiB
HTML
<!-- Inline logging form, included inside each exercise_card.html -->
|
|
<form hx-post="/log"
|
|
hx-target="#logs-exercise-{{ exercise_id }}"
|
|
hx-swap="innerHTML"
|
|
style="margin-bottom:0;">
|
|
<input type="hidden" name="exercise_id" value="{{ exercise_id }}">
|
|
<input type="hidden" name="workout_day_id" value="{{ workout_day_id }}">
|
|
<input type="hidden" name="set_number" value="{{ next_set|default(1) }}">
|
|
|
|
<div style="display:flex; align-items:center; gap:0.5rem; flex-wrap:wrap;">
|
|
<small style="white-space:nowrap; opacity:0.7;">Set {{ next_set|default(1) }}</small>
|
|
<input type="number" name="reps" placeholder="Reps"
|
|
min="0" max="100" required
|
|
style="width:5rem; margin-bottom:0;">
|
|
<input type="number" name="weight" placeholder="Weight (lbs)"
|
|
min="0" max="999" step="0.5" required
|
|
{% if suggested_weight and suggested_weight != "BW" %}
|
|
value="{{ suggested_weight|replace(' lbs', '') }}"
|
|
{% elif suggested_weight == "BW" %}
|
|
value="0"
|
|
{% endif %}
|
|
style="width:8rem; margin-bottom:0;">
|
|
<label style="display:flex; align-items:center; gap:0.3rem; margin-bottom:0; white-space:nowrap;">
|
|
<input type="checkbox" name="felt_easy" role="switch" style="margin-bottom:0;">
|
|
Easy?
|
|
</label>
|
|
<button type="submit" style="margin-bottom:0; width:auto; white-space:nowrap;">Log Set</button>
|
|
</div>
|
|
</form>
|