Under the hood · 11

Personalization: how your profile changes the knobs

Exactly what each profile answer changes in Logex: volume ranges, plateau windows, strength defaults, starter splits, equipment filters, starting-weight hints and goals. An empty profile gives the plain defaults.

7 min read

  • profile
  • onboarding
  • volume scale
  • defaults
  • privacy

Personalization in Logex is not a mysterious model. It is a short list of named settings, each turned by one or two profile answers, and the code that does it fits in one file. That also means we can list exactly what changes and why.

In plain terms. Your answers to setup (goal, experience, schedule, equipment, bodyweight and so on) adjust a handful of numbers elsewhere in the app. Skip them all and every number stays at its default. Nothing is inferred behind your back.

The one invariant

buildPersonalization turns a normalised profile into the knobs the insight engines read. Its documented rule: an empty profile yields exactly today’s defaults (volume scale 1, default plateau window, standard starter splits, no seeded goals), so users who skip onboarding see no change. A profile counts as empty when it has no goal, no experience level, no target days, no bodyweight and no equipment.

For an empty profile the output is: volume scale 1, no plateau overrides, no strength defaults, no seeded goals, no starting-weight hints, no equipment filter, no focus muscles and no preferred days.

What each answer feeds

Answer What it changes
Units Whether weights display and are typed in lb or kg. Stored weights stay in pounds (Units, storage and sync)
Training goal Weekly volume scale; default reps and RPE for the Strength plan
Experience Weekly volume scale; plateau window; starting-weight tier; beginner RPE cap
Training days per week Your consistency goal; the starter split
Preferred days “Today’s plan” and reminders
Equipment Which exercises can be suggested
Bodyweight Strength tiers, bodyweight ratios and starting-weight hints. Each new workout also stores it, so pull-ups, dips and assisted machines are scored on the load you actually moved
Sex and standards reference Which published strength table is used
Focus muscles (up to 3) Priority in weekly deficits, routine targets and lagging checks
Workout reminders Local notifications on this device

Weekly volume scale

Your experience and goal multiply the weekly volume landmarks from Weekly volume. Beginners progress on less and recover from less. A fat-loss phase cuts recoverable volume. Strength blocks trade volume for intensity.

scale = round( experienceFactor × goalFactor , 2 )
Experience Factor Goal Factor
Beginner 0.75 Build muscle 1.00
Intermediate 1.00 General fitness 1.00
Advanced 1.15 Lose fat 0.85
Get stronger 0.90

The scale multiplies MEV, MAV and MRV only. MV, what it takes to keep muscle, does not depend on training age. After scaling, the order MV ≤ MEV ≤ MAV low ≤ MAV high ≤ MRV is enforced:

MEV = max(MV, round(MEV × s))      MAV low = max(MEV, round(low × s))
MAV high = max(MAV low, round(high × s))      MRV = max(MAV high, round(MRV × s))

Worked example: chest

Profile Scale MV MEV MAV MRV
Beginner, lose fat 0.64 4 4 8 to 13 14
Beginner, build muscle 0.75 4 5 9 to 15 17
Intermediate, lose fat 0.85 4 5 10 to 17 19
Empty profile 1.00 4 6 12 to 20 22
Advanced, build muscle 1.15 4 7 14 to 23 25

So an advanced lifter needs 7 chest sets to reach “growing”, while a beginner on a muscle-building goal needs 5. The routine builder’s weekly targets use the same scale.

Plateau window

How quickly a stall is flagged depends on experience, because beginners progress quickly so a stall shows up sooner, and advanced lifters legitimately take longer between PRs:

Experience Weeks since best Sessions since best
Beginner 3 3
Default (intermediate or not set) 4 4
Advanced 6 5

See The Progress hub for the full rule.

Strength defaults

These prefill the Strength plan’s reps and RPE (still editable):

Goal Target reps Target RPE Rep range
Build muscle 10 8 8 to 12
Get stronger 5 8 3 to 6
Lose fat 8 8 6 to 10
General fitness 10 7 8 to 15

