Part of session
Result verification
Verified: 1/1 • matching: 0 • drifted: 1 • not checked: 0
Vector alert 0 Vector warn 0 Vector ok 1 Vector unknown 0
Baseline: —
Top: #199
Baseline guidance (aero best practice)
Goal: a stable reference run for comparisons (position/helmet/wheels), not the “best-looking” outlier.
Prefer: QC A/green, high included distance, low rejection %, few unstable laps, and solid straight coverage.
Avoid: low straight time, many unstable laps, power dropouts/spikes, or runs that needed heavy manual selection unless you’re deliberately isolating a clean segment.
Rule of thumb: pick the top Best10 run you’d be comfortable publishing as a reference; if A-only has none, choose the cleanest B and document why.
Client report
Baseline vs Best10, power @35–55, time savings (40/90/180 km), and top 10 runs.
Uses current Ref speed.
Workflow
Next action
Review QC and replay consistency, then finalize when evidence is stable.
  • Review QC reasons, exclude noisy laps, and run Recompute.
  • Document why this run is still usable before sharing with an athlete.
  • Replay drift detected: inspect top driver 'air_density' before finalize.
Replay consistency
Replay drift is above tolerance. Review mismatch and top driver before finalize.
Cached: within_tolerance=False • |delta CdA|=0.037340 • top driver=air_density
Vector: weights=w_final_irls • top3 leverage=3% • weighted cosine=0.364 • final-vs-base=0.000000
Leverage ok Final-vs-base ok
idle
Editable
Saved status:
Publish / Push to client
Generates a signed client link (no DB write). Includes report + PDF/CSV + photo access.
Open
Open in dashboard
Opens the dashboard HTML report view (requires being logged into the dashboard).
Page guide (optional)
Result: CdA/Crr and power summary.
Ride chart: choose analysis range.
Laps: include/exclude and recompute.
Run details: setup, tires, notes, photos.
Signal quality
How clean and consistent the ride data is — affects how much you can trust the result.
yellow grade B 2026-05-07 19:40:59
Included: 2642.04 m • 1 laps
Included lap flags: green=0, yellow=1, red=0, none=0 • avg confidence 0.59
Track segments covered: 4/4
What's affecting quality — grade B
MANY_UNSTABLE_LAPS Many unstable laps: focus on smoother pacing and consistent position; exclude visibly noisy laps and avoid wind gusts.
LOW_CONFIDENCE Low confidence: steady effort/position, avoid gusts/surges, verify 1s recording + no power dropouts.
UNSTABLE_POWER Power instability: smooth power delivery (no surges), check power sensor zero-offset, and watch for dropouts/spikes.
POWER_VARIABILITY Power variability (not dropouts/spikes): pacing is inconsistent in the chosen section; aim for steadier power and fewer surges.
Recommended next steps:
  • Choose the cleanest contiguous window; reduce selection to exclude obvious disturbances.
  • Verify recording is 1s (not smart recording) and that power has no dropouts.
  • Check power meter calibration/zero-offset and look for hidden dropouts/spikes.
  • Re-test with steadier pacing/position; add laps until instability is diluted.
  • Prioritize a truly steady section: same position, no braking/traffic, no surges.
  • If wind is gusty, repeat in calmer conditions or add more clean laps.
  • Target constant power (avoid micro-surges); use a pacing target and smooth pedaling.
  • Pick a steadier pacing target; avoid surges between straights/corners.
  • If variability is structural (course/traffic), choose a better time/location or add laps.
