Dugout Value
Baseball research on pitching, hitting, and projections, plus tools for comparing players, contracts, and trade value.
Build a printable, week-by-week marathon or half-marathon plan from your current fitness. Free, private, no sign-up.
Sports & fitnessHTML · PythonGitHub @evansmith1377OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Printable, week-numbered marathon training calendar. One self-contained HTML page: readiness-based plan, optional pace guidance, US/metric, landscape or portrait print. No dependencies, no tracking.
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗A free, printable training planner for the marathon and half marathon. Enter your current mileage and how you like to train, and it builds a week-by-week, readiness-based plan you can print, export to your calendar, and tick off as you go.
Live site: https://evansmith1377.github.io/physical-training-planner/
The page is a single index.html with no build step, no dependencies, and no network requests.
.ics file with every workout as an all-day event, for Google Calendar, Apple Calendar or Outlook. Re-importing the same plan doesn't create duplicates; if you change the plan, delete the old events first.All distances are calculated in miles and converted for display.
| Rule | Value |
|---|---|
| Weekly distance inputs | Usual 1–99 mi (2–160 km); peak 10–99 mi (16–160 km) |
| Low volume | Under 15 mi (24 km) a week: run/walk and no tempo or race-effort work. When a week can't give every run day 2 mi, the spare run days become brisk walks |
| Phase 1 (Stabilize) | 3 weeks at your current distance and long run (long run up to 55% of the week) |
| Weekly build | +8% per build week (min 1.5 mi, max 3 mi), up to your peak. From a tiny base (under 6 mi) the step is at most 25% of the week |
| Long run | +1 mi per build week at most and ≤ 50% of the week. Once at the peak, it alternates between the peak and about 85% of it. Capped at 20 mi (marathon), 14 mi (half), 16 mi (durability) |
| Cutback weeks | About 25% less distance and about 28% shorter long run, every 3rd or 4th week |
| Race-specific block | Marathon: up to 16 weeks including taper (warning below 14). Half: up to 12 (warning below 10) |
| Taper | Marathon, 3 weeks: 80% → 65% of peak → race week (2 weeks: 72% → race week). Half, 2 weeks: 75% → race week (1 week: race week only) |
| Quality | Strides in Phase 1 and cutbacks; progressive tempo in Phase 2; alternating tempo and race-effort sessions in Phase 3 |
| Minimum length | Marathon 10 weeks, half 8, durability 6 |
When inputs conflict, the page shows a warning instead of silently adjusting. Examples: a plan too short or too long, a rest day on the long-run day, a peak below your current mileage, weekday runs longer than the long run (high volume on few days), a taper that doesn't fit the goal, out-of-range values from a shared link, a race date that has passed, or a projected base that misses the readiness gate.
Paces use the Daniels/Gilbert race-equivalency equations: easy covers about 62–70% of aerobic capacity and tempo about 88%. The race-effort range is the predicted pace plus a buffer of 15 s/mi for the marathon or 6 s/mi for the half. These formulas tend to be optimistic for first marathons, and the page says so.
The site needs nothing to run. The tests use Python (CI runs 3.14; 3.12 or newer works locally), pytest and Playwright (with axe-core for accessibility):
pip install -r requirements-dev.txt
python -m playwright install chromium
pytest -q
The suite serves the page over local HTTP, so the Content Security Policy applies, and fails on any console error or warning, and on any Python warning. It covers layout from 320 to 1280 px, units, shared links (including hostile ones), each goal, dates and calendar export, checkmarks, print sizes, plan invariants across many settings, and serious accessibility violations.
| Script | Purpose |
|---|---|
python scripts/csp_hash.py | Update the CSP hash after editing the inline <script> (--check is used in CI) |
python scripts/screenshots.py | Regenerate assets/og-image.png and the README screenshots |
CI and deploy: every pull request runs the tests (.github/workflows/ci.yml). Each merge to main runs them again and deploys index.html and assets/ to GitHub Pages (.github/workflows/deploy.yml). Actions are pinned to commit SHAs, and Dependabot proposes one grouped update PR per month for the actions and one for the test dependencies, skipping releases less than a week old. One-time setup: Settings → Pages → Build and deployment → Source: GitHub Actions.
Branch protection: .github/rulesets/main.json is a repository ruleset for main: changes land only through a squash-merged pull request with the test check passing on an up-to-date branch and all review threads resolved, and the branch can't be force-pushed or deleted. GitHub doesn't apply it automatically. Import it once under Settings → Rules → Rulesets → New ruleset → Import a ruleset.
To host the page elsewhere, copy index.html and the assets/ folder to any static host. If the address changes, update the canonical and og: URLs in index.html.
See CONTRIBUTING.md to propose changes, and CLAUDE.md for the code map and conventions.
Current versions of Chrome, Edge, Firefox, and Safari. The ⓘ info bubbles use the native Popover API, with a script fallback for older browsers.
General fitness guidance only. This is not medical advice, and it does not replace an individualized plan from a coach, clinician, or sports dietitian.
Released into the public domain under the Unlicense.