progressions

📁 alexanderop/workouttracker 📅 Jan 24, 2026
9
总安装量
8
周安装量
#31393
全站排名
安装命令
npx skills add https://github.com/alexanderop/workouttracker --skill progressions

Agent 安装分布

claude-code 5
opencode 5
gemini-cli 4
antigravity 4
windsurf 4
codex 4

Skill 文档

Progressions Feature

Kettlebell swing progression tracker with automatic advancement through reps → time → weight.

Progression Algorithm

  1. Start: X kg, 10 reps, 10 min EMOM
  2. Each completed session: +2 reps (until 20)
  3. At 20 reps: +2 min per session (until 20 min)
  4. At 20 reps & 20 min: next kettlebell, reset to 10 reps & 10 min
  5. User confirms completion after each session
10 reps → 12 → 14 → 16 → 18 → 20 reps
                                  ↓
                     10 min → 12 → 14 → 16 → 18 → 20 min
                                                      ↓
                                            Next kettlebell
                                            Reset to 10/10

Key Files

File Purpose
lib/progressionLogic.ts Pure functions: calculateNextLevel, getCurrentLevel, getProgressionPhase
composables/useProgressions.ts List all progressions
composables/useProgression.ts Single progression detail + session history
composables/useProgressionForm.ts Create progression form state
composables/useProgressionSession.ts Active EMOM session with timer

Database

Tables: progressions, progressionSessions (Dexie v5)

Repository: getProgressionsRepository() from @/db

Usage

// List progressions
const { state, reload } = useProgressions()

// Single progression
const { progression, level, progress, sessions } = useProgression(id)

// Create form
const { name, selectedWeights, toggleWeight, save } = useProgressionForm()

// Active session
const { level, currentMinute, startTimer, completeSession } = useProgressionSession(id)

Progression Logic API

import {
  calculateNextLevel,
  getCurrentLevel,
  getProgressionPhase
} from '@/features/progressions/lib/progressionLogic'

// Get current level from session history
const level = getCurrentLevel(sessions)
// { weight: 24, reps: 14, minutes: 10 }

// Calculate next level after completing session
const nextLevel = calculateNextLevel(currentLevel)
// { weight: 24, reps: 16, minutes: 10 }

// Get phase description
const phase = getProgressionPhase(level)
// 'reps' | 'time' | 'weight_reset'