median conf 0.59 • rejected 0% • unstable 1
unstable frac 100% • power 100% • speed 0% • dropout laps 0 • spike laps 0 • outlier laps 0 • straight time 143s
Signal quality breakdown
These are the main factors behind QC confidence and rejection. Thresholds are heuristic; use them to guide selection + data cleanup.
Driver Value Status Notes / quick fixes
Confidence score 0.59 low Low confidence often correlates with low straight time, unstable pacing, or many rejected samples.
Samples excluded 0% good If high: tighten selection, exclude bad laps, and re-run QC/analyze.
Inconsistent laps 1 (100%) very high If unstable: check pacing, sensor dropouts, and avoid corners/traffic in the selection.
Straight time (effective) 143 s good If low: widen selection to include more straights, or capture more clean laps.
Straight coverage 1546 m good More straight distance generally improves confidence and stability.
Corner coverage 1096 m Turns often bias CdA high; heavy corner time can hurt quality unless handled explicitly.
Included distance/laps 2642 m • 1 laps If low: widen selection or include more clean laps.
Solver samples used 245 (S 144, C 101) If low: exclusions/selection/steady-gate may have removed too much data.
Sample interval 1.00 s (IQR 0.00s) ok Irregular or low sample rate can reduce confidence and increase quantization artifacts.
Missing samples speed 0.0% power 0.0% good Dropouts often explain unstable laps and high rejection.
Quantization step power ~1 W speed ~0.030 m/s good Large steps can create “blocky” data and inflate residuals.
Data quality lap flags dropouts 0 · spikes 0 · outliers 0 good Dropouts/spikes/outliers can sink confidence even if the lap “looks fine.” Consider excluding those laps.
Segment coverage 4/4 full Missing segments can reduce stability/coverage. Aim for clean laps across the full track when possible.
Aerodynamic result
Drag coefficient (CdA) and rolling resistance solved from your selected ride data, with modelled power at common race speeds.
Definitions (what these numbers mean)
Field Meaning
Drag (CdA) Average of per-sample instantaneous CdA values computed from a power-balance model with fixed Crr (and drivetrain loss). Uses only samples that pass exclusions (and optional steady gate). Units: m².
Drag — straights / corners Same CdA computation as “CdA total”, but averaged over samples labeled straight vs corner by the track segmentation. Useful to spot corner artifacts vs stable straights.
Rolling resistance (Crr) Rolling resistance coefficient held constant during the solve. It may come from a per-run override; otherwise a tire library/manual point is used when available. CdA is estimated while Crr stays fixed.
Uncertainty / CI95 Two different things may appear: (1) CI95 is a bootstrap interval from solver_uncertainty_v2, resampling per-lap mean instantaneous CdA (1500 resamples, 95% interval). (2) Legacy “uncertainty” is a simple spread (std dev) of instantaneous CdA samples and is not a confidence interval.
Samples used Counts from solver_sample_counts: total FIT samples, after exclusions, and the final number used by the solver (plus straight vs corner used).
Solver mode / steady gate The mode can enable a “steady gate” that discards samples with large power ramps or speed changes (dp/dt and dv/dt thresholds), strong braking, and a short ignore window after a major power change. removed_frac is the fraction removed; the gate may fall back to disabled if it would remove too much.
CdA-inst stats Diagnostics for instantaneous CdA on included samples: median plus dispersion (MAD/IQR). These are computed after masking invalid/out-of-bounds CdA values (e.g., non-finite or outside a plausible range).
Robust (straights) A diagnostics-only straight fit stored in robust_v1: confidence-weighted IRLS (Huber) regression in wheel-power space on straight-labeled samples. It does not replace the reported CdA columns.
Rejected / residual / time used Robust diagnostics: pct_rejected is mainly gating (not corners / below mins / below conf_min) and equals 1 - n_used/n_total. residual_metric is a robust residual scale (≈watts) from the straight-fit model (lower is better). straight_time_used_s summarizes how much time had non-zero fit weight.
Predicted power Modeled steady-state (flat, no wind) power at fixed speeds using the run’s solved CdA total + fixed Crr and drivetrain loss. Useful for comparing “how fast this setup feels” on a common baseline.
Reference power table Saved speed→power mapping built from the same steady-state model as Predicted power (CdA, fixed Crr, air density, mass, drivetrain loss) for consistent later comparisons.
Standard vs robust estimate comparison
The robust estimate uses only straight sections with confidence weighting — it's a diagnostic check and does not replace the reported result.
legacy robust Δ
CdA straight 0.2918 0.2151 -0.0767 (-26.3%)
Uncertainty ± total ± 0.0130
Straight samples used 144 144/245
Rejected
Fraction of straight candidates that end up zero-weight (≈ 1 - n_used/n_total; mostly gating)
41%
Residual metric
Robust residual scale in watts (lower is better)
101.2
Straight time used 240.0s
Straight segments used 27
Drag (CdA)
0.2843
± 0.1621 (sample std)
Rolling resistance (Crr)
0.00400
Drag — straights
0.2918
Drag — corners
0.2727
Solver mode: default • drivetrain 3.0% • accel on • grade on
Samples used: 245 (straight 144, corner 101) • after exclusions 245/1262
CdA-inst stats: median 0.2778 • MAD 0.1223 • IQR 0.2543 • ok 205/245
Robust (straights): 0.2151 ± 0.0130 • n=144 • diagnostics-only
Power needed at speed (watts, steady-state flat)
35 km/h
40 km/h
45 km/h
50 km/h
55 km/h
Reference speed: Ref —
Math & inputs (transparency)
Power balance (conceptual)
We fit CdA from the FIT data using a simplified steady-state balance. At a given speed v (m/s):
P_aero = 0.5 × ρ × CdA × v³
P_roll ≈ Crr × m × g × v
(plus small terms for grade/acceleration/drivetrain depending on the solver configuration)
What you’re seeing on this page
CdA/Crr above are run-averaged solver outputs; the predicted-power bars come from the solver’s reference-speed table.
Download samples CSV  |  Download samples CSV (with CdA-inst)

Ride data

