Introduction
What declines fastest after age thirty?
- Muscle mass? No
- Strength? No
- Power? YES!!!
What’s the top tool for preserving power?
- Plyometrics.
So I built an app for that.
Install Links
Plyos for Android
- The Android app isn’t released…yet.
- Google requires twelve testers for fourteen days before releasing on the Play Store.
- Email your Android account address to matthew.dever@gmail.com if you want the Android version for now.
YouTube Exercises
- Email me any YouTube video links you’d like considered for inclusion in the app.
Demo Video
Details
I have this problem of getting older slowly and knowing someday is coming fast and dead.
I have this other problem that YouTube pushes me many multi-minute videos of plyometrics exercises I’d use if they weren’t so haphazardly arranged.
So I built an app for that.
Press one button to generate a customized plyometric-focused workout from a pool of two-hundred exercises.
The app uses AI to do AI things like analyze the videos, create the workouts (until I realized that would cost too much money and had AI extract the AI generation logic into a non-AI, no cost old-school algorithm), and AI wrote most of the code.
Want to tailor your workout?
Choose your workout duration.
Choose your focus areas, effort, experience.
Set your equipment.
Or don’t.
Got injuries?
Got you covered.
Protect back, knee, shoulder, ankle, hip, wrist.
Message me any others you need and I’ll feed it into the AI data analysis pipeline on the next run and add a setting.
Saw a YouTube video you think would be perfect for the app, message me that link and I’ll consider it.
Want to track your workouts?
Create an account.
Don’t want to track your workouts?
Don’t create an account.
There’s no advertising and no cost to use the app.
I built this app for me. If you like it, use it.
If you don’t want to die faster, weaker, slower, use it.
If not, try something else. Run sprints. Jump high. Lift fast.
PS – If orange is your favorite color you may love this app.
You will find non-plyometric exercises as well, mostly power and strength but also some mobility and martial arts. Exclude any with a single tap in the Settings.
Technology
- Google Gemini Flash for the video analysis
- YouTube iframe for video display
- Claude Code for most of the building
- React Native, Node.js, TypeScript for all the things
- Vercel for storing the exercise APIs and data
- Github repo and CICD and Expo Go for builds
- Firebase for auth, accounts, saving settings, history
- Jest, React Native Test Library for testing
- Maestro for E2E testing

