Skip to content

v0.3.0 — Polished UX, iOS CSV fix, non-English support & actionable recommendations

Choose a tag to compare

@BenjiPy BenjiPy released this 12 Jul 15:30
· 24 commits to main since this release
85deea4

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 (previous hidden / clip-rect approach 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 inferGroupFromTitle when
    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 hasData hardening (eqRatio != null required).
  • Cardio / mobility exercises now properly filtered from strength
    ranking via a STRENGTH_TYPES allow-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.