Distance along the track on the X axis. Drag to highlight the section you want to analyse. Scroll with Ctrl/⌘ + mousewheel to zoom in.
(downloads selected CSV + selection JSON)
Applying a selection saves the range, re-runs the analysis, and refreshes all results below to match.
Loading chart…
Move pointer over chart for values.
Power Speed
Cadence Heart rate CdA-inst
Overlays: 3s long-dash, 10s dotted (visual only).
Lap explorer (visual only)
Selected
Tip: click a boundary line (or Alt+click anywhere) to select a lap.
Stats are computed from the raw samples for the chosen lap.
Mode Samples Duration Distance Avg speed Avg power Avg cadence
Select a lap…
Stability (diagnostic)
Select a lap to see pacing/position stability.
Uses robust CV (MAD-based) + first-half vs second-half drift. Visual-only; does not affect solver.
Lap spans (distance/time from samples)
Lap Start x End x Δx Start t End t Δt
Loading…
Lap QC
Select a lap to see QC status.
Recommended next steps

    Run details (setup, notes, tires, photos)

    Setup is stored per run (equipment/position/overrides). Tire selection + notes + photos are stored on the run. Notes/tires autosave; photos require a manual upload.
    Run setup
    Use Close to collapse the editor.
    Tires (stored on run)
    Select the run’s front/rear tire library entries. The setup editor also has “Tire front / Tire rear” fields for descriptive notes.
    Front tire
    Suggested
    Rear tire
    Suggested
    Add new tire (optional)
    If you fill these in, the tire will be added to the library and selected for this run. It will populate both front and rear if they are not set.
    Notes
    Photos
    No files chosen
    No photos attached yet.
    Notes/tires autosave. Use this to upload photos (or force a manual save).

    Revision: #1

    Engineering debug (advanced): raw run JSON
    {
      "created_at": "2026-05-07 19:37:38",
      "finalized_at": null,
      "has_tire_front_rear": true,
      "is_finalized": false,
      "notes": null,
      "revision_number": 1,
      "revision_of_run_id": null,
      "run_id": 199,
      "run_label": null,
      "session_id": 101,
      "status": "analyzed",
      "tire_front_id": null,
      "tire_front_name": null,
      "tire_id": null,
      "tire_name": null,
      "tire_rear_id": null,
      "tire_rear_name": null,
      "tires_label": null
    }
    View laps JSON
    For test data cleanup; cannot be undone.

    Analyze: Parses the uploaded file, detects laps from distance vs track lap length, classifies straight/corner segments, computes QC results (per-lap qc_flag/reasons/metrics + run summary), and computes solver outputs (avg CdA/Crr + predicted power). This may increase the number of lap rows if the file contains more laps than the FIT “lap messages” reported at upload.

    Recompute: Re-runs the QC computations using the current lap inclusion/exclusions in this run (updates per-lap qc_flag + the run summary). Use after excluding laps.

    Finalize: Locks this run permanently (immutable). After finalizing, analyze/recompute/exclude are blocked; create a revision to make changes while preserving an audit trail.

    Laps and exclusions (showing 1/3) selection active yellow 1
    FIT lap messages: 2 (last record distance: 10141.35) Detected laps: 1 (included: 1) Data source: FIT (fit_distance_field)
    Selection active: 1857.5m .. 4513.1m. Showing 1 / 3 laps. Show selection only
    Runs one recompute (faster than excluding one-by-one).
    lap_index lap_id included qc_flag qc_conf qc_reasons exclude_reason action
    0 15104 yes yellow 0.59 Marginal stability: 0.59
    1 15105 yes (out of scope) No samples in scope
    2 15106 yes (out of scope) No samples in scope
    Client report preview
    Auto-rendered from the same payload used by Copy. Adjust Ref speed and format to update.
    CdA trend (Best10 + baseline)
    Power bars (baseline tinted vs best solid)
    Colors represent speed (40/45/50/55).
    Baseline + Best10 (horizontal compare)
    CdA by run order (baseline + compared runs).
    Client runs summary (6)
    All saved runs for this client: Lars Teutenburg — lars@bikefiteurope.com. “Recommended” prioritizes green QC + high included meters.
    Recommended: #182 #181 #180 Follow recommended
    run date track label QC included CdA P@45 P@50 P@55 state
    #199 2026-05-07 Aigle Velodrome (CH) — 200m yellow 2642m / 1 laps 0.2843 373W 501W 656W analyzed
    #183 2026-05-07 Grenchen green 5493m / 24 laps 0.2747 362W 485W 635W analyzed
    #182 Recommended 2026-05-07 Grenchen green 6350m / 27 laps 0.2795 367W 493W 645W analyzed
    #181 Recommended 2026-05-07 Grenchen green 6591m / 28 laps 0.2594 344W 461W 602W analyzed
    #180 Recommended 2026-05-07 Grenchen green 6074m / 26 laps 0.2511 334W 447W 585W analyzed
    #179 2026-05-07 Grenchen green 5103m / 22 laps 0.2277 307W 410W 535W analyzed

    Last API response

    (no actions yet)
    (none)