I did not want to manually analyze the YouTube videos I’ve saved that I wanted to use. So I fed the data into Google Gemini Flash to analyze the videos and output it in the JSON format I need to power the app functionality. It’s not perfect. For example, you’ll see the start times or end times for some videos might feel a half-second to a second off. That’s relatively rare and hard to make perfect when it’s less than one second off anyway. I’d love to include Instagram or other video data sources I see but they don’t have a video player as simple to embed in an app like YouTube.
I use Claude Code to build most of the functionality. I tell it what I want in detail as concisely as possible. It does a great job 90% of the time. The biggest problem is that it couldn’t visually test the app after making a change. At least it couldn’t for the first few weeks because I don’t want the overhead of a test infrastructure. Occasionally, I’d have to go back and forth with Claude Code telling it how the UI didn’t look like what I asked for or what it thought it produced. Now that the app is more stable, I have E2E UI tests I can have it run but rarely need to at this point. Most of the test failure comes from adding new functionality, not from bugs. But it’s nice to have the test suite to run before a new build and now a new release to the App Store. Manually testing even this set of functionality repeatedly is not my cup of coffee.
After the first few sessions I would regularly run out of tokens in my five-hour Claude window. I learned to schedule tasks for Claude after each five-hour window. That takes work, estimating the size of the requests to not exceed the token budget to keep things simple, saving task assignments, and context, and generally works well until I ran out of my weekly token budget that reset every Thursday mid-day. I learned to schedule cleanup tasks for Wednesdays like fixing broken tests if I had spare weekly token remaining.
Here are some high-level statistics as of February 7th 2026.
- ~25,000 total lines of code
- ~10,400 app code (TypeScript/TSX)
- ~13,700 test code + ~550 lines of Maestro YAML
- ~1,100 scripts/tooling
- ~570 Python (Gemini video analysis)
- ~20 backend (intentionally minimal)
- ~8,300 exercise database JSON
- 1.3 : 1 test-to-app-code ratio
If you want more details, send me a message. If you’re an Android user and want this released on Android, let me know (particularly if you’re a developer who can test and fix issues).
My Usage
Here’s my current weekly training schedule.
- Sunday – Plyometrics (Weighted Squat and Lunge Jumps, Plyo Pullups and PushUps, Med Ball Throws, 15m Plyos App)
- Monday – Zone2 Boxing 30-45m, 10m Plyos App
- Tuesday – Deadlift Strength/Power, Bench, Row, Accessories, Ankle and Vestibular Rehab
- Wednesday – 75m Hot Yoga
- Thursday – Zone 5 Echo Bike 4m on, 3m off 4x
- Friday – 30m Walk/Off
- Saturday – Squat Strength/Power, Overhead Press, Pull-Ups, Split Squat, Accessories, Ankle and Vestibular Rehab
I’ll normally use the Plyos app 2-3x per week at the end of my workout. One day per week I focus purely on plyometrics. My lifting days right now are much lighter, faster, and focused on power training. I use Metric to track major lift velocity and My Jump 2 to track squat jump height.
Research
I knew muscle mass declined significantly since I saw the flyer on the girls bathroom door at the Upper Darby Gym when I was twelve years old. You don’t forget anything about the girls bathroom in a male-dominated gym (I worked at the gym and had to clean the bathrooms). I did not know about the increased loss of power relative to muscle mass and strength until the last two years. So I did what anyone would do. I asked AI some questions. Message me if you find anything incorrect.
Muscle mass loss: ~0.5–1% per year
Evidence
This range is widely cited and well supported.
Key findings
- After ~age 30–40:
- Muscle mass declines ~0.5–1% per year
- Accelerates after ~60–70
- Loss is heterogeneous (lower limbs > upper limbs)
Representative evidence
- Longitudinal DXA and MRI studies consistently show:
- ~3–8% per decade until older age
- Faster decline after 70
Strength loss: ~2–3× faster than mass loss
Evidence
Strength declines disproportionately faster than muscle size.
Why this happens
- Neural drive decreases
- Motor unit remodeling
- Reduced firing frequency
- Tendon stiffness changes
- Selective denervation of high-threshold motor units
Key findings
- Strength declines ~1–3% per year
- Far exceeds what muscle atrophy alone would predict
Power loss: fastest of all (≈ 3× strength loss)
This is the strongest claim scientifically
Muscle power = force × velocity
Velocity declines sharply with age due to:
- Fast-twitch fiber atrophy
- Slower contractile properties
- Reduced rate of force development (RFD)
- Loss of high-threshold motor units
Key findings
- Power declines earlier, faster, and more steeply than strength
- Declines of 3–4% per year are commonly reported
- Predicts:
- Falls
- Loss of independence
- Mortality better than strength or mass
Landmark observations
- Lower-extremity power explains functional decline better than strength
- Power loss precedes detectable sarcopenia
Why power declines fastest: fast-twitch fiber atrophy
Single-fiber physiology
Studies using isolated muscle fibers show:
- Type I (slow-twitch) fibers:
- Minimal intrinsic decline in contractile quality
- Type II (fast-twitch) fibers:
- Marked atrophy
- Reduced cross-sectional area
- Preferential denervation
Summary
What’s solid science
- Power declines fastest with age
- Fast-twitch fiber atrophy is the primary driver
- Intrinsic muscle quality is mostly preserved
- Neural and structural factors dominate
- Power predicts function better than strength or mass
Across healthy adults after ~40 years of age (accelerating after ~60):
- Muscle mass declines slowest
- Strength declines ~2–3× faster than mass
- Power declines ~2–4× faster than mass and ~1.5–2× faster than strength
Realistic loss rates (percent per year and per decade)
Aging adults (≈40–70 years), mixed activity levels
| Metric | % Loss per year | % Loss per decade | Relative decline (vs muscle mass) | Notes |
|---|---|---|---|---|
| Muscle mass | 0.3–1.0% | 3–8% | 1× (baseline) | DXA/MRI data; accelerates after ~60–70 |
| Muscle strength | 1.0–3.0% | 10–25% | ~2–3× mass loss | Declines exceed atrophy alone |
| Muscle power | 2.0–4.0% | 20–40% | ~3–4× mass loss | Earliest & steepest decline |
Same data, expressed more explicitly “relative to each other”
This reframes the same information using multipliers.
| Variable | Annual decline (typical) | Relative to mass | Relative to strength |
|---|---|---|---|
| Muscle mass | ~0.5% / year | 1.0× | ~0.3–0.5× |
| Strength | ~1.5–2.0% / year | ~2–3× | 1.0× |
| Power | ~3.0% / year | ~3–4× | ~1.5–2× |
Decade-scale functional implications (why power matters most)
| 10-year change | Muscle mass | Strength | Power |
|---|---|---|---|
| Typical decline | 5% | 15–20% | 25–35% |
| Functional impact | Mild | Moderate | Severe |
| Predicts falls & disability | Weak | Moderate | Strong |
| Responds to cardio alone | No | Partially | No |
This is why power loss precedes visible sarcopenia and why older adults often “look fine” but lose function rapidly.
Why these ranges are realistic (and not exaggerated)
Why mass loss looks “small”
- Muscle fiber number loss is hard to detect
- Slow-twitch fibers are relatively preserved
- DXA underestimates fiber-specific atrophy
Why strength loss is larger
- Motor unit remodeling
- Reduced neural drive
- Lower firing frequency
- Tendon compliance changes
Why power loss is largest
- Preferential fast-twitch fiber atrophy
- Loss of high-threshold motor units
- Reduced rate of force development
- Velocity decline dominates the equation
Power = force × velocity → velocity loss amplifies decline
Age effects (important nuance)
| Age range | Dominant issue |
|---|---|
| 30s–40s | Neural + power decline begins |
| 50s | Fast-twitch atrophy accelerates |
| 60s | Power loss becomes function-limiting |
| 70s+ | Strength + mass loss accelerate |
This is why training for power earlier pays compound dividends later.
When power decline begins (by decade)
| Age range | What’s happening | Power change |
|---|---|---|
| ≤25 | Peak neuromuscular speed & RFD | Peak |
| 25–30 | Subtle loss of velocity & RFD | ~0–5% |
| 30–40 | Measurable power decline begins | ~1–2% / year |
| 40–50 | Faster drop in RFD | ~2–3% / year |
| 50–60 | Acceleration phase | ~3–4% / year |
| 60+ | Steep decline without training | 4%+ / year |
Longevity Training Protocol
Ranked by physiological return on investment (ROI)
1. Explosive Power & Rate of Force Development (RFD)
Highest ROI · Fastest age-related decline · Least “accidental”
Why this is #1
- Muscle power declines 2–4× faster than strength or mass
- Strongest predictor of:
- Falls
- Loss of independence
- All-cause mortality (in older adults)
- Fast-twitch fibers atrophy without intentional loading
- Cannot be preserved by daily activity or steady cardio
Training targets
- High-threshold motor units
- Fast-twitch fiber cross-section
- Neural firing rate and synchronization
Methods (pick 2–3 per week)
- Plyometrics (low volume, high intent)
- Ballistic lifts (jump squats, KB swings, med-ball throws)
- Sprinting / bike sprints / hill sprints
- Olympic lift derivatives (optional, not required)
Key rules
- Intent > load
- Stop sets when speed drops ~10–20%
- Low fatigue, high quality
2. Maximal Strength (Absolute Force)
Second highest ROI · Preserves power ceiling · Protects joints & bone
Why this is #2
- Strength loss accelerates with age
- Sets the ceiling for power
- Strong association with:
- Bone density
- Joint resilience
- Injury resistance
- High-load work recruits fast-twitch fibers even at low velocity
Training targets
- High-threshold motor units
- Tendon stiffness
- Bone mechanotransduction
Methods
- Heavy compound lifts
- Low reps (1–5)
- Long rest
- Progressive overload
Key rules
- Strength supports power; power expresses strength
- Do not chase fatigue
- Maintain movement quality over PRs
3. VO₂max & Zone 5 Capacity
Critical for survival margin · Strong mortality signal
Why this is #3
- VO₂max is one of the strongest predictors of lifespan
- High-intensity intervals preserve:
- Stroke volume
- Mitochondrial function
- Cardiac reserve
- Zone 5 capacity shrinks rapidly with age if neglected
Training targets
- Central cardiovascular capacity
- Peripheral oxygen extraction
- Lactate clearance
Methods
- 3–5 min intervals
- Hard but repeatable
- Bike, rower, run, ski erg
Key rules
- 1x/week is sufficient if consistent
- Must be truly hard
- Avoid stacking with heavy leg power days
4. Zone 2 Aerobic Base
Foundation layer · Enables recovery & metabolic health
Why this is #4 (not #1)
- Enormous health benefits
- BUT does not preserve fast-twitch fibers or power
- Easily over-prioritized at the expense of neuromuscular capacity
Training targets
- Mitochondrial density
- Fat oxidation
- Capillary networks
Methods
- 45–75 min steady work
- Nose-breathing / conversational pace
- Bike, row, incline walk
Key rules
- 2–3x/week
- Should feel easy
- Enables everything else
5. Hypertrophy (Targeted, Not Bodybuilding)
Structural insurance · Muscle quality preservation
Why this is #5
- Muscle mass loss is slower
- Still important for:
- Injury prevention
- Glycemic control
- Reserve capacity
- Best achieved as a byproduct of strength & power work
Training targets
- Fiber cross-section
- Especially fast-twitch fibers
Methods
- Moderate reps (6–12)
- Mechanical tension
- Full ROM
Key rules
- Volume minimal but sufficient
- Avoid junk volume
- Prioritize lagging areas
6. Mobility, Tendon, and Tissue Capacity
Enabler · Injury prevention · Longevity multiplier
Why this matters
- Power without tissue tolerance = injury
- Tendons stiffen with age
- Connective tissue adapts slower than muscle
Training targets
- Tendon stiffness
- Joint range under load
- Tissue hydration
Methods
- Isometrics
- Slow eccentrics
- Loaded mobility
- Light plyo exposure
7. Balance, Deceleration, & Unilateral Control
Late-life insurance policy
Why this matters
- Fall prevention
- Gait preservation
- Asymmetry correction
Methods
- Single-leg work
- Change-of-direction drills
- Deceleration mechanics
- Light agility
Ranked Summary Table
| Rank | Focus Area | Preserves | Declines fastest? | Can be accidental? |
|---|---|---|---|---|
| 1 | Power / RFD | Fast-twitch fibers | ✅ Yes | ❌ No |
| 2 | Max Strength | Force ceiling | ⚠️ Moderate | ❌ No |
| 3 | VO₂max (Z5) | Cardiac reserve | ⚠️ Moderate | ❌ No |
| 4 | Zone 2 | Metabolic base | ❌ Slow | ✅ Yes |
| 5 | Hypertrophy | Structural reserve | ❌ Slow | ⚠️ Partial |
| 6 | Mobility/Tendon | Injury resistance | — | ❌ No |
| 7 | Balance/Control | Function | — | ❌ No |
Key principle to remember
Train what declines fastest, with the least volume needed, while you still can.
Everything else is easier to rebuild later. Power is not.
Stacked Rank Training Priorities for Power
Tier 1 — Highest ROI (non-negotiable if you care about aging well)
1️⃣ Plyometrics (low-volume, high-quality)
Gold standard for RFD preservation
Why it’s #1
- Maximal rate of force development
- Shortest ground contact times
- Highest motor unit firing rates
- Strongest signal for fast-twitch fiber maintenance
- Directly transfers to fall prevention & gait speed
Best variants
- Pogo jumps
- Drop jumps (low height)
- Broad jumps
- Bounding
- Low-volume depth jumps
Key rule
- Stop when stiffness or speed drops
- Volume stays surprisingly low
2️⃣ Ballistic Intent Lifts
Best strength–power bridge
Why it’s #2
- High intent recruits fast-twitch fibers even at moderate loads
- Much lower injury risk than maximal plyos
- Scales beautifully across age
Best variants
- Jump squats (20–40% 1RM)
- Kettlebell swings
- Trap-bar jumps
- Push press (light/moderate)
- Medicine ball throws
Key rule
- Load must allow max acceleration
- Velocity > weight
Tier 2 — High ROI, context dependent
3️⃣ Sprinting (or Sprint Equivalents)
Highest velocity stimulus available
Why it ranks here
- Extreme fast-twitch demand
- Preserves stride power and neuromuscular speed
- Unmatched RFD stimulus
Caveat
- High orthopedic cost
- Needs careful dosing
Safer equivalents
- Hill sprints
- Bike sprints
- Sled pushes
- Rower sprints
4️⃣ Olympic Lift Derivatives
Excellent, but skill-limited
Why it’s here
- Very high power output
- Strong neural adaptations
- Excellent RFD if technically sound
Examples
- High pulls
- Hang power cleans
- Mid-thigh pulls
Why not higher
- Skill ceiling
- Fatigue cost
- Diminishing returns if poorly coached
Tier 3 — Supportive but insufficient alone
5️⃣ Heavy Strength Lifts with Max Intent
Power-adjacent, not power-specific
Why it matters
- Recruits high-threshold motor units
- Maintains force ceiling
- Necessary but not sufficient
Examples
- Squat, deadlift, press at ≥85% 1RM
Limitation
- Velocity too low to preserve RFD alone
6️⃣ Isometric Explosive Intent
Good adjunct, niche use
Examples
- Isometric mid-thigh pulls
- Overcoming isometrics
Benefits
- Neural drive
- Safe under fatigue
Limit
- Poor velocity specificity
Tier 4 — Lowest ROI for RFD
7️⃣ High-Rep / Fatigue-Based Power Circuits
Often mislabeled as “power”
Examples
- Metcon jump circuits
- Fatigued box jumps
- Light explosive reps to failure
Why they rank last
- Velocity drops quickly
- Fast-twitch fibers stop contributing
- Turns into glycolytic conditioning
Summary Stack Rank Table
| Rank | Method | RFD Signal | Fast-Twitch Preservation | Injury Risk | Longevity ROI |
|---|---|---|---|---|---|
| 1 | Plyometrics | 🔥🔥🔥🔥🔥 | 🔥🔥🔥🔥🔥 | ⚠️ Moderate | ⭐⭐⭐⭐⭐ |
| 2 | Ballistic lifts | 🔥🔥🔥🔥 | 🔥🔥🔥🔥 | Low | ⭐⭐⭐⭐⭐ |
| 3 | Sprinting | 🔥🔥🔥🔥🔥 | 🔥🔥🔥🔥🔥 | ⚠️⚠️ High | ⭐⭐⭐⭐ |
| 4 | Olympic derivatives | 🔥🔥🔥🔥 | 🔥🔥🔥🔥 | ⚠️ Moderate | ⭐⭐⭐⭐ |
| 5 | Heavy strength | 🔥🔥 | 🔥🔥🔥 | Low | ⭐⭐⭐ |
| 6 | Explosive isometrics | 🔥🔥 | 🔥🔥 | Very low | ⭐⭐ |
| 7 | Fatigue circuits | 🔥 | 🔥 | Moderate | ⭐ |
The single most important principle
Explosive intent under low fatigue beats everything.
If velocity drops:
- Power stimulus is gone
- Fast-twitch fibers check out
- You’re no longer training RFD
Minimal effective combo (if you had to choose just two)
- Low-volume plyometrics
- Ballistic lifts
Everything else is optional layering.
Known Bugs
- All Versions
- Exercise videos too short, bad name, etc
- Exercises automatically identified from videos may occasionally have issues — such as very short clips, inaccurate names, or low-quality labels.
- Root Cause – This is due to Gemini’s rare poor video metadata extraction and/or the extraction prompt.
- Workaround – Exclude the exercise from your available exercises using the “exclude” button available on each exercise.
- Fix – I’ll exclude exercises I find from the data set. Unfortunately, this often means excluding all exercises from that whole video. I may work on improving the extraction prompt but this will always be a risk.
- Exercise videos too short, bad name, etc
- Version 1.0.1
- Create Account > Sign In
- When you click the Create Account button, the app incorrectly takes you to the sign in screen.
- Workaround – Tap “Sign up” on the “Don’t have an account? Sign up” link inside the modal.
- Root Cause – AuthModal uses useState(initialMode) which only captures the value at mount time — and the modal is always mounted (just hidden), so it mounts with authMode = ‘login’. When handleSignUp sets authMode to ‘signup’ and shows the
- modal, the internal mode state is still ‘login’.
- Fix available in 1.0.2: The fix is a useEffect in AuthModal that syncs mode to initialMode whenever the modal becomes visible.
- Create Account > Sign In
- Version 1.0
- Sign up blank screen
- After you sign up for an account, you may see a blank screen and feel stuck.
- Workarounds – Close the app and restart it. Your account should have been created still. Alternatively, skip the sign up step for now.
- Root Cause – SignUp was explicitly awaiting uploadLocalData (a Firestore setDoc write) before resolving. Firebase simultaneously fired onAuthStateChanged → syncFromFirestore, which for a new user (no existing cloud doc) also calls uploadLocalData. So two concurrent Firestore writes raced each other, and signUp wouldn’t resolve until the Firestore write finished — meaning handleClose() in AuthModal was never called until the write completed. On slow networks or offline conditions, this left the modal open indefinitely in a frozen/blank state.
- Fix available in Version 1.0.1: signUp now just creates the Firebase account and returns immediately (matching how login works). The onAuthStateChanged listener already handles everything: it fires the moment the user is created, sets user state, and calls syncFromFirestore — which for a new user uploads local data automatically.
- Sign up blank screen