Analytics Formulas

Forge uses scientifically-backed formulas to calculate your progress metrics. This page explains each formula in detail.

Overall Strength Coefficient

The Strength Coefficient is a comprehensive metric that tracks your overall strength development across all exercises.

Base Formula
Strength Coefficient = (Σ(max_weight / first_weight) / exercise_count) × 100
Where:
  • max_weight: The maximum weight lifted for each exercise across the lookback period
  • first_weight: The first recorded weight for that exercise
  • exercise_count: Total number of unique exercises performed

How It Works

The algorithm:

  1. Filters workout history to the specified lookback period (default 90 days)
  2. For each exercise, tracks:
    • The first weight you ever used (baseline)
    • The maximum weight you've lifted
    • The date you achieved that max
  3. Calculates the progress ratio for each exercise: current_max / first_weight
  4. Averages all ratios and multiplies by 100

Interpretation

Progress Percentage
Progress % = ((current_coefficient - previous_coefficient) / previous_coefficient) × 100
Shows your improvement rate compared to the second-to-last data point.

Exercise-Specific Progress

Track detailed progress for individual exercises with three key metrics.

1. Maximum Weight Tracking
max_weight = max(set_1.weight, set_2.weight, ..., set_n.weight)
For each workout session, we record the heaviest weight lifted across all sets.
2. Volume Calculation
Volume = Σ(weight × actual_reps) for all sets
Total volume quantifies the total work performed. Higher volume typically indicates greater training stimulus.
3. Intensity Metric
Intensity (%) = (average_weight / max_weight) × 100
Where:
  • average_weight: Average weight across all sets in that session
  • max_weight: The heaviest weight lifted in that session

Intensity shows how close your working sets are to your maximum effort. Higher intensity (closer to 100%) indicates training closer to your max capacity.

Progress Percentage
Progress % = ((current_max - previous_max) / previous_max) × 100
Compares your latest max to your previous recorded max for this exercise.

Body Weight Tracking

Monitor your body composition changes over time.

Weight Change
Weight Change = current_weight - start_weight
Tracks absolute change from your first recorded weight in the lookback period.
Average Weight
Average Weight = Σ(weight_points) / total_points
Calculates your mean body weight across all recorded measurements.

Data Integration

Body weight data is sourced from:

  1. Profile Service: Direct weight entries from "Body Weight" screen
  2. Weight History: Historical weight logs stored with timestamps
  3. Workout Sessions: Fallback to current weight if no history exists

Workout Volume Analysis

Volume is the total amount of weight lifted, a key indicator of training stimulus.

Daily Volume
Daily Volume = Σ(weight × reps) for all exercises in session
Aggregates the total volume for each workout day.
Weekly Volume
Weekly Volume = Σ(daily_volumes) for all days in week
Sums up all daily volumes for each training week. Week starts on Monday.
Average Volume
Average Volume = Σ(weekly_volumes) / total_weeks
Your typical weekly training volume across the entire lookback period.

Week Definition

Weeks are calculated as Monday to Sunday periods using this helper function:

week_start = date - Duration(days: date.weekday - 1)

Workout Frequency

Track how often you train and maintain consistency streaks.

Weekly Frequency
Weekly Frequency = workouts_per_week
Counts the number of workout sessions completed each week.
Average Frequency
Average Frequency = Σ(weekly_frequencies) / total_weeks
Your typical weekly training frequency.
Streak Calculation
Streak += 1 if (previous_date - current_date) ≤ 2 days
Counts consecutive training days with a 2-day grace period to account for rest days.

Streak Logic

The streak algorithm:

  1. Sorts all workout dates in descending order (most recent first)
  2. Starts from the most recent workout
  3. Continues the streak if workouts are within 2 days of each other
  4. Breaks the streak if the gap exceeds 2 days

Consistency & Completion Rate

Measures how well you stick to your planned workouts.

Session Completion Rate
Session Completion % = (sets_completed / sets_planned) × 100
Calculates what percentage of planned sets you actually completed in each session.
Overall Completion Rate
Overall Completion % = (total_sets_completed / total_sets_planned) × 100
Your aggregated completion rate across all workouts in the lookback period.

What Counts

Interpretation

Muscle Recovery & Training Readiness

Forge tracks when each muscle group was last trained and calculates recovery priorities to recommend the best muscles to train next.

Days Since Last Training
days_since[group] = (now - last_training_date[group]).inDays
For each muscle group, the system scans all workout history (including old exercises matched to current muscle group assignments) and finds the most recent date that muscle was trained.
Default value: 14 days if a muscle group has never been trained.
Recovery Priority
if days < optimal: priority = (days / optimal) × 0.3
if days == optimal: priority = 0.7
if days < optimal × 2: priority = 0.7 + ((days - optimal) / optimal) × 0.3
if days ≥ optimal × 2: priority = 1.0 + ((days - optimal × 2) / 7).clamp(0, 0.5)
Where:
  • days: Days since last training for this muscle group
  • optimal: Optimal recovery days for this muscle group (see table below)

Priority < 0.3 = needs rest, 0.3–0.7 = recovering, ≥ 0.7 = ready to train.

Optimal Recovery Days per Muscle Group

Muscle Group Recovery Days
Legs3 days
Back3 days
Glutes3 days
Chest2 days
Shoulders2 days
Biceps2 days
Triceps2 days
Calves2 days
Forearms1 day
Wrists1 day
Core1 day
Cardio1 day
Workout Priority Score
Workout Priority = Σ(recovery_priority[group] × muscle_score) / Σ(muscle_score)
Where muscle_score depends on intensity:
  • Primary: score = 3
  • Secondary: score = 2
  • Stabilizer: score = 1

This weighted average prioritizes workouts that target muscles most in need of training, while accounting for which muscles are primary vs secondary in each exercise.

Cross-referencing Old History

When exercises in old workout history don't have muscle group assignments (because they were added before the muscle group feature), the system automatically matches them by exercise ID to the current exercise definitions. This ensures that all historical data is used when calculating days since last training, not just recent workouts.

Exercise Completion & Regression Tracking

Forge visually indicates exercise completion status and performance regression to help you stay on track.

Completion Status (Program View)
is_completed = exercise.id ∈ {last_session.exerciseResults[].exercise.id}
When viewing a program's exercise list, each exercise is checked against the most recent completed session of that workout. Exercises that were not completed last time are highlighted in red with a × icon, so you know what you skipped and need to focus on next time.
Rep Regression Detection (Calendar View)
is_regression = (current_total_reps < previous_total_reps)
where total_reps = Σ(set.actualReps) for all sets of an exercise
When viewing workout history through the calendar, each exercise's total reps are compared against the previous session of the same workout. If you performed fewer total reps than last time, the exercise is highlighted in yellow/orange with a trending-down indicator showing the comparison (e.g., "18 / 24 reps").

Lookback Period

All formulas use a configurable lookback period to filter relevant data.

Date Filtering
cutoff_date = current_date - Duration(days: lookback_days)
Only workouts after this cutoff date are included in calculations.

Available Periods

Example Calculation

Let's walk through a real example of calculating the Strength Coefficient.

Scenario

A user has tracked 3 exercises over 90 days:

Exercise First Weight Max Weight Progress Ratio
Bench Press 60 kg 90 kg 1.50
Squat 80 kg 120 kg 1.50
Deadlift 100 kg 140 kg 1.40

Calculation

Total Progress Ratio = 1.50 + 1.50 + 1.40 = 4.40
Exercise Count = 3
Strength Coefficient = (4.40 / 3) × 100 = 146.67

Result

This user has improved their overall strength by 46.67% across all exercises!