A beginner’s target RPE is capped at 7. Without a goal there are no strength defaults, and the planner falls back to 5 reps at RPE 8. The Volume plan’s default range of 8 to 12 reps is independent of the Strength profile (Adaptive planning).

Starter splits

The number of days you plan to train picks the starter setups:

Days Starters offered
1 or 2, or 3 for a beginner Full body A and Full body B
4 Upper and Lower
5 or more Push, Pull and Legs, plus Upper and Lower
Otherwise (3 for non-beginners, or unset) The long-standing Push, Pull and Legs

Starting-weight hints

For six key lifts (barbell bench press, back squat, deadlift, overhead press, lat pulldown, seated cable row) Logex can suggest a first working weight, if you gave a bodyweight. It reads your row of the strength-standards table (Strength standards) and takes a tier that matches your experience:

tier        = beginner → Beginner · intermediate → Novice · advanced → Intermediate
startWeight = round to 5 lb ( 0.5 × that tier's 1RM at your bodyweight )

The 0.5 fraction is documented as a working weight for about 8 to 10 easy reps and is deliberately conservative: “an estimate for someone who has never logged the lift”. Only barbell, machine and cable lifts logged as total load are included, and only for equipment you said you have.

Example, a 180 lb man with intermediate experience: the Novice bench threshold at 180 lb is 166, so the hint is 0.5 × 166 = 83, which rounds to 85 lb. Back squat is 0.5 × 221 = 110.5, so 110 lb. A 140 lb woman, beginner: bench 20 lb, squat 35 lb.

Goals seeded from onboarding

Setup can propose up to two goals: a consistency goal at your target days, and a muscle goal for your first focus muscle (growing for 8 weeks). They are marked source: onboarding. When you rerun setup, an untouched seeded goal is updated in place. Anything you created or edited yourself is never overwritten, and rerunning never duplicates a goal.

Equipment, focus muscles and days

  • Equipment maps to the exercise implements it unlocks: barbell (barbell, EZ bar, trap bar), dumbbells (dumbbell, kettlebell), machines (machine, Smith machine, assisted pull-up and dip machines), cables, bodyweight (bodyweight, bodyweight-or-loaded, bands). Suggestions only offer those, but anything you have already logged always stays eligible. With no equipment chosen there is no filter.
  • Focus muscles (up to 3) are a stated priority: their deficits rank ahead of equally urgent ones (a 1.5× multiplier), routine targets for them are raised to at least the larger of MEV and the low edge of the growth band, and a focus muscle that is also lagging counts as a weak point.
  • Preferred days decide whether today is a planned training day, and default your reminder days.

What “why we ask” means

Every profile field is declared next to the insight it feeds. The Privacy and data screen shows that text directly, so the explanation and the use cannot drift apart. A few examples: bodyweight is used for strength standards, bodyweight ratios and starting-weight hints, and is stored with each new workout so bodyweight lifts are scored on the load moved; sex is used only to choose which published table to compare you against; reminders are scheduled on your device and nothing is sent from a server. Name is used to greet you and is never shared.

Five older columns (age, height, activity level, average sleep, body fat %) are no longer asked for and nothing uses them. They are listed under Privacy and data so you can remove any stored values.

Limits and edge cases

  • It is a small set of dials. Experience and goal each scale volume by a fixed factor. There is no per-muscle learning of your volume tolerance in this release.
  • Placeholder data never counts. While the profile is still loading, a placeholder is never treated as a real bodyweight.
  • Missing optional columns do not block saving. If a database migration is missing for one optional column, the profile still saves without it.

Source

Written from these files in the Logex app (release head). Constants and formulas above are copied from them.

  • utils/personalization.js
  • utils/profileModel.js
  • services/profileContext.js
  • services/statGoals.js
  • constants/muscleVolumeTargets.js
  • utils/equipmentFilter.js
  • utils/loadModel.js
  • docs/DATABASE_SCHEMA.MD