What we've built, what we fixed, and what's coming next.
v103LatestJune 13, 2026
Mobile Polish · Leaderboard Fixes · Home Screen Cleanup
Mobile Assign Dialog
Position picker no longer clips on iPhone. The starter/closer/lineup/DH circles are now fully visible without scrolling on small screens — a layout issue caused by the browser's default dialog padding has been corrected.
Defense stats merged into the batting section. The separate "DEFENSE" header is gone; defensive stats now flow directly after the batting row in the same visual block, freeing up vertical space.
Flat slot strip. SP2, SP3, Closer, and DH now appear in a single horizontal row instead of grouped sections with labels. Cleaner and easier to tap.
Field fills the remaining space. The diamond field area now expands to fill all available height in the dialog instead of leaving dead white space at the bottom.
Leaderboard
ALL tab race condition fixed. Switching tabs quickly could cause a stale daily-mode fetch to overwrite the ALL view. Each fetch is now tied to the active tab so stale results are discarded.
ALL tab shows personal history. Your locally stored games from any mode or day are blended into the ALL view alongside the global leaderboard, so your own past scores always appear even before they're in the global dataset.
Home Screen
Pitch clock callout removed. The banner explaining the pitch clock rule has been removed from the home screen — the How to Play popup covers it in full.
v102June 13, 2026
Team Quality Tuning
Fewer Sub-Par Rolls
Raised the team quality floor. In Classic and Hard Ball modes, teams now require at least one player rated 86 or higher (up from 84) to appear. Rosters where the best player barely cleared the old bar won't show up anymore — rolls should feel a bit more interesting on average.
First-visit welcome popup. New players now see a brief intro that covers the three modes, calls out the Pitch Clock, and links to How to Play. A "Don't show again" checkbox lets returning players skip it.
All-Time Leaderboard Tab
"All" tab added to the leaderboard. View scores across every mode — Classic, Hard Ball, and past Daily Challenges — in a single ranked list. Filter down by mode with the existing tabs, or see the full picture at once.
MVP Mode — Coming Soon
MVP Mode is almost here. The mode is built, the legend pool is loaded, and scoring is dialed in. Final polish is underway — it will go live soon.
What to expect: Draft 12 players normally, leave one slot open, and an all-time legend fills it. Choose from six greats spanning different eras, filtered to your open position. Each legend gets a +8 boost to represent a true peak-of-career moment.
Expanded legend pool. Over 3,100 player-seasons now in the pool — coverage from 1871 forward, including every pre-1947 great and all Hall of Famers regardless of era.
162-0 Gates Rebalanced
Era normalization improved. The 1969-1993 era context was too strict, causing pre-steroid greats (Bench, Morgan, Schmidt) to rate lower than their real production deserved. Adjusted to reflect actual historical scoring norms.
Original thresholds restored. Offense 81, Rotation 82, Closer 76, Defense 64, Team score 88. The 162-0 gate is something you earn by building a genuinely elite roster, not by clearing a lowered bar.
HOF bonus increased. Hall of Famers on your roster add up to +8 to your effective team score (was +4). A roster loaded with all-time greats should produce legendary results.
Perfect Season = 100 Team Rating
If you go 162-0, your Team Rating shows 100. Previously a roster could clear every benchmark but still display 84 or 86 — a confusing mismatch. The display now aligns with the result: a perfect season is a perfect team.
v81Coming SoonJune 9, 2026
MVP Mode (in development) · Legend Pool · Pitch Clock Everywhere
MVP Mode — In Development
New mode in the works. MVP Mode lets you deliberately leave one slot open through your 12-pick draft. After your 12th pick, the draft pauses and you choose one all-time legend to complete the roster.
Choose your legend. Six players from across baseball history, filtered to your open position and spanning different eras. C left open? Greatest catchers ever. SP1 empty? All-time aces.
★ LEGEND badge marks the hero pick in the lineup and on the result screen. +8 legendary boost applied across all scoring dimensions.
Coming soon — final assets and tuning in progress. Watch this space.
v61June 12, 2026
FIP Scoring Model · Era-Adjusted OPS+ · Roster Trimming · End Screen Redesign · Duplicate Player Fix
FIP-Based Pitching Model
Fielding Independent Pitching (FIP) is now the primary pitcher signal. FIP strips out defense and luck from ERA — only strikeouts, walks, HBPs, and home runs allowed. A pitcher who had a great ERA on a great defensive team now rates based on what he actually controlled.
Per-year FIP constant — the constant is calibrated so league-average FIP = league-average ERA for every season. No era bias.
Graceful fallback — if a pitcher's FIP components are missing (older data or live API), scoring falls back to the previous ERA/WHIP/K9 model automatically.
BB% and ISO added to hitter scoring — walk rate and isolated power now factor into the offense score alongside aOPS (OBP×1.7 + SLG) and era-adjustment.
Era-Adjusted OPS+ on End Screen
OPS+ now shown on every batter's final roster card. OPS+ is (OBP/lgOBP + SLG/lgSLG − 1) × 100, so 100 = exactly league average. A 1999 hitter isn't unfairly boosted by the steroids era — his numbers are compared to his contemporaries.
ERA & FIP shown for pitchers on the final roster card, alongside innings pitched and saves (for closers).
League-average OBP and SLG computed from Lahman CSV data for every season from 1871–2025.
Roster Trimming — Starters Only
The player grid now shows only the main contributors when you're drafting — top 5 pitchers by innings pitched, top position player at each infield/DH slot by games played, and the top outfielders (1 per LF/CF/RF slot, plus extras who played 80+ games).
Backups and cup-of-coffee guys are hidden by default. Search still shows every player on the team if you type a name.
Makes picks faster and eliminates accidentally grabbing a backup when you wanted the starter.
End Screen Layout Redesign
Result hero unified — the Final Record and Team Rating are now in one dark navy scoreboard bar instead of two mismatched boxes. Eliminates the dead whitespace that appeared next to the rating number.
Score grid fixed — changed from 8-column to 6-column to match the 6 actual categories (no more empty cells).
CL card repositioned — the closer card is now pinned to column 4 (under SP3), so it doesn't orphan in the first column of an otherwise empty row.
Header logo scaled down — from 68px to 44px so the title text breathes.
Duplicate Player Bug Fixed
Same player can no longer be drafted from two different team-seasons. Barry Bonds 2003 + Barry Bonds 2004 on the same roster was possible because each season had a distinct Lahman ID. The fix extracts the player's base Lahman ID and blocks drafting the same human twice.
Hard Ball Pitch Clock
Pitch clock is now active in all three modes. Hard Ball runs at 2 minutes (120s) instead of 45 seconds — more time to think, still no mercy when time's up. How to Play updated.
SP / RP Position Enforcement
Starters can no longer be auto-drafted into the closer slot. The pitch clock auto-pick now strictly respects role — only relief pitchers fill CL automatically. Manually assigning a starter to the closer slot is still possible in a pinch, but the slot shows in amber (not gold) to flag the mismatch, and it costs 3 wins.
Teams without a relief pitcher are skipped. If the closer slot is still open, any rolled team that has no RP-eligible pitcher is automatically rerolled — you'll never land on a team that leaves the CL slot with no real option.
Trimmed pitcher list always leads with the best RP. The "starters only" roster trim now guarantees the top reliever (by saves + holds) is always visible, so the closer slot always has its natural candidate in the list.
Stat boxes removed — the OFF / PIT / DEF score boxes in the blue game bar are gone. Cleaner bar, less noise during the draft.
Position filters in the bar — ALL / C / 1B / 2B / 3B / SS / OF / DH / SP / RP filter pills now live dead-center in the blue control bar, in a single no-wrap row. Left and right icon groups shrink to their natural width so the center gets maximum space.
Re-roll button moved to team header — the re-roll icon now appears to the right of the current team name, scaled to the same height as the Bebas Neue headline. Feels intentional instead of floating in the bar.
Icon buttons enlarged — New Game, Leaders, Rules, and How to Play icons bumped from 52px to 68px. Much easier to read on a desktop monitor.
HTP button is now the logo icon — the "How to Play" text link is replaced with the HowToPlayLogo.png icon to match Rules/Leaders/New Game.
Pitch Clock + Slots Counter
Slots counter hidden on desktop — the "0 / 13 Filled" box is gone from desktop. Desktop is uncluttered; the lineup card already shows what's filled.
Slots counter on mobile only — on mobile the counter sits above the pitch clock in the fixed stack so you always know how far along you are without opening the lineup tab.
Navy / gold / paper restyle — the pitch clock panel and slots box are now styled in the site's navy background with gold border and gold "PITCH CLOCK" / "FILLED" labels, matching the nav bar aesthetic. The LED screen inside the clock stays dark for digit contrast.
Drain bar track — changed from dark gray to subtle gold to match the updated panel styling.
Desktop position — moved from 80px off the bottom to 20px, sitting closer to the corner.
Mobile sizing — pitch clock is larger (2.6rem digits), slots counter is compact (1.25rem), each sized independently instead of a blanket scale.
Pitch Clock Violation Modal
Violation image as hero — the custom umpire "PITCH LOCK VIOLATION" artwork is now the centrepiece of the modal, big and centered at the top.
Player announcement below — the auto-picked player's name, year, team, position badge, and slot assignment display beneath the image in a frosted navy card.
Full theme restyle — navy background, gold border, gold "Continue Draft →" button, italic Lora tagline ("Time expired — the ump made your pick"). Old header strip and clock emoji are gone.
Mobile Fixes
Rules dialog leaves footer visible — the How to Play dialog on mobile now stops 70px from the bottom so the bottom nav bar stays accessible while you read the rules.
Home screen logo — reduced max-height and removed the aggressive negative margin that was pulling the mode cards behind the logo on some desktop viewports.
v45June 11, 2026
Manager Slot Removed · 13-Slot Roster · Mobile Footer Fix · Leaderboard on Close
Roster — Manager Removed
13 slots, no manager — the Manager slot has been removed from the game. The roster is now 9 hitters + 3 starting pitchers + 1 closer. Every roll you make goes toward a player who directly affects the game on the field.
New scoring weights — with manager gone, the weight it carried was redistributed: Offense 52%, Pitching 33%, Defense 15%. The relative importance of offense and pitching is unchanged; defense and balance still reward complete rosters.
Daily challenges regenerated — all remaining daily files (June 8–November 3) rebuilt under the 13-roll, 13-slot constraint. Every day still has a verified 162-0 path.
UI Fixes
Mobile home footer visible — the leaderboard and past challenges links in the home screen footer are now correctly visible on short phones. They were being clipped by the container on some screen heights.
Result screen closes to leaderboard — tapping the ✕ button on the result screen now takes you directly to the leaderboard so you can immediately see where your score landed. The New Game button still goes straight back to the home screen.
v44June 10, 2026
Daily Challenge Tuning · Per-Day Leaderboard · Challenges Through November
Daily Challenge — Difficulty Tuning
Tighter 162-0 thresholds — raised across all five scoring categories (offense, rotation, closer, defense, manager) and the overall score gate. Previously, almost any combination of players from a good pool qualified; now you must make genuinely correct picks.
Contender team injection — three of each day's 14 rolls are now "good-but-not-elite" historical pennant contenders (1967 Red Sox, 1969 Mets, 1984 Tigers, etc.). These teams have real stars but aren't all-time powerhouses, so every pick matters — the credit/deficit system means a near-threshold choice can still work if the rest of your roster compensates.
14 rolls, 14 slots — no skips — the challenge was redesigned to match: every roll must contribute a player to your roster. There is no throwaway pick.
Challenges regenerated through November 3 — all 147 remaining daily challenges rebuilt under the new design. Each day has a verified 162-0 path.
Leaderboard — Daily Challenge
Per-day leaderboard — the Daily tab on the leaderboard page now shows only today's challenge entries, not every daily score ever submitted mixed together.
Day navigation — use the ← → arrows to browse any previous day's leaderboard. Each day shows its challenge number and date.
Accurate rank on submission — your rank after completing a Daily Challenge is now calculated against other players on the same day, not the all-time global pool.
v43June 9, 2026
Mobile Nav Icons · New Game in Footer · Performance
Mobile Navigation
Custom nav icons — the mobile bottom bar now uses custom artwork for each button instead of generic emoji. Draft, Lineup, New Game, Rules, and Leaderboard each have their own icon.
New Game in the nav bar — the New Game button moved from a floating red pill button into the center of the bottom navigation bar, making it permanently visible and easier to reach. Re-roll remains the only floating button.
Larger touch targets — the nav bar is taller and icon sizes are bigger so buttons are easy to tap. New Game is slightly larger than the others to signal it as the primary action.
Performance
Browser caching — static assets (JS, CSS, images) now carry long-lived cache headers. Returning visitors load the game significantly faster on repeat visits.
Layout shift fix — all logo images now declare their dimensions up front, preventing the page from jumping as images load.
Skip the spin — a "View Roster →" button now appears the instant your team's data is loaded. Click it to skip the animation and jump straight to drafting. The timer still auto-advances if you don't click.
Same player, different seasons — you can now draft the same player from multiple seasons on the same team. Koufax 1963 as SP1 and Koufax 1965 as SP2 is a valid build if both seasons appear in your rolls. Each season counts as its own pick.
Leaderboard
All / Daily / Classic tabs — filter the leaderboard by mode. The Daily tab shows challenge entries only, with a "Challenge #N" column so you can see exactly which day each score came from.
Daily Challenge
Rotating answers through October — all 145 daily challenges (June 8 – Oct 30) were regenerated with the rotating system. Every day has a distinct set of answer teams drawn from a different era and player mix.
Past Challenges page fixed — the challenge history page was blocked by the server's security policy; it now loads correctly and shows the optimal roster for each completed day.
Compensation mechanic — elite performance above a threshold now creates a credit that can offset a slight weakness elsewhere. An all-time offense or dominant pitching staff can carry a gap in another area, as long as no single category is more than 12 points below its mark.
Hall of Famers count — HOF-caliber players now contribute directly to the compensation pool, not just the effectiveScore floor. More Hall of Famers on your roster means more flexibility to overcome weak spots.
More paths to perfection — the all-offense dream team, the pitching-dominant squad, and the balanced contender are all now viable routes to 162-0 given the right combination of stars.
Daily Challenge
17 rolls per day — reduced from 20, right-sized for the 14-slot roster. You have 3 rolls to pass on or sacrifice; make them count.
Rotating answer each day — each daily challenge now uses a different set of historical teams as the 162-0 solution, cycling through 20 distinct paths. No two days have the same answer.
UTIL slot removed — the game now has 14 roster slots. The Designated Hitter slot already served the same purpose (any hitter, flexible eligibility), making UTIL redundant and confusing for new players. The DH is real baseball; UTIL is fantasy-game jargon.
Team score weights rebalanced — with utility removed, its 7% weight is redistributed proportionally: Offense 43% (was 40%), Pitching 32% (was 30%), Defense 21% (was 20%), Manager 4% (was 3%). The relative emphasis on each category stays the same.
Score Breakdown grid updated — now shows five categories instead of six. Offense, Rotation, Defense, Closer, and Manager with accurate percentage weights.
v36June 8, 2026
Win Formula Overhaul · Hall of Fame Scoring · 162-0 Calibration
Scoring
Win formula completely retuned — teams with Hall of Famers were dramatically underscored (a roster with Bench, McCovey, Brooks Robinson, and Seaver was maxing at 104 wins). The formula now rewards great rosters appropriately: the same caliber team now earns 125–135 wins. The old formula was too flat at the top end; the new one steepens the curve so elite rosters genuinely separate from good ones.
162-0 benchmarks lowered — thresholds were mathematically too tight for real HOF rosters to clear. Offense and rotation minimums adjusted to reflect what the best actual seasons produce on our rating scale.
HOF bonus increased — each Hall of Fame–caliber player on your roster now contributes 0.75 pts (up from 0.5) toward the 162-0 effective score, capped at 6 pts (up from 4). A roster stacked with genuine all-timers has a real path to 162-0.
Depth bonus replaces elite bonus — the “no-weakness” bonus (up to +5 wins for having no weak categories) now fires at teamScore ≥ 58 instead of 86, rewarding well-balanced rosters across the competitive range rather than only theoretical perfection.
Win tier labels updated — thresholds realigned to the new win scale: All-time juggernaut (145+), World Series favorite (130+), Playoff lock (115+), Wild Card contender (100+).
v35June 8, 2026
Mobile Player Cards · DH/UTIL Slot Fix · End-Game Polish
Bug Fixes
DH & UTIL slot lockout resolved — in rare cases, leaving DH and UTIL as the last two slots would cause them to appear unselectable in the assign dialog. Root cause was a player visibility check that could let ineligible player types into the draft list. Replaced with a direct slot-eligibility check that is fully reliable regardless of draft order.
Design & UI
Mobile player card redesign — year and team now shown below the player's name, filling the previously empty right side of each card. Stats flow horizontally instead of stacking in three tiny lines, with bigger text throughout (.88rem name, .72rem stats).
End-game screen overhaul — Score Breakdown in a card grid, debrief cards with large score number to the right, result hero simplified to two boxes (Final Record + Team Rating with grade color), logo bigger, X button improved, click-outside-to-close on all modals, award badges on final roster rows, mobile layout compacted to two columns.
Past Challenges archive — Best Roster shown as an expandable button; Replay button added to each card header row.
Leaderboard — shows top 25 by default with Show More button to load additional entries 25 at a time.
Classic mode logo moved to center of landing page; Daily moved left.
v34June 8, 2026
Classic Re-roll · Smarter Roll Quality · Lineup Clarity
New Features
Classic Re-roll button — skip one team per game in Classic mode. Only available in Classic (not Daily or Hard Ball), and only once per draft.
Roll quality gate — in Classic mode, each rolled team must include at least one award winner (MVP, Cy Young, Gold Glove, etc.) or a player rated 84 or above. Weaker teams are automatically skipped to keep every pick meaningful.
Global rank on leaderboard submission — after submitting your score, you now see your rank among all entries for that mode.
Design & UI
Lineup panel sections reorganized — clearer separation between position groups.
Relief Pitcher slot gets its own styled section in the lineup.
Past Challenges page improved — play button added to each entry so you can jump straight into a past challenge's rolls.
v32June 8, 2026
Past Challenges Archive · Daily Button Polish
New Features
Past Challenges page (/past-challenges/) — every expired Daily Challenge listed with date, challenge number, and a collapsible "Best Possible Roster" for the day's pool. New files include the optimal picks; older files show a leaderboard link instead.
Daily JSON files now store a bestRoster field — the optimal picks for that day's pool computed at generation time.
Fixes & Polish
Daily button label now shows the challenge number: Daily #2 instead of just "Daily."
Daily button no longer grays out after playing — the green label is enough to show you've been here.
Added Past Challenges and Leaderboard links to home screen footer (both desktop and mobile).
v31June 7–8, 2026
Post-Game Debrief Overhaul · How to Play Rewrite
Post-Game Screen
Debrief cards — Strength, Weakness, and Next Build cards now show your actual category scores with letter grades (A+ through F) and color-coded badges.
Score Breakdown table — replaces the generic formula card with a clean grid showing your score in each category (Offense 40%, Rotation 22%, Defense 20%, Closer 8%, Utility 5%, Manager 5%) with weighted contribution.
Balance bonuses, elite bonuses, and positional penalties now appear as footnotes on the breakdown.
How to Play
Complete rewrite of the How to Play dialog — now covers the current draft modal layout, real fielding stats, score weights, grade thresholds, and all three game modes.
Restored direct "real MLB franchise" and "real MLB team" language throughout game content.
Privacy
Removed specific league name references from trademark section (legal protection).
Daily Challenge section updated to reflect unlimited replays and best-score tracking (no more one-attempt lockout language).
v30June 7, 2026
Draft Modal Polish · Diamond Fix · DEF Fallback
Draft Modal
4-column batting grid — AVG, OBP, SLG, OPS, HR, RBI, SB now lay out in two compact rows instead of three. The defense section is always visible without scrolling.
Diamond no longer cut off — the field is capped at a max height on desktop so the outfield wall strip is never clipped.
DEF RTG fallback — players without Lahman fielding data now show a position-baseline DEF rating instead of a blank section.
v23June 2026
Mobile Result Screen Redesign
Mobile result screen reordered: final record → 2-column roster → score breakdown. Easier to screenshot and share.
Share + New Game buttons consolidated on one row.
Position color-coded roster rows (C = red, SS = blue, OF = green, SP = amber, etc.).
v22June 2026
Daily Challenge Launch · Leaderboard API Update
Daily Challenge
Daily Challenge launched — Challenge #1 began June 7, 2026. The same 20 team rolls, worldwide, every day.
Best-score tracking via browser local storage — only your top result for the day posts to the leaderboard.
One-attempt lockout later removed — you can now replay as many times as you want.
Leaderboard
Roster JSON now stored per leaderboard entry and expandable on click.
Leaderboard API updated to handle daily best-score upserts.
v21June 2026
Leaderboard Redesign · Roster Expansion
Leaderboard page redesigned — dark navy hero card, tab-underline mode filters, compact layout matching the main game aesthetic.
Click any leaderboard entry to expand and see that player's full drafted roster.
Header score tiles simplified: only OFF, PIT, DEF shown (UTIL and MGR computed behind the scenes).
Position-weighted defense — C/SS/CF carry the highest defensive weight (28%); 1B and DH the lowest. Your team's defensive profile depends on where your best fielders play.
Defense weight in the team score raised from 10% to 20%.
Elite team defense at premium positions adds a small win bonus (up to +3 wins).
Player cards now show a green row of real fielding stats: FLD%, AST, PO, E, DP — and CS%/PB for catchers.
Draft modal shows position-specific fielding section with real numbers.
Data
Fielding data from the Lahman Baseball Database integrated for all 3,614 season files (1871–2025).
v1–v19FoundationEarly 2026
Game Engine · All Historical Data · Rebrand
A Perfect Draft rebrand — renamed from the original prototype; new logo, domain (aperfectdraft.com), and brand identity.
3,614 season JSON files generated from the Lahman Baseball Database, covering every real MLB team from 1871 to 2025 with hitting and pitching stats.
Batting stat display — player list shows AVG / OBP / SLG / OPS on one row, HR · RBI · SB on a second.
Global leaderboard — optional score submission; stores first name, last initial, win-loss record, and full drafted roster.
Three game modes launched: Classic (random 162-game gauntlet), Hard Ball (more challenging odds), and Daily Challenge (shared rolls, worldwide).
Auto name prompt — leaderboard submission dialog fires automatically after the result screen opens.
Score engine built around 6 weighted categories: Offense (40%), Rotation (22%), Defense (20%), Closer (8%), Utility (5%), Manager (5%).
What’s Coming
Phase 3
Yesterday's Challenge Answer
Once a Daily Challenge expires, reveal the optimal roster from that day's pool — the picks that would have gotten you closest to 162-0.
Phase 3
Era Range Mode
Filter Classic rolls by custom year range, preset era (Dead Ball, Integration Era, Steroid Era), or "last 10 years" — without changing Daily Challenge fairness.
Phase 3
Pitch Clock Mode
Timed draft — a countdown clock per pick. Forces instinct over analysis. Will you still chase 162-0 under pressure?
Phase 3
Shareable Run Permalink
Save and share your complete draft run — every pick, every roll, every score — with a permanent link.
Phase 4
Negro Leagues
Historical Negro Leagues player data with full historical context — expanding the pool of all-time greats to include legends who were excluded from MLB.
Phase 4
More Sports
Hockey 82-0, Basketball 82-0, Football perfect season, Soccer — all under the A Perfect Draft brand. Same concept, different rosters.