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.
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.
A 30+ brand frame database with full geometry for every size. Stack & Reach calculator, dual-frame compare, side-view overlay, cross-brand size finder.
| Free | Frame database + Stack & Reach calc + 2-frame compare |
| Pro | + 5-frame side-view overlay |
| Pro+ | — |
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.
| Free | Basic 3-step assessment |
| Pro | + PDF report export |
| Pro+ | + JoyOne data linkage (L/R balance, cadence, HR drift) |
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 | — |
| Pro | Full 6-region interactive wizard |
| Pro+ | — |
Body data + assessment history + bookmarks + presets. Single-bike profile is V2; multi-bike garage + per-bike adjustment history is V3.
| Free | Body data + bookmarks |
| Pro | + Single-bike presets + assessment history |
| Pro+ | + Multi-bike garage + adjustment history + 7-day effect tracking |
Fitting knowledge + tutorials + pitfall guides. Articles link directly to the relevant tool so the reader can act immediately.
| Free | Basic academy articles |
| Pro | + Full library + tool-CTA links |
| Pro+ | — |
Quick tools
Every sub-module has a direct deep link. The JoyFit sidebar (in the left rail of every /joyfit/* page) lists them all.
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.
| Metric | Formula | Adjustment |
|---|---|---|
| Saddle height | Lemond 0.883 (inseam × 0.883) | ± flexibility correction (poor → +5mm, excellent → -5mm) |
| Saddle fore-aft | Knee over pedal axle (KOPS) at 3 o'clock | ± 5mm per posture shift (climb / drops / TT) |
| Stem length | Torso + arm length → recommended Reach | − frame Reach = stem + spacer stack target |
| Crank length | inseam × 0.216 (general) | Shorter (165-170mm) for sprinting / high cadence; longer (175-177.5mm) for endurance |
| Frame-fit score | 0-100 across reach / stack / STA / HTL | Per-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.