WarmupReps.com
393 |Getting Started
397 | 398 |Choose a program, exercise, and then set your target weight. Your warmup sets will then be automatically 399 | calculated.
400 | 401 |Choose a program:
402 |406 | 407 |
├── robots.txt ├── favicon.ico ├── images ├── apple-touch-icon-57x57.png ├── apple-touch-icon-72x72.png └── apple-touch-icon-114x114.png ├── .github └── workflows │ └── deploy.yml ├── scripts └── jquery.cookie.js ├── programs ├── max_single.json ├── greyskull_lp.json ├── program_2.json └── starting_strength.json ├── README.md └── index.html /robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Allow: / 3 | -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmunson/warmup-reps/HEAD/favicon.ico -------------------------------------------------------------------------------- /images/apple-touch-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmunson/warmup-reps/HEAD/images/apple-touch-icon-57x57.png -------------------------------------------------------------------------------- /images/apple-touch-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmunson/warmup-reps/HEAD/images/apple-touch-icon-72x72.png -------------------------------------------------------------------------------- /images/apple-touch-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmunson/warmup-reps/HEAD/images/apple-touch-icon-114x114.png -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: Deploy to S3 + CloudFront 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | 8 | jobs: 9 | deploy: 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - name: Checkout source 14 | uses: actions/checkout@v4 15 | 16 | - name: Configure AWS credentials 17 | uses: aws-actions/configure-aws-credentials@v2 18 | with: 19 | aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} 20 | aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} 21 | aws-region: us-east-1 22 | 23 | - name: Sync files to S3 24 | uses: jakejarvis/s3-sync-action@v0.3.1 25 | with: 26 | args: --delete 27 | env: 28 | AWS_S3_BUCKET: warmupreps 29 | 30 | - name: Invalidate CloudFront cache 31 | uses: chetan/invalidate-cloudfront-action@v2 32 | env: 33 | DISTRIBUTION: ${{ secrets.CLOUDFRONT_DISTRIBUTION_ID }} 34 | PATHS: "/*" 35 | AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} 36 | AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} 37 | -------------------------------------------------------------------------------- /scripts/jquery.cookie.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery Cookie Plugin 3 | * https://github.com/carhartl/jquery-cookie 4 | * 5 | * Copyright 2011, Klaus Hartl 6 | * Dual licensed under the MIT or GPL Version 2 licenses. 7 | * http://www.opensource.org/licenses/mit-license.php 8 | * http://www.opensource.org/licenses/GPL-2.0 9 | */ 10 | (function($) { 11 | $.cookie = function(key, value, options) { 12 | 13 | // key and at least value given, set cookie... 14 | if (arguments.length > 1 && (!/Object/.test(Object.prototype.toString.call(value)) || value === null || value === undefined)) { 15 | options = $.extend({}, options); 16 | 17 | if (value === null || value === undefined) { 18 | options.expires = -1; 19 | } 20 | 21 | if (typeof options.expires === 'number') { 22 | var days = options.expires, t = options.expires = new Date(); 23 | t.setDate(t.getDate() + days); 24 | } 25 | 26 | value = String(value); 27 | 28 | return (document.cookie = [ 29 | encodeURIComponent(key), '=', options.raw ? value : encodeURIComponent(value), 30 | options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE 31 | options.path ? '; path=' + options.path : '', 32 | options.domain ? '; domain=' + options.domain : '', 33 | options.secure ? '; secure' : '' 34 | ].join('')); 35 | } 36 | 37 | // key and possibly options given, get cookie... 38 | options = value || {}; 39 | var decode = options.raw ? function(s) { return s; } : decodeURIComponent; 40 | 41 | var pairs = document.cookie.split('; '); 42 | for (var i = 0, pair; pair = pairs[i] && pairs[i].split('='); i++) { 43 | if (decode(pair[0]) === key) return decode(pair[1] || ''); // IE saves cookies with empty string as "c; ", e.g. without "=" as opposed to EOMB, thus pair[1] may be undefined 44 | } 45 | return null; 46 | }; 47 | })(jQuery); 48 | -------------------------------------------------------------------------------- /programs/max_single.json: -------------------------------------------------------------------------------- 1 | { 2 | "title" : "Max Single", 3 | "exercises" : [{ 4 | "name" : "Squats", 5 | "max" : 600, 6 | "workouts" : [{ 7 | "sets" : "1", 8 | "reps" : "5", 9 | "multiplier" : 0 10 | }, { 11 | "sets" : "1", 12 | "reps" : "5", 13 | "multiplier" : 0.4 14 | }, { 15 | "sets" : "1", 16 | "reps" : "5", 17 | "multiplier" : 0.6 18 | }, { 19 | "sets" : "1", 20 | "reps" : "3", 21 | "multiplier" : 0.7 22 | },{ 23 | "sets" : "1", 24 | "reps" : "1", 25 | "multiplier" : 0.8 26 | },{ 27 | "sets" : "1", 28 | "reps" : "1", 29 | "multiplier" : 0.9 30 | }, { 31 | "sets" : "1", 32 | "reps" : "1", 33 | "multiplier" : 1.0 34 | }] 35 | },{ 36 | "name" : "Bench Press", 37 | "max" : 500, 38 | "workouts" : [{ 39 | "sets" : "1", 40 | "reps" : "5", 41 | "multiplier" : 0 42 | }, { 43 | "sets" : "1", 44 | "reps" : "5", 45 | "multiplier" : 0.4 46 | }, { 47 | "sets" : "1", 48 | "reps" : "5", 49 | "multiplier" : 0.6 50 | }, { 51 | "sets" : "1", 52 | "reps" : "3", 53 | "multiplier" : 0.7 54 | },{ 55 | "sets" : "1", 56 | "reps" : "1", 57 | "multiplier" : 0.8 58 | },{ 59 | "sets" : "1", 60 | "reps" : "1", 61 | "multiplier" : 0.9 62 | }, { 63 | "sets" : "1", 64 | "reps" : "1", 65 | "multiplier" : 1.0 66 | }] 67 | },{ 68 | "name" : "Deadlifts", 69 | "max" : 700, 70 | "workouts" : [{ 71 | "sets" : "1", 72 | "reps" : "5", 73 | "multiplier" : 0 74 | }, { 75 | "sets" : "1", 76 | "reps" : "5", 77 | "multiplier" : 0.4 78 | }, { 79 | "sets" : "1", 80 | "reps" : "5", 81 | "multiplier" : 0.6 82 | }, { 83 | "sets" : "1", 84 | "reps" : "3", 85 | "multiplier" : 0.7 86 | },{ 87 | "sets" : "1", 88 | "reps" : "1", 89 | "multiplier" : 0.8 90 | },{ 91 | "sets" : "1", 92 | "reps" : "1", 93 | "multiplier" : 0.9 94 | }, { 95 | "sets" : "1", 96 | "reps" : "1", 97 | "multiplier" : 1.0 98 | }] 99 | }] 100 | } 101 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # WarmupReps 2 | 3 | This application is a warmup sets and reps calculator for various 4 | strength training programs. You choose your working weight for each 5 | exercise in the program and the warmup sets and reps are automatically 6 | calculated, along with the weights you need to place on the bar. As 7 | you use it, it remembers preferences such as bar size, unit system, 8 | and the weights for each exercise when you come back for the next 9 | workout. 10 | 11 | ## Programs 12 | 13 | Programs are defined in JSON and placed in the programs folder. An 14 | example program: 15 | 16 | { 17 | "title" : "My Program", 18 | "exercises" : [{ 19 | "name" : "Squats", 20 | "max" : 500, 21 | "workouts" : [{ 22 | "sets" : "2", 23 | "reps" : "5", 24 | "multiplier" : 0.5 25 | }, { 26 | "sets" : "1", 27 | "reps" : "5", 28 | "multiplier" : 1.0 29 | } 30 | ] 31 | }] 32 | } 33 | 34 | Each exercise is defined with a name, a max weight, and an array of 35 | workouts that include sets, reps, and the multiplier for the working 36 | weight. For a more complete example, view starting_strength.json in the 37 | programs folder. 38 | 39 | ## Contribute 40 | 41 | * Fork the project. 42 | * Make your feature addition or bug fix. 43 | * Commit. 44 | * Send me a pull request. 45 | 46 | New programs are welcome in pull requests. Add them to the programs folder, 47 | then push them into the programs array after loading it with an Ajax call 48 | synchronously. All of the links and pages will be automatically added for the 49 | new program, and no other changes are needed. 50 | 51 | $.ajax({ 52 | url: 'programs/new_program.json', 53 | dataType: 'json', 54 | success: function(data) { 55 | warmupApp.programs.push(data); 56 | }, 57 | async: false 58 | }); 59 | 60 | ## License 61 | 62 | [GPLv3](http://www.gnu.org/licenses/gpl-3.0.html) 63 | 64 | This program is free software: you can redistribute it and/or modify 65 | it under the terms of the GNU General Public License as published by 66 | the Free Software Foundation, either version 3 of the License, or 67 | (at your option) any later version. 68 | 69 | This program is distributed in the hope that it will be useful, 70 | but WITHOUT ANY WARRANTY; without even the implied warranty of 71 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 72 | GNU General Public License for more details. 73 | 74 | You should have received a copy of the GNU General Public License 75 | along with this program. If not, see: http://www.gnu.org/licenses/ -------------------------------------------------------------------------------- /programs/greyskull_lp.json: -------------------------------------------------------------------------------- 1 | { 2 | "title" : "Greyskull LP", 3 | "exercises" : [{ 4 | "name" : "Squats", 5 | "max" : 400, 6 | "workouts" : [{ 7 | "sets" : "2", 8 | "reps" : "5", 9 | "multiplier" : 0.25 10 | },{ 11 | "sets" : "1", 12 | "reps" : "5", 13 | "multiplier" : 0.42 14 | }, { 15 | "sets" : "1", 16 | "reps" : "3", 17 | "multiplier" : 0.58 18 | }, { 19 | "sets" : "1", 20 | "reps" : "2", 21 | "multiplier" : 0.75 22 | }, { 23 | "sets" : "2", 24 | "reps" : "5", 25 | "multiplier" : 1 26 | },{ 27 | "sets" : "1", 28 | "reps" : "5+", 29 | "multiplier" : 1 30 | }] 31 | },{ 32 | "name" : "Bench", 33 | "max" : 300, 34 | "workouts" : [{ 35 | "sets" : "2", 36 | "reps" : "5", 37 | "multiplier" : 0.25 38 | },{ 39 | "sets" : "1", 40 | "reps" : "5", 41 | "multiplier" : 0.42 42 | }, { 43 | "sets" : "1", 44 | "reps" : "3", 45 | "multiplier" : 0.58 46 | }, { 47 | "sets" : "1", 48 | "reps" : "2", 49 | "multiplier" : 0.75 50 | }, { 51 | "sets" : "2", 52 | "reps" : "5", 53 | "multiplier" : 1 54 | },{ 55 | "sets" : "1", 56 | "reps" : "5+", 57 | "multiplier" : 1 58 | }] 59 | },{ 60 | "name" : "Overhead", 61 | "max" : 500, 62 | "workouts" : [{ 63 | "sets" : "2", 64 | "reps" : "5", 65 | "multiplier" : 0.25 66 | },{ 67 | "sets" : "1", 68 | "reps" : "5", 69 | "multiplier" : 0.42 70 | }, { 71 | "sets" : "1", 72 | "reps" : "3", 73 | "multiplier" : 0.58 74 | }, { 75 | "sets" : "1", 76 | "reps" : "2", 77 | "multiplier" : 0.75 78 | }, { 79 | "sets" : "2", 80 | "reps" : "5", 81 | "multiplier" : 1 82 | },{ 83 | "sets" : "1", 84 | "reps" : "5+", 85 | "multiplier" : 1 86 | }] 87 | },{ 88 | "name" : "Deadlifts", 89 | "max" : 500, 90 | "workouts" : [{ 91 | "sets" : "2", 92 | "reps" : "5", 93 | "multiplier" : 0.25 94 | },{ 95 | "sets" : "1", 96 | "reps" : "5", 97 | "multiplier" : 0.42 98 | }, { 99 | "sets" : "1", 100 | "reps" : "3", 101 | "multiplier" : 0.58 102 | }, { 103 | "sets" : "1", 104 | "reps" : "2", 105 | "multiplier" : 0.75 106 | }, { 107 | "sets" : "1", 108 | "reps" : "5+", 109 | "multiplier" : 1 110 | }] 111 | }] 112 | } 113 | -------------------------------------------------------------------------------- /programs/program_2.json: -------------------------------------------------------------------------------- 1 | { 2 | "title" : "5x5", 3 | "exercises" : [{ 4 | "name" : "Squat", 5 | "max" : 600, 6 | "workouts" : [{ 7 | "sets" : "2", 8 | "reps" : "5", 9 | "multiplier" : 0 10 | }, { 11 | "sets" : "1", 12 | "reps" : "5", 13 | "multiplier" : 0.4 14 | }, { 15 | "sets" : "1", 16 | "reps" : "3", 17 | "multiplier" : 0.6 18 | }, { 19 | "sets" : "1", 20 | "reps" : "2", 21 | "multiplier" : 0.8 22 | }, { 23 | "sets" : "5", 24 | "reps" : "5", 25 | "multiplier" : 1.0 26 | }] 27 | },{ 28 | "name" : "Bench Press", 29 | "max" : 500, 30 | "workouts": [{ 31 | "sets" : "2", 32 | "reps" : "5", 33 | "multiplier" : 0 34 | }, { 35 | "sets" : "1", 36 | "reps" : "5", 37 | "multiplier" : 0.5 38 | }, { 39 | "sets" : "1", 40 | "reps" : "3", 41 | "multiplier" : 0.7 42 | }, { 43 | "sets" : "1", 44 | "reps" : "2", 45 | "multiplier" : 0.9 46 | }, { 47 | "sets" : "5", 48 | "reps" : "5", 49 | "multiplier" : 1.0 50 | }] 51 | },{ 52 | "name" : "Deadlift", 53 | "max" : 700, 54 | "workouts" : [{ 55 | "sets" : "2", 56 | "reps" : "5", 57 | "multiplier" : 0.4 58 | }, { 59 | "sets" : "1", 60 | "reps" : "3", 61 | "multiplier" : 0.6 62 | }, { 63 | "sets" : "1", 64 | "reps" : "2", 65 | "multiplier" : 0.85 66 | }, { 67 | "sets" : "1", 68 | "reps" : "5", 69 | "multiplier" : 1.0 70 | }] 71 | },{ 72 | "name" : "Overhead Press", 73 | "max" : 400, 74 | "workouts" : [{ 75 | "sets" : "2", 76 | "reps" : "5", 77 | "multiplier" : 0 78 | }, { 79 | "sets" : "1", 80 | "reps" : "5", 81 | "multiplier" : 0.55 82 | }, { 83 | "sets" : "1", 84 | "reps" : "3", 85 | "multiplier" : 0.7 86 | }, { 87 | "sets" : "1", 88 | "reps" : "2", 89 | "multiplier" : 0.85 90 | }, { 91 | "sets" : "5", 92 | "reps" : "5", 93 | "multiplier" : 1.0 94 | }] 95 | },{ 96 | "name" : "Barbell Row", 97 | "max" : 300, 98 | "workouts": [{ 99 | "sets" : "2", 100 | "reps" : "5", 101 | "multiplier" : 0.4 102 | }, { 103 | "sets" : "1", 104 | "reps" : "3", 105 | "multiplier" : 0.7 106 | }, { 107 | "sets" : "1", 108 | "reps" : "2", 109 | "multiplier" : 0.9 110 | }, { 111 | "sets" : "5", 112 | "reps" : "5", 113 | "multiplier" : 1.0 114 | }] 115 | }] 116 | } 117 | -------------------------------------------------------------------------------- /programs/starting_strength.json: -------------------------------------------------------------------------------- 1 | { 2 | "title" : "Starting Strength", 3 | "exercises" : [{ 4 | "name" : "Squats", 5 | "max" : 600, 6 | "workouts" : [{ 7 | "sets" : "2", 8 | "reps" : "5", 9 | "multiplier" : 0 10 | }, { 11 | "sets" : "1", 12 | "reps" : "5", 13 | "multiplier" : 0.4 14 | }, { 15 | "sets" : "1", 16 | "reps" : "3", 17 | "multiplier" : 0.6 18 | }, { 19 | "sets" : "1", 20 | "reps" : "2", 21 | "multiplier" : 0.8 22 | }, { 23 | "sets" : "3", 24 | "reps" : "5", 25 | "multiplier" : 1.0 26 | }] 27 | },{ 28 | "name" : "Bench", 29 | "max" : 500, 30 | "workouts": [{ 31 | "sets" : "2", 32 | "reps" : "5", 33 | "multiplier" : 0 34 | }, { 35 | "sets" : "1", 36 | "reps" : "5", 37 | "multiplier" : 0.5 38 | }, { 39 | "sets" : "1", 40 | "reps" : "3", 41 | "multiplier" : 0.7 42 | }, { 43 | "sets" : "1", 44 | "reps" : "2", 45 | "multiplier" : 0.9 46 | }, { 47 | "sets" : "3", 48 | "reps" : "5", 49 | "multiplier" : 1.0 50 | }] 51 | },{ 52 | "name" : "Deadlifts", 53 | "max" : 700, 54 | "workouts" : [{ 55 | "sets" : "2", 56 | "reps" : "5", 57 | "multiplier" : 0.4 58 | }, { 59 | "sets" : "1", 60 | "reps" : "3", 61 | "multiplier" : 0.6 62 | }, { 63 | "sets" : "1", 64 | "reps" : "2", 65 | "multiplier" : 0.85 66 | }, { 67 | "sets" : "1", 68 | "reps" : "5", 69 | "multiplier" : 1.0 70 | }] 71 | },{ 72 | "name" : "Press", 73 | "max" : 400, 74 | "workouts" : [{ 75 | "sets" : "2", 76 | "reps" : "5", 77 | "multiplier" : 0 78 | }, { 79 | "sets" : "1", 80 | "reps" : "5", 81 | "multiplier" : 0.55 82 | }, { 83 | "sets" : "1", 84 | "reps" : "3", 85 | "multiplier" : 0.7 86 | }, { 87 | "sets" : "1", 88 | "reps" : "2", 89 | "multiplier" : 0.85 90 | }, { 91 | "sets" : "3", 92 | "reps" : "5", 93 | "multiplier" : 1.0 94 | }] 95 | },{ 96 | "name" : "Power Cleans", 97 | "max" : 500, 98 | "workouts" : [{ 99 | "sets" : "2", 100 | "reps" : "5", 101 | "multiplier" : 0 102 | }, { 103 | "sets" : "1", 104 | "reps" : "5", 105 | "multiplier" : 0.55 106 | }, { 107 | "sets" : "1", 108 | "reps" : "3", 109 | "multiplier" : 0.7 110 | }, { 111 | "sets" : "1", 112 | "reps" : "2", 113 | "multiplier" : 0.85 114 | }, { 115 | "sets" : "5", 116 | "reps" : "3", 117 | "multiplier" : 1.0 118 | }] 119 | },{ 120 | "name" : "Rows", 121 | "max" : 300, 122 | "workouts": [{ 123 | "sets" : "2", 124 | "reps" : "5", 125 | "multiplier" : 0 126 | }, { 127 | "sets" : "1", 128 | "reps" : "5", 129 | "multiplier" : 0.5 130 | }, { 131 | "sets" : "1", 132 | "reps" : "3", 133 | "multiplier" : 0.7 134 | }, { 135 | "sets" : "1", 136 | "reps" : "2", 137 | "multiplier" : 0.9 138 | }, { 139 | "sets" : "3", 140 | "reps" : "5", 141 | "multiplier" : 1.0 142 | }] 143 | }] 144 | } 145 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 | 7 |Choose a program, exercise, and then set your target weight. Your warmup sets will then be automatically 399 | calculated.
400 | 401 |Written and maintained by nmunson © 2025.
450 |
"Weight Lifting" symbol by Scott Lewis, from thenounproject.com collection.
451 | Close 452 |