summaryrefslogtreecommitdiff
path: root/templates/exercises.html
diff options
context:
space:
mode:
authorMarius Peter <dev@marius-peter.com>2026-07-18 23:23:35 +0200
committerMarius Peter <dev@marius-peter.com>2026-07-18 23:23:35 +0200
commit753e25e99ddf57be78ff27ad89cb7e1bbc99d041 (patch)
tree43db69ec341520f2923f2f13d0cd8846a9acac35 /templates/exercises.html
Initial commit: HITO MVP
Heavy Duty I prescriptive training system encoding Mentzer's methodology. - 4-day split program (Chest & Back, Legs, Shoulders, Arms) - Prescription engine with pre-exhaust superset structure - Strict progression logic (+5kg large / +2.5kg small muscles) - Recovery gating with stall-based extension and override - Onboarding via experience level (Novice/Intermediate/Advanced) - Session logging with full progression analysis - Exercise substitution (33 alternatives for 17 canonical movements) - Objectivist aesthetic: black/gold, serif, rectilinear Stack: Hunchentoot, Mito/SQLite, Djula, SBCL
Diffstat (limited to 'templates/exercises.html')
-rw-r--r--templates/exercises.html62
1 files changed, 62 insertions, 0 deletions
diff --git a/templates/exercises.html b/templates/exercises.html
new file mode 100644
index 0000000..cd7aa54
--- /dev/null
+++ b/templates/exercises.html
@@ -0,0 +1,62 @@
+{% extends "base.html" %}
+
+{% block title %} — Exercises{% endblock %}
+
+{% block content %}
+<section class="exercises-page">
+ <h2>Exercise Configuration</h2>
+
+ <p class="instruction">
+ The movement pattern is what matters. Select an equivalent exercise
+ if your facility requires it. The program structure is preserved regardless
+ of which specific implement you use.
+ </p>
+
+ {% for day in days %}
+ <div class="exercise-day">
+ <h3 class="day-header">Day {{ day.number }}: {{ day.name }}</h3>
+
+ {% for slot in day.slots %}
+ <div class="exercise-slot">
+ <div class="slot-current">
+ <span class="slot-canonical">{{ slot.canonical_name }}</span>
+ {% if slot.has_substitute %}
+ <span class="slot-active">&rarr; {{ slot.active_name }}</span>
+ {% endif %}
+ </div>
+
+ {% if slot.options %}
+ <form method="post" action="/exercises/swap" class="swap-form">
+ <input type="hidden" name="canonical-id" value="{{ slot.canonical_id }}">
+ <select name="substitute-id">
+ <option value="0"
+ {% ifequal slot.active_id slot.canonical_id %}selected{% endifequal %}>
+ {{ slot.canonical_name }} (default)
+ </option>
+ {% for option in slot.options %}
+ <option value="{{ option.id }}"
+ {% ifequal option.id slot.active_id %}selected{% endifequal %}>
+ {{ option.name }}
+ </option>
+ {% endfor %}
+ </select>
+ <button type="submit" class="btn-swap">SWAP</button>
+ </form>
+ {% endif %}
+ </div>
+ {% endfor %}
+ </div>
+ {% endfor %}
+
+ <a href="/" class="btn-secondary">RETURN TO DASHBOARD</a>
+</section>
+{% endblock %}
+
+{% block quote %}
+<blockquote>
+ &ldquo;The specific exercise is less important than the principle it serves.
+ What matters is that the target muscle is worked to failure through a full
+ range of motion.&rdquo;
+ <cite>&mdash; Mike Mentzer</cite>
+</blockquote>
+{% endblock %}
Copyright 2019--2026 Marius PETER