JoyVelo

JoyAnalyze reference

JoyAnalyze V1.0 / V2.0 / V3.0

JoyAnalyze is the multi-source cycling-data accuracy & performance comparison toolbox inside JoyVelo. Five PRD sub-modules cover project management, data alignment, visual comparison, segment analysis, and stats / export / share. All parsing happens in the browser — your .fit / .gpx / .tcx files never leave your device.

V1.0 free for 2-stream compareV2.0 Pro · V3.0 Pro+Browser-side parsing · no uploadReference data — not a substitute for in-person testing

The 5 sub-modules

Every JoyAnalyze 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.

All projects in one place. Card / list view, filter by name / date / file count, tag, set reference (基准) device, public / private toggle, batch delete + export. Free: 2 streams · Pro: up to 20 streams.

FreeCreate / delete / public-private toggle, 2 streams per project
Pro+ 20 streams per project, batch ops, batch export
Pro++ Team project sharing

FIT / TCX / GPX / PWX / SRM / CSV / Zwift log parsing, automatic zero-power / anomaly / dropout cleaning, time-axis DTW alignment, GPS-trajectory spatial alignment for same-route rides (Pro+), per-file time offset with visual micro-adjust.

FreeTime-axis alignment, manual offset
Pro+ GPS spatial alignment, custom cleaning rules, barometric alt priority
Pro++ Reverse-direction auto-detect
可视化对比画布Comparison Canvas

Multi-metric overlay (power / HR / cadence / speed / elevation / radar) with zoom, pan, marquee zoom, hover crosshair + delta vs reference, smoothing slider 1s-60s. Specialty charts: Mean-Max Power, distance accumulation, L/R leg power, power histogram, GPS map overlay (Pro).

FreePower / HR / cadence / speed curves + hover + smoothing
Pro+ MMP curve, distance curve, L/R leg power, power histogram, GPS map overlay
Pro++ SVG vector export
分段对比分析体系Segment Analysis

Four ways to create a segment: canvas drag-select, map box-select, auto-detect (climb ≥3% ≥30s, interval ≥90% FTP ≥20s, sprint peak ≥120% FTP), equal-split by time / distance. Per-segment NP / IF / TSS / HR drift / VAM / CdA panel. Route-segment template reuse.

FreeManual canvas drag + auto-detect
Pro+ Map box-select + equal-split + segment templates
Pro++ Cross-project segment templates
统计导出与分享体系Stats, Export & Share

Bottom summary table (power / HR / cadence / distance / elevation / data quality), per-power-band deviation vs reference, Bland-Altman plot, Z1-Z7 power-zone distribution, radar taillight detection stats. PNG 2x/4x export, SVG export (Pro), PDF report (Pro+), iframe embed code, public share link with 24h / 7d / permanent TTL.

FreeSummary table + per-power-band deviation
Pro+ 2x/4x PNG export, SVG export, public share link, iframe embed
Pro++ PDF report, custom brand logo, open API

Quick routes

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

The product is split into three tiers per the JoyAnalyze 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)

  • Project create / delete / public-private (stream_slots_3)
  • FIT / TCX / GPX upload + parse, up to 2 streams per project
  • Basic cleaning: zero-power dropouts, anomalies, gap detection
  • Time-axis alignment + manual per-file offset (seconds)
  • Basic curve canvas: power / HR / cadence / speed, zoom / pan / hover / smoothing 1s-60s
  • Aero / CdA, bias / dynamic-response, Mahalanobis outlier detection (aero_lab, bias_lab, mahr)
  • Read-only Open API access (api_tokens_read)

V2.0 增强版 (Pro)

  • Up to 20 streams per project (stream_slots_20)
  • PWX / SRM / CSV / Zwift log formats in addition to FIT/TCX/GPX
  • JoyOne activity library one-click import
  • GPS-trajectory spatial alignment with reverse-direction auto-detect
  • Custom cleaning thresholds (zero-power, anomaly, dropout)
  • Mean-Max Power curve, distance accumulation, power histogram, L/R leg power
  • GPS satellite / street map overlay, canvas ↔ map bidirectional zoom
  • Segment auto-detect (climb / interval / sprint) + map box-select + equal-split + segment templates (segment_templates)
  • Full summary table (power / HR / cadence / distance / data quality) + per-power-band deviation
  • 2x / 4x super-sample PNG export, SVG vector export
  • Public share link (24h / 7d / permanent) + iframe embed
  • Write API access (api_tokens_write), batch upload (batch_upload)

V3.0 专业版 (Pro+)

  • One-click PDF comparison report with custom cover + brand logo (pdf_reports)
  • Team project sharing, multi-user collaboration, data-point comments (team_comments)
  • Webhooks: HMAC-signed events on analysis complete (webhooks)
  • Dynamic-response speed analysis: latency + overshoot in power step events
  • Cross-project segment template library
  • Cross-project activity feed + tag-grouped project view (Team Dashboard)
  • API: /api/v1/activities + /api/v1/activities/export + /api/v1/segments/search

Alignment engine — how it works

JoyAnalyze uses Dynamic Time Warping (DTW) for time-axis alignment. Every non-reference stream is warped onto the reference stream's timeline, so curves line up correctly even if one device dropped samples or paused mid-ride. The output is a per-stream dtwCost (lower = better agreement), meanOffsetMs, and maxOffsetMs.

AlgorithmTriggerOutput
Time-axis DTWDefault · indoor / same-field test1-second-precision warping + per-sample offset
GPS spatial (Pro+)Same-route outdoor comparisonMileage-axis normalisation + reverse-direction flip
Manual offsetTimezone drift, deliberate start delay± N seconds, drag-to-preview
Auto-clean (zero-power)speed = 0 sustained ≥ 5s (configurable)Grey-dashed overlay, excluded from stats
Anomaly filterΔ power > 300 W / s sustained < 2 sMarker preserved, excluded from averages

Storage & privacy

All .fit / .gpx / .tcx parsing happens in the browser via Web Workers. Files never leave your device. Project metadata, settings, and segment annotations are stored in localStorage underjoyanalyze-projects-v1 (and a handful of sibling keys for the team / share-link / sensor-library modules).

Private projects are visible only in the current browser by default. Toggle the "public" flag to generate a share link; share links can be set to expire in 24h / 7d / permanent.

Pro+ users can wire their account to a server-side sync via the Open API (bearer token, see /docs/api). The sync is opt-in and never automatic.

Mandatory disclaimer

JoyAnalyze is a tool for hardware comparison, training review, and segment analysis. It is nota substitute for a professional bike fit, a coach's analysis, or a medical evaluation. All data is for reference only.

Power-meter and heart-rate-monitor accuracy is influenced by many factors JoyAnalyze does not model: ambient temperature, sensor battery age, ANT+ dropout, rider position, calibration drift. Treat the deviation numbers as a relative ranking, not an absolute verdict.

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

Cross-references: JoyFit V1/V2/V3 · JoyOne demo · V3.0 Open API