25.

Games automated/season


100%.

Statistical accuracy


>1200.

Individual metrics


>60.

Happy players

The challenge

Manual stats entry from physical game sheets created data silos and standings delays.

The league’s stat-tracking system had no system at all. Statistics lived in a handwritten scorebook, recorded by whoever wasn’t currently up at bat. There was no standardization: different people kept the book in different ways, abbreviations varied, and some stats went recorded while others were forgotten. The result was a nightmare of disputes and confusion.

Without centralized, standardized data, the league was flying blind. No one could quickly answer basic questions: Who’s actually having the best statistical season? What are the current standings? What’s the winning percentage for each team? Arguments erupted regularly over standings calculations and tiebreaker logic—claims like “we’re in first place” weren’t backed by anything except whoever kept the book last weekend. Opposing coaches would sometimes submit their own score reports, which contradicted the league’s records. It was a mess.

Beyond the disputes, there was no ability to derive insights or celebrate accomplishments. Individual player stats weren’t tracked, so it was impossible to identify standout performers or run season awards. The league was essentially running on honor system and tribal knowledge, with no single source of truth. As the league grew more competitive, this approach was becoming untenable—the organization needed real visibility.

The Build

Custom WordPress with game/player custom post types that auto-generates standings, leaders, and live stats from a single entry point.

The solution leverages Claude’s vision API to automate stat entry itself. Each week, photos of scorebook pages are uploaded and automatically converted into structured CSV data using Claude API—extracting game scores, individual at-bats, hits, runs, and all recorded statistics with high accuracy. This eliminates manual data entry errors and the reliance on whoever remembered to transcribe the book.

Those CSV records feed into a custom WordPress system where advanced statistics auto-calculate: batting averages, slugging percentages, on-base percentages, team win percentages, tiebreaker logic. The standings are auto-generated and updated based on game entry—no manual sorting or calculation needed. The dashboard displays real-time standings, individual player stats, season leaders, and trend insights. Thousands of data points are processed and updated each week in under five minutes of actual human data entry (uploading photos).

The league now has a single source of truth that’s auditable (the photos), standardized, and instantly queryable. Standings disputes evaporate because everyone sees the same numbers. The organization can celebrate accomplishments with data-backed season awards. And the burden on the volunteer keeping stats has dropped from hours of manual transcription to a quick photo upload. The system scales as the league grows.

Stack

What we used.

  • WordPress
  • ACF Pro
  • WP Engine
  • Vanilla JS

Up Next

More custom systems.