A self-contained PWA (no App Store, no backend, no account). Weight sets meet DJ sets: log your lifts against targets, watch the trend lines climb, and power the session with SoundCloud sets — all in one full-screen app on your phone.
- Lift — start a routine or freestyle. Each set is logged as weight × reps against the routine's target (✓ hit / – missed), prefilled from your last performance. The rest timer auto-starts after every logged set.
- Plans — build routines: exercises with target sets × reps @ weight and a
per-exercise rest duration. Import a program by pasting it from a coach's
app or spreadsheet (
Bench Press 4x8 @ 80, CSV rows,Day 1 — Pushheaders, rep ranges) with a preview before anything is saved. - Progress — per-exercise estimated 1RM (Epley) trend line, volume-per- session bars, weekly volume overview, PR detection on save, and a full history table.
- Music — your SoundCloud "workout crate". Paste any track/set link and it plays inside the app (official embed widget — no API key needed) and keeps playing while you log sets. Search shortcuts for digging (Dosem included, obviously).
- Tools — modifiable rest timer (presets, ±15s while running) and a sample-accurate metronome for tempo work (20–240 BPM, tap tempo, accented beats; keeps ticking across tabs).
Data stays on-device (localStorage) with JSON export/import in Settings (⚙). Units kg/lb, sound toggle, optional keep-screen-awake (iOS 16.4+).
The app is static files — any HTTPS host works. Two easy paths:
A. GitHub Pages (recommended)
- Nothing to configure — every push to
maindeploys via the bundled "Deploy to GitHub Pages" workflow. - Open
https://saourubhverma.github.io/iron-sets/in Safari on the phone. - Share button → Add to Home Screen. Done — it launches full-screen, works offline (service worker), and keeps its own icon.
B. Same-Wi-Fi from your Mac (quick test)
python3 -m http.server 8080
# on the phone: http://<your-mac-ip>:8080Everything works over plain HTTP except the offline cache (service workers need HTTPS/localhost) — fine for a first spin.
- The crate's primary action is App ↗ — it opens the saved set in the native SoundCloud app (universal link), where lock-screen playback just works. Log your sets in Iron Sets while SoundCloud plays in the background.
- The in-app player (▶, embed widget — zero credentials) is for sessions where the phone stays on: iOS pauses web audio when the screen locks, and no web app can change that.
- In-app search would need a registered SoundCloud API app (approval takes a while); the "Dig for sets" shortcuts open SoundCloud search instead — copy the link of anything good and paste it into the crate.
No build step. index.html + app.js (preact + htm, vendored in
vendor/) + sw.js + manifest.webmanifest. Icons are generated (pure-
python PNG writer, no PIL) — see repo history for the generator script.
Chart styling follows the dataviz spec: single-series marks, 2px lines,
≤24px bars with rounded data-ends, hairline gridlines, tap-to-inspect, and a
history table as the accessible data view. Chart colors (#c98500,
#3987e5) are contrast/CVD-validated against the dark surface.