Bodyweight as Load
A pull-up moves your bodyweight. We count that as real work — using an honest, clearly-labeled estimate of how much of you each move actually lifts.
Calisthenics is training, but barbell math ignores it: a set of pull-ups puts no number in the weight field, so it added zero to your volume. Now Powerhaus estimates the load a bodyweight move actually puts through your muscles — your logged bodyweight × the fraction of it that move lifts × reps — and folds it into your volume, heat map, and training load. Every fraction is an estimate, labeled by how well-supported it is, and if you haven’t logged a bodyweight we leave the number out rather than invent one.
See it in the app
Log a bodyweight lift — a pull-up, push-up, or dip — in any workout
Record your weight once under Analytics → Body Measurements so the bodyweight portion can be counted
Open the Analytics tab — those lifts now add to the Muscle Heat Map and your volume
Finish a workout without a logged bodyweight and the summary nudges you to add one so the work counts
Even this is in Bronze — the whole tracker is $1/mo, and nothing here is locked behind a higher tier.
Why it matters
For a big slice of lifters — anyone doing pull-ups, dips, push-ups, pistol squats — the hardest sets of the week carry no external weight. Counting them as zero makes the heat map and your volume trends quietly understate how much you’re actually doing.
Your body is the load. A strict pull-up lifts essentially all of you; a push-up lifts a well-measured chunk of you. Putting a real, honest number on that means calisthenics-heavy training finally shows up in the same charts as barbell work — without pretending the estimate is a lab measurement.
How Powerhaus calculates it
Each bodyweight exercise carries a bodyweight fraction — our best estimate of how much of your mass moves through the working muscles. A full-hang pull-up, chin-up, or dip is ≈ 1.0 (you lift essentially all of you); a standard push-up is ≈ 0.64; small single-joint moves are much lower.
Volume for a set is then your bodyweight (as of that workout’s date) × the fraction × reps. We use your bodyweight *at the time you trained*, so last year’s push-ups aren’t retroactively rewritten when you weigh in heavier today.
Real iron adds or subtracts on top. A weighted pull-up adds the belt or vest load; an assisted-machine pull-up or dip *subtracts* the machine’s assist — `max(bodyweight × fraction − assist, 0)`. And if you log a plain bodyweight lift with a weight in the field, that weight counts as added load — nothing you enter is thrown away.
Isometric holds and core work are tracked by reps and time, not tonnage. A plank or an L-sit has no clean rep-times-load number, so assigning one would be inventing precision — we deliberately don’t.
No bodyweight logged, no fabricated number. If you’ve never recorded a bodyweight, your bodyweight lifts are left *out* of the tonnage (and the app nudges you to log one) rather than filled in with a population average that isn’t you.
The science
The one fraction we can point to hard data for is the push-up. Ebben et al. (2011) put people on a force plate and measured a standard push-up at roughly 64–65% of bodyweight through the hands — dropping toward ~55% and ~41% as the hands are raised (incline), and rising when the feet are elevated (decline). Our push-up-family fractions are anchored in that measurement.
For full-suspension moves — pull-ups, chin-ups, dips — the ≈ 1.0 fraction is mechanical, not a guess: hanging from a bar, essentially your entire mass is what your arms and back must move. Weighted and assisted variants simply shift that baseline up or down by the iron involved.
We owe you the truth about the rest. Many smaller-movement fractions — glute bridges, inverted rows, Nordic curls, single-joint accessory work — are reasoned estimates, not measured values. There’s no clean published figure for most of them, so we assigned a directionally-sensible number and graded its confidence in our exercise data (moderate / low / unverified); any total that leans on an estimate is flagged “≈” in the app. They’re first-pass values meant to be refined — an honest estimate beats a false precision.