Invicto
Build a 12-slot World Baseball Classic roster across six editions, then try to finish a seven-game tournament undefeated.

Live at invictobaseball.com. The public repository includes the Cloudflare Worker and D1 configuration for daily stats.
The idea
Invicto turns the World Baseball Classic into a seven-game perfect-run challenge. You fill 12 lineup slots from country-and-edition rolls across the six tournaments, then try to finish 7-0.
What I built
The roster pipeline fetches and caches Wikipedia roster pages, then joins players against the SABR Lahman Baseball Database. It validates team sizes, positions, duplicate IDs, draftability, curation entries, and selected well-known players. The point is to make assumptions and checks visible before imperfect public data becomes game content.
The tournament engine rates 12-slot rosters across hitting and pitching categories, using a soft minimum so one weak area limits the result. A 20,000-run Monte Carlo test keeps an elite reference lineup’s 7-0 rate between 2% and 5%. The game ships in Spanish, English, Japanese, and Korean, with structural parity tests. Anonymous daily aggregates use a random client ID and Cloudflare D1, with no account requirement.
The hard parts
01
Working with imperfect public data
Roster tables, player identities, positions, and historical statistics do not arrive in one clean format. The pipeline makes matching rules, fallbacks, and validation failures part of the product process.
02
Making a perfect run meaningful
A strong roster should feel strong without making the tournament automatic. The rating model and calibration test keep weak positions consequential and an undefeated run uncommon.
03
Shared context without accounts
Daily results can make a solo game feel connected without a profile system. A client-generated identifier deduplicates submissions, and the game remains playable if the stats service is unavailable.
What’s next
Refresh roster data for the next Classic and expand the result writing that gives each tournament its voice.