Most apps will happily tell you that you got weaker last Tuesday.
A different machine. A hotel gym. The first week back after an injury. The number is real, the comparison is not, and almost nothing you can install knows the difference.
IronXP records the context a set was performed in, and resolves comparisons against it. When the comparison does not hold, it says so rather than inventing one.
You log a set. The app answers immediately.
Last session and the guidance target sit above the set list. You add a set, tap the load and the reps, and the comparison against the same set of the same workout resolves in place.
No confirmation step, no celebration. The number stands, and it is the one to beat next time.
Weeks of work, read across in one table.
Every session of a workout side by side, set by set, with the deltas resolved and the current column marked. It exists because a single number tells you nothing about the direction it came from.
Not every recorded result deserves to become a comparison.
A session can be marked as not counting toward progress. It keeps every set, every load and its own reason, and it stops feeding the comparison. Nothing is deleted and nothing is quietly corrected.
IronXP claims the discipline, not arithmetic perfection: it knows when a comparison is not valid, and says so.
A depiction of a completed IronXP session marked as not counting toward progress: Upper Body 1, Thursday 7 August 2026, 41 minutes, 5 exercises, 9 sets, at Home Gym, with the reason recorded as travel to a different gym where only dumbbells up to 20 kg were available, and its sets kept but excluded from comparison.
What actually happened, kept as it happened.
Two different completed workouts, both counting toward progress. Incline Bench Press appears in each, and each workout keeps its own running reference for it, so the same movement carries two independent histories rather than one merged line.
Everything stays inspectable down to the set, and nothing is summarised away later. When a session also produces an all-time best, as Push A does on Dumbbell Shoulder Press, that milestone stays attached to the record where it happened.
The same lift, again. Then again.
Nothing about this is dramatic. You come back, you look at what you did, and you decide what today has to be. The record is what makes that decision honest.
A complete training app, not one clever idea.
Everything here ships today, in German and English.
Build and manage your own, then run them set by set with warm-up, ramp, working and dropset as real set types.
Warm-up, Working, Dropset
The context a set was performed in travels with the set and decides what it can be compared against.
Gym B, Grip shoulder width
Notes live on the exercise, and pinned ones stay in front of you during the session rather than in a separate screen.
Pinned
Bodyweight history with its dates, and a declared training phase for the period it belongs to.
Bulk, Maintain, Cut
Swap an exercise mid-session. The replacement is recorded as one, so history knows why the movement changed.
Replaced Incline Bench
Logging keeps working when the connection drops, and the session is still there when you come back to it.
Validated on device
You are not the product here.
No analytics, no marketing pixels, no ad tech, no newsletter. The app ships zero third-party telemetry and the site keeps the same posture.
Training data is scoped to your account at the database level, not by convention in the client.
Logging survives a dropped connection, and the session is intact when you return to it.
Next, load read against bodyweight.
Bodyweight and training phases are recorded today. Reading them on one scale with the work itself is planned, so that a lighter set inside a cut can be read as a cut rather than as a decline.
Come back and beat the number that is actually yours.
iOS. German and English. No ads, no tracking, no analytics.