Skip to content

v0.3.0-pre1 — Polished UI, animated loader, results confetti, iOS CSV fix & non-English support (pre-release)

Pre-release
Pre-release

Choose a tag to compare

@BenjiPy BenjiPy released this 12 Jul 15:06
· 29 commits to main since this release
f948dc7

Pre-release — big UX pass and two critical fixes (iOS CSV picker,
non-English exports). Up for testing before the stable v0.3.0.
Please try it on your setup and report anything odd on
GitHub issues.

The ranking engine, coefficients and thresholds are unchanged
from v0.2 — your ranks won't move.

Highlights

🎉 Results reveal

Fresh dashboards now land with a confetti burst colored from your
top rank's palette. Fires only on real computations (not on F5 or
when you click Back to your results).

⏳ Rank-parade loader

The plain spinner is gone. The 9 rank emblems now light up in
sequence
, each glowing in its own color, giving a "climb the
ladder" feel while your data is crunched. Step messages
("Loading workouts… 3/12", "Parsing CSV…") still show on top.

✨ Landing hover

  • Custom styled tooltip on the rank emblems (colored border per
    rank, smooth fade) — no more ugly native browser tooltip.
  • Emblems now lift + glow in their own color on hover.

Critical fixes

📱 iOS Safari — CSV picker

Two combined bugs prevented iPhone users from importing a CSV at all.

  • The picker used to open, the file could be selected, and nothing
    ever registered in the app. Rewritten with the canonical iOS-safe
    overlay input pattern.
  • The CSV was sometimes greyed out in the iOS Files picker (Hevy's
    export is served as text/plain / application/octet-stream).
    Widened the accept filter accordingly.

🌍 Non-English CSV exports

Hevy's exercise catalog is English-only, so exporting from a French
(or Spanish, German, Portuguese, …) Hevy app used to produce empty
ranks — the app only recognized ASCII-named exercises (typically
Core). Two things fixed this:

  • UTF-8 readFileReader was silently decoding iOS CSVs as
    Windows-1252, turning accented titles into mojibake.
  • FR + EN title fallback — when a title isn't in the English
    catalog, the engine now infers the muscle group from a curated
    bilingual keyword list (~95 % coverage on standard exercises).
    Verified end-to-end on a real French export: all 6 groups populate.

A discreet notice on the results page tells users when many
exercises were routed via the fallback, and the CSV import panel now
carries an upfront tip recommending switching Hevy to English for a
strictly perfect mapping.

Under the hood

  • CSV validation — files are checked client-side for
    extension / MIME / size (< 20 MB) / non-emptiness before hitting
    the parser; bad files surface a clear toast instead of failing
    deep inside.
  • computeRanks return now includes
    matchStats: { catalog, inferred, total } so the UI can decide
    when to surface the locale notice.
  • hasData hardening — a group with lifts but no computable
    eqRatio (e.g. missing bodyweight) is now correctly hasData: false.
  • Confetti no longer suppressed by prefers-reduced-motion.
    A single-shot, ~4 s, non-strobing, pointer-events-none decorative
    reveal doesn't meet the criteria the preference is designed to
    guard against. The looping rank-parade loader still honors it.

Docs & codebase

  • README header shows all 9 rank emblems (Bronze → Mythic).
  • Roadmap restructured into a proper TODO (Done / Planned /
    Ideas / Ongoing), including new items (sub-tiers, actionable
    recommendations, interactive rank legend, API-mode reliability
    hint).
  • Entire codebase is in English (comments, CLI, error messages).
    French keywords used to map Hevy exercise titles in French are
    kept intentionally.

🧪 Why pre-release?

The iOS overlay-input pattern and the FR/EN inference are the
canonical solutions for their respective problems, but real-world
iOS can still surprise. If the picker still misbehaves on your
device — please report it and include:

  • iOS version
  • Where the CSV comes from (Hevy iOS share, iCloud Drive, Files,
    Google Drive, other)
  • Any error toast shown

Next

Once feedback confirms iOS + non-English exports are happy on real
devices, a stable v0.3.0 ships with identical changes (no
-pre1 suffix). Full details:
CHANGELOG.md.