Weight on its own is a noisy number. People training for shape rather than a scale reading ask for the tape measure: waist, chest, arms, thighs. So body data now covers nine measurements: neck, shoulders, chest, waist, upper arm, forearm, hips, thigh and calf.
One unit in the database
The rule PaceStreak already follows for weight (always kilograms) and distance (always metres) applies here: centimetres in storage, conversion only at display. Someone whose profile uses miles sees inches; the stored value doesn’t change, and exports are always centimetres.
export const toCm = (v: number, u: "cm" | "in") => (u === "cm" ? v : v * 2.54);
export const fromCm = (cm: number, u: "cm" | "in") => (u === "cm" ? cm : cm / 2.54);
One side, same time
The form says it plainly: measure the same side, at the same time of day, with the tape snug but not pressing. Limb measurements vary more from technique than from a week of training, and a chart can’t fix that.
Any day, not just today
Measurements can be entered for any day in the last year, and each field shows your last reading as a grey placeholder, so you know what you’re comparing against before you type.
Change, not judgement
A Tape progress list shows each measurement’s latest value and how far it has moved since the first reading. There’s no colour for good or bad. A waist going down and an arm going up are both just numbers; which one you wanted is yours to know. And like every body number in the product, none of it reaches XP, a badge or a leaderboard.
AlzyWelzy
Building PaceStreak. GitHub
Related
Security & PrivacyNotification buttons without a session
A habit reminder now has Done and Snooze buttons. The service worker that handles them has no access token, by design, so each button carries a signed, single-purpose link instead.
2 min
ProductAn undo that is a restore
Every delete in PaceStreak now offers Undo, backed by a 30-day trash on the server. Why the trash stores generic snapshots, keeps original ids, and refuses a restore that would clash.
2 min
ProductA coach made of rules
The new daily coach is a few if-statements over your own data. Why that beats a generated paragraph, and why the app shows only the notes its existing cards don't already cover.
1 min