Privacy-First Strength Training Companion — A client-side web app for tracking progressive overload, auto-regulating intensity, and removing "brain fog" during workouts.
Hosted on GitHub Pages. All data stays on your device.
Live app: https://kamongi.github.io/iTrain/
iTrain uses a Client-Side Only architecture. No database, no login, no tracking.
| Component | Technology | Role |
|---|---|---|
| Hosting | GitHub Pages | Static hosting of HTML/CSS/JS files |
| Frontend | HTML5 / CSS3 | Mobile-first interface (OLED dark theme) |
| Logic/State | Vanilla JavaScript (ES Modules) | Progression engine, workout flow, plate math |
| Storage | localStorage / IndexedDB |
Persists profile, history, and weights on-device only |
| Video | YouTube IFrame API | Embeds demo videos for each movement pattern |
| Charts | Chart.js (CDN) | Volume tracking and consistency heat map |
| Celebration | Confetti.js (CDN) | Workout completion animation |
- RPE Input (Rate of Perceived Exertion): 1–10 slider for each set
- RPE ≤ 7 → suggest +2.5% to 5% weight increase next week
- RPE 8 → maintain current weight
- RPE 9–10 → suggest staying at the same weight to "own the movement"
- Two consecutive RPE 10 sessions → suggest a Deload Week (−20% weight)
Takes the target weight, subtracts the bar (45 lb), and divides by available plates (45, 25, 10, 5, 2.5) to show a visual loading guide — icons of exactly which plates go on each side of the bar.
- Switch: Toggles between a Primary and Alternative exercise. Weight is tracked separately for both.
- Skip: Marks the exercise as
nullfor the day. Progress carries over to the next session.
- Countdown timer (90s–120s) triggers on "Set Complete"
- Subtle notification sound + haptic vibration when rest is over
- First-launch questionnaire: "Do you have any joint sensitivity?"
- Lower Back Pain → Back Squat defaults to Goblet Squat + bracing safety note
- Shoulder Impingement → Seated Press defaults to Landmine Press
- Knee Sensitivity → Reverse Lunge defaults to Step-Ups
A local array of 50+ quotes from legends like Arnold Schwarzenegger, Dr. John Rusin, and technical cues from Josh Shepherd. A random quote displays on each session load.
Optional button that calculates 3 warm-up sets at 50%, 70%, and 90% of work weight.
Displays tempo notation (e.g., "3-0-1-0") next to exercises for controlling eccentric/concentric phases.
Link two exercises (e.g., Bench + Row) so the app alternates between them automatically.
Uses the MediaDevices API for a live camera feed inside the app — no video is saved or transmitted. Just a mirror for checking form.
Automatic detection and celebration when you hit a new personal best for volume or weight on any exercise.
Line graph of Total Volume (Sets × Reps × Weight) over time using Chart.js.
A heat map (GitHub contribution graph style) showing training days. Streak visibility encourages consistency.
| Exercise | Sets × Reps | Pattern | Alternative |
|---|---|---|---|
| Back Squat | 4 × 8 | Squat | Goblet Squat |
| Bench Press | 4 × 8 | Push | Push-Ups |
| Romanian Deadlift | 3 × 10 | Hinge | Kettlebell Deadlift |
| Strict Rows | 4 × 10 | Pull | Band Rows |
| Reverse Lunges | 3 × 12 | Lunge | Step-Ups |
| Seated Press | 3 × 12 | Press | Landmine Press |
| Hip Thrusts | 3 × 12 | Glute | Glute Bridge |
| Farmer's Walk | 3 × 30m | Carry | Suitcase Carry |
| User Profile Flag | Primary Exercise | Suggested Alternative | Reason |
|---|---|---|---|
| Lower Back Pain | Back Squat | Goblet Squat | Keeps torso upright, reduces shear force |
| Shoulder Impingement | Seated Press | Landmine Press | Safer overhead trajectory for the joint |
| Knee Sensitivity | Reverse Lunge | Step-Ups | Easier to control the eccentric phase |
- All data resides in localStorage / IndexedDB. No external API calls are made except for YouTube IFrame embeds and CDN libraries.
- "Clear All Data" button instantly wipes all stored data.
- No analytics, no cookies, no third-party tracking.
iTrain/
├── index.html # Single-page app shell
├── css/
│ └── style.css # OLED dark theme
├── js/
│ ├── app.js # Core app logic, rendering, navigation
│ ├── exercises.js # Exercise library & medical mappings
│ ├── motivation.js # 50+ motivational quotes
│ ├── plates.js # Plate calculator & visual loading
│ ├── profile.js # Medical profile questionnaire
│ ├── progression.js # RPE-based progression engine
│ ├── storage.js # localStorage / IndexedDB persistence
│ └── timer.js # Rest timer with haptics
└── README.md
- Clone the repository
- Open
index.htmlin a browser — or deploy to GitHub Pages - Complete the first-launch profile questionnaire
- Start training
- Go to Settings → Pages
- Select the main branch and root (
/) folder - Your app will be live at
https://<username>.github.io/iTrain/
If you use iTrain in your research, project, or build upon it, please cite it as:
Kamongi, P. (2026). iTrain: A Privacy-First Strength Training Companion [Software].
GitHub. https://github.com/kamongi/iTrain
Or in BibTeX:
@software{kamongi2024itrain,
author = {Kamongi, Patrick},
title = {{iTrain}: A Privacy-First Strength Training Companion},
year = {2026},
url = {https://github.com/kamongi/iTrain},
note = {Client-side progressive overload tracker with RPE-based auto-regulation}
}For questions or collaboration, contact: info@kamongi.com
Inspired by Dr. John Rusin & Josh Shepherd