JoyVelo

JoyFit reference

JoyFit V1.0 / V2.0 / V3.0

JoyFit is the fitting and bike-geometry toolbox inside JoyVelo. Five sub-modules + the ECP cost planner cover frame selection, self-setup adjustment, discomfort diagnosis, multi-bike management, and fitting education. V1.0 is free for everyone. V2.0 / V3.0 unlock the deeper experience for Pro and Pro+ subscribers.

V1.0 free for everyoneV2.0 Pro · V3.0 Pro+localStorage by default · no account neededReference only · not a substitute for in-person fitting

The 5 sub-modules

Every JoyFit sub-module belongs to one of the three product tiers (free / Pro / Pro+). The table below shows which feature lands at which tier so you know what unlocks when.

Frame Geometry HubFrame Geometry

A 30+ brand frame database with full geometry for every size. Stack & Reach calculator, dual-frame compare, side-view overlay, cross-brand size finder.

FreeFrame database + Stack & Reach calc + 2-frame compare
Pro+ 5-frame side-view overlay
Pro+
AI Fit AssessmentAI Fit Assessment

3-step body + bike + style assessment. Outputs saddle height, stem length, crank length, frame-fit score. Reference only — not a substitute for an in-person fit.

FreeBasic 3-step assessment
Pro+ PDF report export
Pro++ JoyOne data linkage (L/R balance, cadence, HR drift)
Discomfort WizardDiscomfort Wizard

Pick a body region, answer 1-3 sub-questions, get the top 3 ranked fit causes with confidence + adjustment plan. 6 regions × multi-scenario questions.

Free
ProFull 6-region interactive wizard
Pro+
My Fit ProfileMy Fit Profile

Body data + assessment history + bookmarks + presets. Single-bike profile is V2; multi-bike garage + per-bike adjustment history is V3.

FreeBody data + bookmarks
Pro+ Single-bike presets + assessment history
Pro++ Multi-bike garage + adjustment history + 7-day effect tracking
Fit AcademyFit Academy

Fitting knowledge + tutorials + pitfall guides. Articles link directly to the relevant tool so the reader can act immediately.

FreeBasic academy articles
Pro+ Full library + tool-CTA links
Pro+

Quick tools

V1.0 · V2.0 · V3.0 feature breakdown

The product is split into three tiers per the JoyFit PRD §六. The numbers below are the actual feature flags stored in lib/joyanalyze-permissions.ts — that file is the source of truth, this page is the human-readable mirror.

V1.0 基础工具版 (Free)

  • Frame database (30+ brands, 4 categories, full geometry per size)
  • Stack & Reach calculator (Lemond 0.883 + 1.09 dual formulas)
  • 2-frame side-by-side compare (table view, CSV / JSON export)
  • Basic AI fit assessment (3-step body / bike / style)
  • Basic academy articles (introductory concepts)

V2.0 体验增强版 (Pro)

  • 5-frame side-view geometry overlay (fit_multi_frame)
  • Discomfort diagnosis wizard — 6 regions × 22 questions (fit_symptom_wizard)
  • Single-bike fit profile + assessment history + presets
  • PDF fit report export (fit_report_pdf)
  • Full academy library + inline tool CTAs

V3.0 进阶专业版 (Pro+)

  • JoyOne data linkage in the assess page — L/R balance, cadence, HR drift → fit recommendations (fit_assess_advanced)
  • Multi-bike garage + per-bike adjustment history with rollback (fit_profile_multi)
  • 7-day comfort effect tracking chart per bike (fit_effect_tracking)
  • Cleat fore-aft + stance-width advanced adjustments (fit_gear_match)

Core calculation rules

All JoyFit recommendations use the standard fitting formulas. They are reference only — incremental testing is the user's responsibility. The non-negotiable source for every calculation is lib/joyfit-calc.ts; the unit tests in lib/__tests__/joyfit-calc-extra.test.ts lock the numerical outputs to a fixed precision.

MetricFormulaAdjustment
Saddle heightLemond 0.883 (inseam × 0.883)± flexibility correction (poor → +5mm, excellent → -5mm)
Saddle fore-aftKnee over pedal axle (KOPS) at 3 o'clock± 5mm per posture shift (climb / drops / TT)
Stem lengthTorso + arm length → recommended Reach− frame Reach = stem + spacer stack target
Crank lengthinseam × 0.216 (general)Shorter (165-170mm) for sprinting / high cadence; longer (175-177.5mm) for endurance
Frame-fit score0-100 across reach / stack / STA / HTLPer-posture weight (climb 30% · flat 50% · drops 20%)

Storage & privacy

All fit data — body measurements, assessment history, garage bookmarks, presets, comfort logs — is stored in localStorage under the key joyfit-profile-v1. Nothing leaves the browser by default.

The opt-in PasscodeLock component (see the assess page) wraps the profile with AES-GCM-256, key-derived from the user's passcode via PBKDF2. The passcode never leaves the device.

Pro+ features that link JoyOne ride data (e.g. advanced fit suggestions) read the local JoyOne activity list from localStorage['joyone-activities-v1']. The data is read-only; JoyFit never writes back to the JoyOne key.

Mandatory disclaimer

All JoyFit recommendations are general reference material. They are not a substitute for medical diagnosis, professional bike fitting, or an in-person session with a certified fitter.

Adjustments should be made incrementally and tested at low intensity. Persistent pain, joint injury, or pre-existing medical conditions warrant a doctor's visit first.

Severe pain or pain that doesn't resolve in 2-3 weeks is a red flag — stop and see a fitter.

Implementation: app/joyfit/* · lib/joyfit-*.ts · components/joyfit/*. Feature flags in lib/joyanalyze-permissions.ts.

Need a feature JoyFit doesn't have yet? Drop a note in the JoyVelo PRD or open an issue on GitHub.