v0.3.0 — Polished UX, iOS CSV fix, non-English support & actionable recommendations
First stable release of the v0.3 line. Big UX pass across the whole
app, a critical iOS Safari fix, first-class support for non-English
Hevy exports, and actionable per-group recommendations that tell you
exactly what it takes to reach the next rank.
Ranking engine, coefficients and thresholds are unchanged from v0.2
— existing users' ranks won't move.
Highlights
🎨 Polished UX
- Canvas-based confetti burst on results reveal, colored from your
top rank's palette. - Animated rank-parade loader while your CSV / API data is
crunched. - Custom styled rank tooltip on emblems with per-tier colored glow
— no more raw browser tooltip.
📱 iOS Safari CSV fix
- Overlay input pattern so the native picker actually returns the
selected file (previoushidden/clip-rectapproach was silently
broken on iOS). - Explicit UTF-8 read with BOM strip — accented FR exercise names
no longer become mojibake. - Widened MIME accept list for iOS quirks
(text/csv, text/plain, application/vnd.ms-excel, application/octet-stream). - Client-side validation — extension, MIME, size and empty checks
with a clear inline error and no silent fails.
🌍 Non-English CSV support
- Bilingual FR + EN keyword fallback in
inferGroupFromTitlewhen
the exact English catalog misses (regex word-boundary matching,
plural/gender variations covered). - Locale notice on the results page: when many exercises were
matched by keyword instead of the exact English catalog, a
contextual hint suggests switching Hevy to English or using API-key
mode. - README callout for non-English users, plus a tip on the CSV import
panel itself.
🎯 Actionable next-tier recommendations
Per muscle group, we now spell out exactly what it takes to reach the
next rank:
- Compact
↑ +X kg on [Lift]chip on the row (visible without opening
the accordion). - Full
🎯 To reach [Next Tier]panel in the detail view, giving both
the 1RM delta and the equivalent for the user's typical rep range on
their top compound. - Caveat kicks in when the required jump exceeds 30% of the current
1RM, nudging toward balanced progression across other compounds
instead of chasing a single lift. - Max-rank groups get a celebratory 👑 variant; capped groups keep the
existing capped-tip guidance.
🔑 API-key mode reliability hint
- Secondary tip on the CSV import panel and extended locale notice on
the results page both nudge users toward API-key mode (Hevy Pro) as
the precision-perfect option — it uses Hevy's stable exercise IDs,
so there's no title-matching ambiguity regardless of the Hevy app's
language. - Inline links jump straight to the API-key setup view.
🧹 Internals
- Fully English codebase — remaining French comments and CLI strings
translated. - Engine
hasDatahardening (eqRatio != nullrequired). - Cardio / mobility exercises now properly filtered from strength
ranking via aSTRENGTH_TYPESallow-list. - New engine helpers exported:
nextTierRecommendation()and
weightForReps()(reverse Epley).
Upgrade notes
No action required — bring your CSV or API key as before. Ranks are
identical to v0.2; only the presentation, the file handling and the
new recommendations panel change.
Full changelog
See CHANGELOG.md.