⚾ PLAYMAKER

Feature planning reference for three distinct user experiences. The tier structure reflects the progression from teaching tool to full pro workflow -- defining what each tier delivers, aligning scope, and grounding development decisions in clear documentation.

Little League
Minors
Majors

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 ViewCardpitchLog 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.