Skip to content

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

63 Commits

Folders and files

Repository files navigation

Pitcher Workload Tracker

Small, local-first tracker for baseball pitchers ages 15-18. Log an outing, choose an age group, and get a quick answer about whether the minimum rest requirement is met.

Live app

https://sujay709.github.io/pitcher-tracker/

Screenshots

The screenshots below are phone-sized captures from the app.

Green status

Red status

History

Run it locally

This is a static site, but it uses ES modules and fetch, so open it through a local HTTP server rather than double-clicking player.html.

python3 -m http.server 8000

Then open http://localhost:8000.

Install and export

On a supported phone browser, use “Add to Home Screen” to install the tracker. The app includes a manifest and icons, but deliberately does not use a service worker or offline cache.

The installed iPhone home-screen app has storage separate from Safari. Outings logged in Safari will not appear in the installed app, so pick one place to use for tracking. The app follows the device light/dark preference automatically.

Use Export data below the history to download a JSON backup of the outings and their IDs. The export is wrapped as a versioned object (version: 1) so future schema changes can be handled safely. Use Import JSON to restore a backup; imports also accept older bare-array exports. Invalid rows and outings whose IDs already exist are skipped and summarized after import.

For a backup round trip, export the data, clear this site's storage, then use Import JSON to restore it. Confirm that history, status, and weekly totals match the original. The import rejects corrupted, empty, non-JSON, and files larger than 1 MB.

Send an update to your coach

Enter a display name (a first name plus last initial is suggested) and your team code in Send today's update, then tap Create update link. Copy the link or send it from your device. The coach opens the link, reviews the update, and taps Add to roster. The link opens coach.html and stores the encoded snapshot after #; the coach page decodes it without sending anything back to this app.

The display name, team code, and a randomly generated player ID are stored locally. The player ID is created once so later snapshots identify the same player rather than creating a duplicate. Sharing is never automatic. A snapshot includes arm health information, so share it only with your coach or team chat and get a parent or coach okay according to your team’s rules. The team code is only a match check, not authentication. Snapshot data is stored in the URL hash fragment, not the query string, so it is not sent in normal HTTP requests or server logs.

The coach page keeps a local roster, grouped by readiness and arm concerns. It also has a lineup planner for a selected date. Player cards show the snapshot age, so older updates are easy to spot; no roster data leaves the coach’s browser.

How the rest logic works

The app groups outings by date and only counts:

  • Games
  • Live BP
  • Bullpens with effort 6 or higher

For each day that counts, it uses the pitch-count rest bands for the selected age group. The latest resulting availability date wins. A pitcher is marked green when that date has passed, yellow when it is within two days, and red otherwise. Yellow is an app reminder, not a Pitch Smart category. The weekly total uses the same “counts toward rest” rule and covers today plus the previous six days. The app adds one extra rest day for effort 9 or 10; that is an app rule, not a Pitch Smart rule. Catch and long toss do not add rest in this app. The result is not medical clearance.

The pitch-count bands come from Pitch Smart’s published pitch-count guidelines. I checked the source on 2026-10-09; the copy used by the app is in data/guidelines.json.

Limitations

  • Outings and the selected age group live in this browser’s localStorage. They are per device and per browser, so a phone and a laptop do not share data.
  • Browsers can clear site storage. Safari/WebKit treats website storage as best-effort and documents eviction when an origin has not had user interaction for a while, as well as eviction under storage pressure. Safari private browsing is ephemeral too. A long gap or private browsing session can therefore wipe the history. See WebKit’s storage policy and tracking-prevention notes.
  • Exported backups are not encrypted by this app. Treat them like any other personal health-related record.
  • This is guidance based on published recommendations, not medical advice.
  • Shared snapshots include the raw outings through the snapshot date and are recomputed using the coach device's current date. Snapshots older than two days are shown as needing an update. A snapshot schema version rejects old formats rather than guessing how to read them.

Disclaimer

This tool is not medical advice. A coach, parent, athlete, or clinician should use judgment and the pitcher’s actual condition, not this page alone, when deciding whether to throw.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages