Skip to content

Dashboard — Profile ​

The Browser publishing panel is collapsed by default so publishing tools do not push your profile data down the page. Select the panel to expand it. Inside, you can choose a Brave, Chrome, or Edge user-data directory and profile. A dedicated logged-in profile powers default-on Strava posting during GPX/TCX import and ID-based stamp synchronization from local activity pages. FitOps uses the session in place and never copies cookies.

The same panel can append text to any Strava activity you own. Enter the Strava activity ID and text, then select Append Text. Existing description text is preserved. Turn on Dry run to check that the activity is editable without saving anything. On macOS with Brave, first enable View → Developer → Allow JavaScript from Apple Events in Brave. The automation then uses the currently logged-in Brave session without copying its cookies.

If Browser publishing is configured with a dedicated, non-default Brave user-data directory, the panel automatically switches to native headless Brave and attaches Playwright through a temporary local debugging connection. The automation profile must be closed while a request runs, but your everyday Brave instance can remain open. The panel identifies which mode will be used.

The Upload an activity to Strava form accepts a GPX or TCX file, title, description, sport type, and optional gear. Gear may be the numeric value used by Strava or its exact displayed name; the changing distance suffix is optional. The page waits while Strava processes the file and links to the new activity when it succeeds. Duplicate files and unmatched sport or gear values are shown as errors without claiming that an activity was created.

The Profile page (/profile) is where you configure your physiology. Set your threshold values once, and every analytics calculation across the dashboard and CLI will use them automatically.

On mobile screens, the paired dashboard panels on this page collapse into single-column rows so Identity, Physiological Estimates, HR Zones, Pace Zones, Race Predictions, and Equipment each get their own full-width block.

Current Training Load ​

At the top of the page a compact snapshot of your current training load is shown if sync data is available:

MetricMeaning
CTLChronic Training Load — fitness built over the past 42 days
ATLAcute Training Load — fatigue from the past 7 days
TSBTraining Stress Balance — form (CTL − ATL)

A form label (e.g. Fatigued, Fresh, Optimal) summarises where you sit right now. The Performance → link takes you directly to the full Performance analytics page.

Athlete Info ​

At the top of the page, your Strava profile data is shown: name, location, profile photo, and body weight (if synced). Body weight is used for power-to-weight calculations in cycling analytics.

Physiology Settings ​

The settings panel covers:

SettingWhat it's used for
LTHR (Lactate Threshold HR)HR zone calculation, effort labelling, LT2 inference
Max HRZone calculation (max HR method), VO2max estimate
Resting HRZone calculation (HRR method)
Threshold pacePace zone boundaries for running
LT1 overrideManually set the aerobic threshold display value
LT2 overrideManually set the lactate threshold display value

Fill in what you know and leave the rest blank. FitOps uses whichever values are available for each calculation.

HR Zone Display ​

After saving physiology settings, your HR zones are displayed as a table — zone number, name, BPM range, and the method used to calculate them (LTHR, max HR, or HRR). The method is chosen automatically based on which values you've set.

Pace Zone Display ​

If you've set a threshold pace, the running pace zones are shown below the HR zones — five zones from Easy to VO2max, with the pace range for each.

VO2max ​

Your current VO2max estimate is shown on the profile page. You can:

  • Recalculate — trigger a fresh estimate from your recent activity data
  • Set a manual override — enter a known value from a lab test
  • Clear the override — go back to the computed estimate

Equipment ​

Shoes and bikes appear here with cumulative usage from synced or locally imported activities.

When the profile is offline, the Equipment panel includes an Add gear form. Enter a name, choose Shoes or Bike, and optionally make it primary for that category. The new item immediately becomes available when uploading an activity.

When Strava is connected, the add form is not shown and the panel is labelled Managed by Strava. Gear from Strava sync is the source of truth in that state. The same restriction is enforced by the profile endpoint, so a connected profile cannot create local gear through a direct form request.

Strava Activity Stamp ​

The stamp panel lets you embed FitOps analytics into your Strava activity descriptions automatically.

Requires activity:write scope. If you haven't granted it, a Grant Write Access button is shown — clicking it redirects you through Strava OAuth to expand your permissions. Once granted, the badge activity:write ✓ appears at the top of the panel.

Controls ​

ControlWhat it does
Auto-stamp on syncWhen enabled, every newly synced activity is automatically stamped
Stamp All ActivitiesQueues a background backfill for previously synced activities that do not already contain the FitOps stamp header

What the stamp contains ​

Each stamp footer includes:

  • Aerobic and anaerobic scores when the activity has recorded average heart-rate data; both are omitted when heart rate is unavailable
  • Activity-day training load when cached: CTL, ATL, TSB, and form label
  • Power — real watts if available, otherwise estimated power with source label. When weather and streams are present, stamping upgrades estimated running power to the true_pace source.
  • VO2max estimate
  • Weather-adjusted pace for runs or speed for cycling, race calibration, and linked workout segment details when available. Segment true pace is shown whenever it exists, even when it matches the displayed segment pace.
  • A link to the FitOps GitHub repo

Training load values come from the cached snapshot for the activity date. Stamping does not recompute CTL/ATL/TSB; if that day's snapshot is missing, the form section is skipped.

The stamp is appended after any existing description you've written. Re-stamping replaces only the FitOps footer — your own text is preserved. Auto-stamp and backfill skip activities whose description already contains the FitOps stamp header, even if the local stamped_at marker was not set yet.

See Also ​

← Dashboard Overview

FitOps CLI — terminal-first training analytics