Pitch Tracking
| Feature | Little League | Minors | Majors |
|---|---|---|---|
| Ball / Strike counterTally dots in pitch-first pane | ✕ Off Goes straight to outcomes |
✓ On B / S / F rows |
✓ On B / S / F rows |
| Foul ball counterUp to 8 slots + accumulator | ✕ Off | ✓ On 2 rows × 4 = 8 slots; slot 8 = running count |
✓ On Same as Minors |
| Foul ball locatorFair/foul field tap | ✕ Off | ✓ On Taps foul/fair zones after each foul |
✓ On |
| 5×5 Pitch zone gridStrike zone + shadow ring | ✕ Off | ✕ Off | ✓ On Inner 3×3 = MLB strike zone; outer 16 = chase zone; zones 0–24 |
| Auto walk (4 balls)BB committed automatically | ✕ Off | ✓ On | ✓ On |
| Strikeout chooser (K/Kc)Appears at 3 strikes | ✕ Off | ✓ On K, Kc, + KPCV (clock violation) |
✓ On K, Kc, + KPCV |
| PlayPicker entry pointWhat shows first on open | Outcome picker immediately | Pitch tracker + "⚾ Record Play →" button | Pitch tracker + "⚾ Record Play →" button |
| Live runner diamondBase occupancy in pitch pane | ✕ Off | ✓ On Yellow bases with jersey #s; 120×120 |
✓ On Same as Minors |
Outcomes Available
| Group | Little League | Minors | Majors |
|---|---|---|---|
| Reached Base |
1BSingle
2BDouble
3BTriple
HRHome Run
BBWalk
IBBIntent. Walk
HBPHit By Pitch
|
1BSingle
2BDouble
3BTriple
HRHome Run
BBWalk
IBBIntent. Walk
HBPHit By Pitch
PCVPitcher Clock
|
1BSingle
2BDouble
3BTriple
HRHome Run
BBWalk
IBBIntent. Walk
HBPHit By Pitch
PCVPitcher Clock
|
| Strikeout |
KSwinging
KcCalled
|
KSwinging
KcCalled
K⏰Batter Clock
|
KSwinging
KcCalled
K⏰Batter Clock
|
| Out in Play |
LDLine Drive
FBFly Ball
EError
FCFielder's Ch.
SACSacrifice
|
LDLine Drive
FBFly Ball
EError
FCFielder's Ch.
SACSacrifice
|
GBGround Ball
GDPDouble Play
LDLine Drive
FBFly Ball
SFSac Fly
SHSac Bunt
EError (pos.)
FCFielder's Ch.
|
| Miscellaneous | None | None |
BLKBalk
CICatcher Int.
|
Minors / Majors only PCV, KPCV — pitch clock violations
Majors only GB, GDP, SF, SH, BLK, CI; position-picker E and FC replace generic versions
Field Picker & Spray Chart
| Feature | Little League | Minors | Majors |
|---|---|---|---|
| Fielder sequence pickerTap positions to build notation | ✕ Off Outcomes commit immediately |
✓ On e.g. GB → tap 6, 3 → "GB63" |
✓ On Same; position-picker for E and FC |
| Hit location tapBall-in-play landing zone | ✕ Off | ✓ On Tap field zone; location stored |
✓ On Same |
| Spray chart overlay in ViewCardMini field diagram on scored cell | ✕ Off | ✕ Off | ✓ On 65% opacity field diagram; line for infield hits, arc for outfield |
| GDP phase lockPhase 1 fielders dimmed in phase 2 | ✕ Off | ✕ Off | ✓ On Grounded into double play 2-phase picker |
Runner Events (Mid-Inning)
| Event | Little League | Minors | Majors |
|---|---|---|---|
| Runner Out eventsCS, PO, INT, RD |
CS ✗Caught Stealing
PO ✗Pickoff
INT ✗Interference
RD ✗Rundown
RD includes optional position-sequence picker (e.g. 4-5-4)
|
Same as Little League | Same as Little League |
| Runner Advance eventsSB, WP, PB, OBS |
SB ✓Stolen Base
WPWild Pitch
PBPassed Ball
OBSObstruction
|
Same as Little League | Same as Little League |
| Balk | ✕ Off | ✕ Off | ✓ On Advances every runner +1 instantly |
| Runner Advance Panel SB togglePer-runner stolen base flag on out plays | ✓ On | ✓ On | ✓ On |
| Rundown sequence pickerIn RunnerAdvancePanel when OUT toggled | ✓ On Optional; 9-button position pad |
✓ On | ✓ On |
Result Card Animation (ScorecardCell)
| Face | Little League | Minors | Majors |
|---|---|---|---|
| Face A — Batter pathAnimated base path for batter | ✓ Shown Exits directly to Face C (runner list) |
✓ Shown Exits to first runner face (B1) |
✓ Shown Exits to first runner face (B1) |
| Runner faces (B1..BN)One face per runner who moved | ✕ Skipped Goes straight from A → C |
✓ Shown Dashed ghost path (marching-ant animation); 3200ms per face |
✓ Shown Solid animated path line; 1400ms per face |
| Face C — Runner name list | ✓ Shown | ✓ Shown | ✓ Shown |
| Home plate indicatorOn scorer in runner list | 🏠 emoji | Pentagon SVG (HomePlateIcon) |
Pentagon SVG (HomePlateIcon) |
| Total hang timeBefore card shrinks into grid | 3200ms (no runners) 5500ms (with runners) |
3200ms (no runners) 5000ms + (N × 3200ms) |
3200ms (no runners) 5000ms + (N × 1400ms) |
| First-time runner path hint bubble"Runner on the move! / dashes trace the path" | ✕ | ✓ Shows once (localStorage key pm_runnerPathHint), 2400ms visible |
✕ |
| 1-2-3 inning banner | ✓ "🔥 1-2-3 INNING 🔥" on Face C when 3rd out + no runners + prior 2 ABs also 0-base outs |
✓ | ✓ |
Scorecard Output (ViewCard)
| Feature | Little League | Minors | Majors |
|---|---|---|---|
| Spray chart on hit cellsMini field overlay on scored cell | ✕ | ✕ | ✓ 65% opacity field diagram; line vs. arc heuristic based on hit depth |
| Runner advance labelsJersey # labels on base paths | ✓ | ✓ | ✓ Rendered in separate top-layer SVG above spray chart so labels aren't dimmed |
| Pitcher log section | ✓ | ✓ | ✓ Name + # + per-pitcher stats; max 9 rows in batting grid |
| Pitch location mini-chartPer-PA 5×5 zone chart | ✕ | ✕ | Planned pitchLog data stored; ViewCard rendering not yet built |
Labels & UX
| Feature | Little League | Minors | Majors |
|---|---|---|---|
| Outcome button label styleBig label on each outcome button | Abbreviation ("1B", "GB", "CS") |
Abbreviation + spelled-out subtitle Revisit Should show full name as primary label |
Abbreviation + spelled-out subtitle Intended: abbreviation-first for experienced scorekeepers |
| Runner event button styleCS, PO, SB etc. | Abbreviation top + full name below ("CS ✗" / "Caught Stealing") |
Same as Little League currently Revisit Should be full name only |
Abbreviation-first (current state) |
| ⚾ pending-pitch indicatorIcon on tombstone cells with saved draft pitch data | ✕ Off No pitch tracking → never has draft pitch data |
✓ On Shown when B/S/F recorded but play not yet committed |
✓ On |
| ⚾ baseball icon on scored cellsVisual "this cell has data" marker | ✓ | ✓ | ✓ top-right corner, opacity-40 |
| Team color tombstone themingEmpty cell tinted by team color | ✓ | ✓ | ✓ |
| Infield-only field cropRunnerAdvancePanel + RunnerEventPanel | ✓ | ✓ | ✓ viewBox "0 55 300 225"; outfield cropped |
Items Flagged for Revisit
⚠ Proposed Change — Tier-Aware Labels
Minors should show full spelled-out names as the
primary button label (not abbreviations). Majors keeps abbreviations —
experienced scorekeepers recognize them. Little League already benefits
from the spelled-out subtitle but the big label is still the
abbreviation.
Scope: All in
PlayPicker.jsx. Add FULL_LABEL map + labelFor(key, tier) helper. Thread tier into OutcomeBtn, RunnerEventPanel, RunnerAdvancePanel, StrikeoutChooser. Two-line layout (big abbrev + subtitle) collapses to one line for Minors since the full name IS the label.
Pitch Location in ViewCard —
pitchLog
data (zones 0–24) is stored on every at-bat for Majors. A mini 5×5 zone
chart per PA has not yet been rendered in the ViewCard scorecard. Inner
3×3 = strike zone, outer ring = chase zone. Medium effort.
Pitcher Pitch Counter — Running total pitches per pitcher (Minors/Majors). Accumulate across innings, surface in ViewCard pitcher log section.