Most lifting apps show you a number and trust you not to ask. flexRep does the opposite. Every visualization has a methodology card one tap away — the formula, the literature it leans on, how to read it, and what it doesn’t capture.
Below: the same cards that ship inside the app, organized by what they describe.
Strength · 01
Estimated 1RM, stall detection, and strength velocity.
Three of the most useful strength signals in the working-rep range. None invented here. All cited.
e1RM × WEEK · LAST 16 WK
+12 lbPR this week
Estimated 1RM (e1RM)how it’s calculated ↘›
WHAT IT MEASURES
A back-calculated single-rep max from any working set.
FORMULAe1RM = weight × (1 + reps / 30)
HOW TO READ IT
Plotted as a line per exercise, weekly. Use it to compare 225×5 to 245×3 honestly. They're roughly equivalent — the e1RM tells you so.
WHY IT MATTERS
The cleanest comparable strength metric across rep ranges. Epley's formula has the strongest literature support in the 1–10 rep range most lifters work in.
Stall detectionhow it’s calculated ↘›
WHAT IT MEASURES
A flag raised when an exercise's e1RM stops progressing for several weeks despite stable effort.
HOW TO READ IT
A pulsing orange dot on the exercise card. Tap to see the contributing weeks and the stable-effort window.
WHY IT MATTERS
Stalls are the most under-diagnosed source of stalled programs. Most lifters notice four to six weeks late. flexRep flags earlier — and tolerates a few missed stalls to avoid crying wolf.
Strength velocityhow it’s calculated ↘›
WHAT IT MEASURES
The slope of e1RM over a rolling window, expressed as kg/week.
HOW TO READ IT
Positive = trending up. Negative = decay. A long negative tail with stable effort is the deload signal — your nervous system asking for a week off.
WHY IT MATTERS
Acute-vs-chronic strain analogues for strength. Trending velocity reads smoother than week-over-week deltas.
Volume · 02
Fractional sets and the 11-axis radar.
Hypertrophy research is clear: secondary mover work contributes — just not at full weight. We weight accordingly, and we cite our weighting honestly.
A weighted sum of weekly sets per muscle, where primary movers count more than secondaries.
HOW TO READ IT
An 11-axis radar. A balanced lifter trains across the polygon, not at three points of it. The center-of-mass should sit on center.
WHY IT MATTERS
Counting everything as a full set over-credits compounds; ignoring secondaries under-credits them. The weighting is our practical answer to Schoenfeld's finding.
Rep-range drifthow it’s calculated ↘›
WHAT IT MEASURES
A stacked-area chart of how your set distribution shifts across rep ranges over a long window.
HOW TO READ IT
A widening light band at the top = drifting toward easier work. A growing dark band at the bottom = chasing heavier singles. Stable bands = consistent programming.
WHY IT MATTERS
Slow drift toward higher reps is a stealth source of plateaus. The chart makes it impossible to miss.
Movement pattern breakdownhow it’s calculated ↘›
WHAT IT MEASURES
Sets per movement pattern (push, pull, squat, hinge, carry, lunge, core, rotation) as a stacked bar over time.
HOW TO READ IT
Compare bar heights week-over-week. A push-heavy block shows up immediately. A neglected hinge axis is similarly visible.
WHY IT MATTERS
Movement-pattern balance is the foundation of injury-resistant programming. Most lifters drift toward what they like without realizing it.
Effort · 03
RPE, RIR, and the effective-rep model.
Effort isn’t iron. Two sets at 225×5 can be wildly different stimuli depending on how close to failure each one ran.
EFFECTIVE REPS · WEEK 14
Chest
94
Lats
78
Quads
110
Hams
36
Hams under target. Bring up next block.
RPE / RIR per sethow it’s calculated ↘›
WHAT IT MEASURES
Rate of Perceived Exertion on a half-step scale. Reps in Reserve is the arithmetic dual.
HOW TO READ IT
Tap a set to log RPE. The half-step granularity is informative without faking precision.
WHY IT MATTERS
RPE-aware analytics use effort, not just iron. A 225×5 at RPE 8 is a different stimulus from 225×5 at RPE 9.5. flexRep's stall detector requires stable RPE — a stall at low RPE is a deload signal, not a plateau.
Effective repshow it’s calculated ↘›
WHAT IT MEASURES
Reps performed close to failure, where the bulk of the hypertrophy stimulus lives.
HOW TO READ IT
A weekly count of effective reps per muscle group. Compare against the accepted landmarks; we won't reprint them here.
WHY IT MATTERS
Total sets is a blunt instrument — twenty reps at low effort are mostly cardio. Effective reps focus on the work that grows tissue.
Recovery snapshothow it’s calculated ↘›
WHAT IT MEASURES
A per-muscle-group readout of fatigue accumulation since the last training session.
HOW TO READ IT
A horizontal bar per muscle: full bar = recovered, half = mid-recovery, low = freshly trained. Use it to pick what to train today.
WHY IT MATTERS
Most lifters intuit recovery wrong — they train the muscle that's sore, miss the one that's ready. The snapshot is a calibrated suggestion, not a guess.
Identity · 04
The strength glyph and rhythm waveform.
Two visualizations that are uniquely flexRep — generative, shareable, brand-defining. Both are computed from your data; both are decorative; both are labelled as such.
RHYTHM WAVEFORM · ONE SESSION
PEAK · 1 PR · 12 SETS68 min
Strength glyphhow it’s calculated ↘›
WHAT IT MEASURES
A generative radial shape built from your movement-pattern volumes.
HOW TO READ IT
Each axis is a movement pattern. Longer spoke = more sets. Warmer color = more frequent training. More circular = more balanced.
WHY IT MATTERS
Most lifting apps give you a number for your training. flexRep gives you a face for it. Share-card material.
Workout rhythm waveformhow it’s calculated ↘›
WHAT IT MEASURES
A Canvas-drawn signature of one session: each set is a peak, each rest is a valley.
HOW TO READ IT
High peaks = heavy sets. Wide peaks = high-rep sets. Deep valleys = long rest. Heavy-singles day looks nothing like a pump day.
WHY IT MATTERS
Your workout has a shape, and the shape is yours. Visually unique. Meaningful. Shareable.
Approach + provenance
What each number leans on.
We won’t reprint our exact tunings — those are ours. But we will tell you, for every metric in the app, which body of research it’s grounded in and which parts are in-house judgment.
Metric
Approach
Provenance
e1RM
Back-calculated single-rep max from a working set
Epley family · 1985
RIR
Arithmetic dual of RPE
Helms et al., 2018
Stall flag
Moving-window e1RM stability check with an RPE-stability gate
In-house · literature-informed
Strength velocity
Trend over a rolling window of recent e1RMs
In-house · standard time-series shape
Fractional muscle volume
Weighted sum where primary movers count more than secondaries
Schoenfeld 2017 / 2019 — adapted
Effective reps
Reps performed close to failure, computed from RPE/RIR
Helms / Israetel framing
Recovery snapshot
Recency × accumulated load, normalized
In-house · ambient indicator only
Gym hue rotation
A deterministic per-gym hue offset
In-house · purely cosmetic
Glyph color
Warmth scales with training frequency
In-house · purely cosmetic
We cite the literature we lean on. The specific tuning choices — windows, weights, thresholds — are part of what flexRep is. If you’d score things differently, your own numbers are one CSV export away.
Implementation receipts
Where the surface meets the code.
The specifics that didn’t fit on the methodology cards. For people who want to know which API, which formula, which year. Each card pairs the user-facing surface with the actual mechanism behind it.
e1RM math, blended
Brzycki for r ≤ 6, Epley for r 7–10, capped at 10 reps because beyond that no formula is validated. Your per-set display still respects whatever single formula you picked in Settings. The charts all read from the same blended e1RM, so Volume Trend, Strength Progression, and Intensity Distribution can't disagree.
Stall detection
Linear regression on the last six weeks. The slope's confidence interval drives the classification — progressing when the CI excludes zero positive, regressing when it excludes zero negative, maintaining otherwise. After four weeks at regressing or maintaining, the chart runs cause attribution and ranks the top three likely causes by signal strength.
Intensity Distribution fallback
When no training max is set, %1RM bins use the best e1RM from the prior eight weeks — not the concurrent window. The PR set doesn't determine its own percentage. The distribution is honest either way.
Programs as a typed graph
Program → Mesocycle → Microcycle → Routine → routine exercises → per-set prescriptions. Every analytic that touches a program reads from the graph, not a string. Prescribed values get stamped onto each set at log time so the receipt shows the delta inline (5 × 230 · target 5 × 225).
Watch transport durability
Sets logged on the wrist queue durably, not fire-and-forget. A local store catches everything, persists through a Watch app crash, and reconciles when both devices wake. iPhone in the locker — fine. Airplane mode — fine.
On-device dictation
"225 by 5" parses through a regex pipeline first, with a Foundation Models fallback for ambiguous phrasings. No server round-trip. Two Watch complications — current exercise + set count, rest timer countdown — across all three accessory families.
RPE drift by zone
When a training max is set, drift is computed per %1RM zone (60–70 / 70–80 / 80–90) instead of against a single modal weight. The watch list surfaces the top three exercises with the steepest positive slope at constant relative load — a deload signal grounded in your data, not a calendar recommendation.
Set type schema
Drop-set children link to a parent set. Cluster sets carry within-cluster rest seconds. Myo-rep chains are first-class. The receipt indents children under the parent; analytics filters drop them out of working-set counts so volume isn't double-counted.
Wilks · DOTS · IPF GL gating
Three separate fields in the model — identity, pronouns, formula reference. Only the reference drives sex-keyed math, and it's explicitly opt-in. With reference + a bodyweight within ±30 days of the lift, the PR card shows all three scores with cited formulas. Without, the scores hide and the empty state explains why.
The .flexrep bundle
Full schema in a single JSON bundle with SHA-256 checksum. Includes programs, mesocycles, microcycles, prescriptions, body photos, personal records — not just sets. Round-trip tested every release. CSV ships in two formats in one share action: normalized for scripts, Numbers-friendly with grouped tables.
Reversible imports
Every CSV import (Strong, Hevy, generic, HealthKit) stamps a shared batch ID on every row it creates. Reverting removes only those rows; native logs are left alone. Imports are a data-poisoning risk by default — the batch boundary defangs them.
AI pipeline + number validator
Rule-based diagnostics produce a structured payload with citations. The on-device language model paraphrases under a "no new numbers" rule. A regex validator extracts every number from the model output and checks each appears in the payload. If validation fails, the plain-text rule-based summary ships instead. Three sentences on Sunday morning.
Per-gym plate calc + warmup ramp
Plate calculator reads the active gym's inventory (plates, bar weight, dumbbell increments, cable stack increments). Proposes only loadings that are actually loadable. Warmup ramp generator plate-rounds each rung to what's on the rack and tags the sets so warmup-filter mode drops them from volume.
Lock Screen plate widget
Plate-target widget across the three accessory widget families. Same widget surface on the Watch face. Set the target via the widget config or a Siri Shortcut. Load the bar without unlocking.
iCloud sync, private only
Your private iCloud — your account, your encryption keys. No flexRep server in the loop, no analytics pipeline, no server-side aggregation. The recovery path of last resort is Apple's platform, not a vendor we own.
WANT TO GO DEEPER?
The receipts behind every chart.
Every method on this page is grounded in published literature, an Apple framework, or a documented in-house assumption. The full list — papers, authors, years, what we adapted, where we made calls — lives on its own page.