🎯 Prospect Scouting Dashboard

Advanced analytics, level-by-level stats, performance trends & scouting insights

v5.4.3 - Cap Planning

☁️ Cloud Sync: Connecting... 📋 Roster: Not Loaded 📝 Notes: 0 players 👁️ Watchlist: 0 players
🔬

No Roster Loaded

Upload your Fantrax CSV to start advanced prospect analysis

🔬 Research Any Player

Look up any player in the MLB database - perfect for waiver wire research and trade targets

👁️ Watchlist

Track players you're interested in for trades, waiver pickups, or scouting. Add players from the Research tab.

Quick Add

Type a player name to add to your watchlist

👁️

No Players on Watchlist

Add players from the Research tab or type names above

🏆 Top Prospects

🏆

Top Prospects

FanGraphs "The Board" rankings embedded - select 2026 to view

Young & Elite Prospects

High-FV prospects (55+) under 22 years old - Auto-loading...

💵 League Financial Dashboard

Real-time salary cap and contract data for all MBL teams, synced from Google Sheets

📊 Status: Loading...
💰 Salary Cap
$244M
📊 Avg Payroll
-
🏆 Most Cap Space
-
💸 Highest Payroll
-
Team Cap Space 2026 Payroll 2027 2028 2029 Actions
📊

Loading financial data...

📊 Roster Composition Dashboard

Strategic breakdown of your roster by position, service time, age, level, and salary distribution

📍 By Position

⏰ By Service Time

🎂 By Age Group

🏆 By Level

💰 Salary Distribution

📅 Contract Expiration Timeline

💰 Multi-Year Cap Planning

Plan your salary cap strategy across multiple seasons with extension scenarios and free agent budgeting

📖 League Rules Reference

Quick reference for your dynasty league rules and settings

📖 Dashboard Features & Guide

⚠️ Privacy & Data Sharing Notice

Important: If you share this dashboard URL with someone, they will have access to the same Supabase database, which means:

  • They can see your notes and watchlist
  • They can modify or delete your data
  • You will see each other's changes in real-time

Solutions:

  • For private use: Don't share the URL publicly
  • For sharing with others: They should create their own copy with their own Supabase project
  • For collaboration: This setup works great for league-mates working together on the same data

📌 Current Status

MLB API Status: Offseason Mode (Limited Data)
Version: v4.1.2
Last Updated: January 2026

⚠️ Some features are limited during MLB offseason. Full functionality returns when season begins (~February).

✅ Core Features (Available Now)

📋 Roster Management

  • CSV Import: Upload Fantrax roster exports
  • Player Search: Real-time text filtering by name/team/position
  • Advanced Filters: Position, status (MLB/Minors/Reserve), sorting options
  • Summary Stats: Total players, MLB/prospects count, average age

💰 MBL Salary Cap Integration

  • Salary CSV Upload: Import your team's contract data
  • Cap Tracking: Live calculation of cap used, space remaining, percentage
  • 2026 Projections: Automatic calculation of next year's cap commitments
  • Player Contracts: 2025 salary, years remaining, service status displayed on each card
  • Service Status Labels: Team Control, Arb 1-3, Free Agent indicators
  • Drop Penalty Calculator: Year-by-year breakdown of cap hits (100%/80%/60%/40%/20%)

🔄 Trade Analyzer

  • Multi-Player Trades: Build trades by selecting players you send and receive
  • Autocomplete Search: "You Receive" section now has MLB player search with typeahead
  • MBL Salary Impact: See exactly how trade affects your cap space (for MBL)
  • Trade Legality Check: Automatic validation against $241M salary cap
  • Visual Breakdown: Side-by-side comparison of salary in vs. salary out
  • Cap Space Projection: Shows your cap space after trade completes
  • Blocked Trade Warning: Red alert if trade puts you over cap (illegal per MBL rules)
  • Trade Value Analysis (Coming Soon): AI-powered fair/win/lose ratings when season starts
  • Multi-League Support: Value analysis will work for any league format, not just MBL

📊 Service Time Tracker (MBL Rules)

  • MLB Career AB/IP Tracking: Shows progress toward 130 AB / 50 IP threshold
  • MiLB Eligibility Status: Automatic determination based on MLB stats only
  • Smart Warnings: Critical alerts when within 10 AB/5 IP of threshold
  • Warning Badges: Yellow (30 AB away) and red pulsing (10 AB away) alerts
  • Roster Impact Notices: Flags when players must occupy Active/Reserve slots

🎯 Quick Filters

  • 🔥 Hot Bats: OPS > .850 with 20+ games
  • 💨 Speed Threats: 10+ stolen bases
  • 🎯 Elite Contact: K% < 20%
  • ⚡ K Artists: K/BB > 3.0 (pitchers)
  • 👶 Young Talent: Age ≤21 in AA/AAA
  • 💪 Power Hitters: 10+ home runs

📈 Performance Tracking

  • Change Detection: Automatic tracking of promotions/demotions
  • Stat Trends: Flags significant OPS/ERA changes between visits
  • Level Changes: Green badges for promotions, red for demotions
  • Persistent Storage: History saved across sessions

👁️ Watchlist

  • Track Players: Add players you're interested in for trades, waiver pickups, or scouting
  • Persistent Storage: Watchlist saves across browser sessions
  • Quick Add: Type player names directly or add from Research tab
  • Full Stats: Click any watchlist player to load their complete stats
  • Easy Management: Remove individual players or clear entire list

🔬 Player Research

  • Standalone Lookup: Search any player without loading full roster
  • Autocomplete: Typeahead suggestions as you type (2+ characters)
  • Add to Watchlist: Save interesting players for future reference
  • External Links: One-click Google search for any player

📊 Roster Composition Dashboard

  • By Position: Visual breakdown of C, 1B, 2B, 3B, SS, OF, SP, RP distribution
  • By Service Time: Count of Team Control, Arb 1-3, Free Agent players
  • By Age Group: Distribution across Under 23, 23-25, 26-29, 30-33, 34+ cohorts
  • By Level: MLB (Active/Reserve) vs. Minors split
  • Salary Distribution: Buckets from league minimum to $15M+ with total committed
  • Contract Expiration Timeline: Shows who becomes FA in 2025, 2026, 2027, 2028+

⏳ Season-Dependent Features (Limited in Offseason)

🤖 AI-Powered Reports (Coming When Season Starts)

  • Recent Performance Analysis: AI analyzes last 5-7 games with trend insights
  • Hot/Cold Streaks: Identifies if player is heating up or cooling down
  • Injury Updates: Real-time injury news and timeline impacts
  • Trade Rumors: Latest trade speculation and likelihood
  • Call-up Potential: Prospects close to MLB promotion
  • Personalized Recommendations: Buy/sell/hold advice based on your league context

⚠️ Offseason Note: AI Reports will activate when regular season begins (~March 2026). Button available now for testing.

📊 Player Stats (MLB API)

  • Career Stats: MLB and MiLB career totals
  • Season Stats: Current year performance by level
  • Level-by-Level Breakdown: Rookie → A → A+ → AA → AAA → MLB progression
  • Advanced Metrics: K%, BB%, K/BB, OBP, SLG calculations
  • Smart Flags: Auto-generated performance alerts (elite/concerning stats)
  • Age-Relative Analysis: Context for performance vs. age/level

⚠️ Offseason Note: API returns limited/cached data. Full stats available ~February when season starts.

🏆 Top Prospects

  • Top 100: MLB Pipeline prospect rankings
  • By Team: Team-specific prospect lists
  • Breakout Watch: Stat-based breakout candidate identification
  • Ownership Tracking: Shows which prospects you already own

⚠️ Offseason Note: MLB API prospect endpoints may be inactive. Check back in spring.

💡 Tips & Best Practices

📁 File Uploads

  • Export Fantrax roster as CSV (include all columns)
  • Export your team's salary tab from MBL Contracts spreadsheet
  • Upload roster first, then salary data for full integration

🎯 Workflow Recommendations

  • Weekly Review: Upload fresh roster CSV to check for promotions/changes
  • Trade Analysis: Use Trade Analyzer tab to evaluate multi-player deals before proposing
  • Drop Decisions: Check Drop Penalty Calculator before cutting any player with years remaining
  • Waiver Wire: Use Research tab + Quick Filters to find targets
  • Service Time Monitoring: Check prospects weekly as they approach 130 AB/50 IP
  • Cap Planning: Monitor 2026 Projected cap commitments for offseason planning

🔄 When Season Starts

  • MLB API will provide real-time stats (updated daily)
  • Top Prospects tab will load current rankings
  • Breakout Watch will analyze live performance
  • Service time trackers will update with in-season AB/IP

📜 Version History

v5.4.3 - Cap Planning Overhaul 💰 (Current)

  • 🎯 Added team selector dropdown to Cap Planning tab
  • 💰 Now uses contract data from Google Sheets (playerContractsData)
  • 📊 Shows projections for 2026-2031 instead of 2025-2028
  • ✅ Works with any team in the league, not just your team
  • 🔢 Smart estimation: TC=$800K, ARB1=$2.5M, ARB2=$5M, ARB3=$8M
  • 📈 Displays actual contract amounts for multi-year deals

v5.4.2 - Enrich Button Fix 🔘

  • 🐛 CRITICAL FIX: Enrich button stays disabled even when contract data loads
  • ✅ Button now enables automatically after contracts load from Google Sheets
  • 📊 Added serviceStatus calculation (TC/ARB1/ARB2/ARB3/FA) from salary data
  • 💰 Fixed salary display to handle both numeric salaries and text codes
  • 🔧 Contract info now shows "TC" or "ARB1" for service time players

v5.4.1 - Contract Fix 🔧

  • 🐛 CRITICAL FIX: Contracts not displaying after enrichment
  • ✅ Fixed player cards to use player.contract instead of salaryData
  • 💰 Contract badges now show correctly after clicking "Enrich with Contracts"
  • 📊 Added Baseball Reference link to all player cards
  • 🔍 Search links now appear side-by-side: Google | Baseball Reference

v5.4.0 - Streamlined Edition 🎯

  • 🗑️ Removed Assistant GM (unsustainable token usage)
  • 🧹 Removed unnecessary UI: salary status, demo mode, import/export buttons
  • 📋 Removed CSV upload options (data loads from APIs)
  • 🎯 Roster Composition now shows only YOUR team
  • 💰 Cap Planning now shows only YOUR team
  • ✨ Manual "Enrich with Contracts" button - no auto-enrichment
  • ⚡ Prevents wasting time loading wrong league or both at once

v5.1.6 - Position Matching 🎯

  • 🐛 CRITICAL FIX: Wrong player shown for duplicate names (e.g., Luis Castillo)
  • ✅ Now matches by POSITION first when multiple players have same name
  • 🎯 Luis Castillo (OF) now correctly distinguished from Luis Castillo (P)
  • 🔧 Fixed spinning cards - missing variable reference
  • ⚡ Smart matching: Position → Exact name → Youngest

v5.1.5 - Safe ID Handling 🛡️

  • 🐛 CRITICAL FIX: JavaScript syntax errors when clicking player cards
  • ✅ Fantrax IDs sanitized for safe use in HTML attributes
  • 🔧 Special characters in IDs no longer break onclick handlers
  • 🎯 Player cards now clickable regardless of ID format
  • 🛡️ Robust handling of hyphens, quotes, spaces in IDs

v5.1.4 - Stable Player IDs 🎯

  • 🐛 CRITICAL FIX: Clicking roster players showed wrong player data
  • ✅ Now uses Fantrax ID as stable player identifier
  • 🔍 Prevents "clicked Luis Castillo, got Jose Quijada" issues
  • ⚡ Player cards now correctly match across page reloads
  • 🎯 Roster interactions are now reliable and consistent

v5.1.3 - Strict Name Verification ⚠️

  • 🐛 CRITICAL FIX: Cached MLB IDs were using partial name matches
  • ✅ Now requires EXACT name match for cached ID verification
  • 🔍 Prevents wrong players from showing (e.g., "A.J. Ewing" instead of "Lake Bachar")
  • 🗑️ Bad cached IDs will be automatically re-searched and corrected
  • ⚡ May see slower initial load as bad cache entries are fixed

v5.1.2 - Contract Name Matching Fix 🔧

  • 🐛 CRITICAL FIX: Contract merging was failing due to name format mismatch
  • ✅ Now handles "Last, First" (roster) vs "First Last" (contracts)
  • 🔍 Enhanced debugging - shows merge count and sample data
  • 💰 Contracts now actually appear on player cards!
  • 🎯 Name normalization ensures consistent matching

v5.1.1 - Player Contracts (Unified) ✅

  • 🎯 Unified player card display across all tabs
  • 💰 Contracts now show in Player Lookup tab
  • 🔄 Auto-merge contracts when roster loaded/refreshed
  • ✅ Consistent experience: Roster, Lookup, Finances all show same data
  • 🐛 Fixed: Player Lookup pulls contract from roster if available

v5.1.0 - Player Contracts Integration 💰

  • 💵 New League Finances dashboard with all 30 teams
  • 📊 Real-time Google Sheets sync - always up-to-date
  • 💰 Player contract data loaded from Master tab
  • 📈 6-year contract breakdown (2026-2031) on player cards
  • 🔄 Shows both dollar amounts and service status (ARB, TC, FA)
  • ⚡ Auto-merges contracts with roster data
  • 🎯 Sortable team financials by cap space, payroll, year

v5.0.0 - PWA Release

  • 📱 Full Progressive Web App support
  • ⚡ Install to home screen like native app
  • 💾 Independent cache - separate from Safari

v4.10.2 - Validate Cached MLB IDs

  • 🐛 MAJOR FIX: Cached MLB IDs were never validated
  • ✅ Now verifies cached ID matches player name before using
  • 🔄 Re-searches if cached ID has wrong name
  • 📊 Prevents wrong player data from enrichment errors
  • 🔍 Logs verification process for debugging

v4.10.1 - Fixed Fallback Search Bug

  • 🐛 CRITICAL FIX: Fallback search was keeping partial matches
  • ❌ Now clears results when no exact match found
  • ✅ "Walker Jenkins" → Correctly shows "not found"
  • ✅ No more random historical players with wrong data
  • 📊 Only accepts exact name matches or shows error

v4.10.0 - Team-Based Trade Analyzer

  • 🔄 Rebuilt Trade Analyzer for team-to-team trades
  • 📋 Select any two teams from loaded league
  • ➕ Add players from each team to the trade
  • 💰 See salary info for each player in trade
  • ✕ Easy remove buttons to adjust trade
  • 🎨 Clean side-by-side layout with visual clarity
  • 📊 Ready for trade analysis logic (coming next)

v4.9.3 - Reject Bad Player Data

  • 🐛 Fixed: MLB API returning incomplete historical player records
  • ❌ Reject players with no age/birthdate (like "Harrisburg Giants" Walker Jenkins)
  • ❌ Reject players older than 45 years (historical records)
  • ✅ Better error messages for incomplete data
  • 🔍 Show search links when MLB data is incomplete

v4.9.2 - Stricter Name Matching

  • 🐛 Fixed: Fallback search accepting partial name matches
  • 🎯 "Walker Jenkins" no longer matches other "Walker" players
  • ✅ Fallback search now requires EXACT full name match
  • 📝 Better error message for prospects not yet in MLB system
  • 🔍 Shows Google/Baseball-Reference links for un-debuted prospects

v4.9.1 - Fixed Player Search

  • 🐛 Fixed: MLB API returning wrong players for common names
  • 🎯 Walker Jenkins now finds correct prospect (not Walker Buehler)
  • 🎯 Druw Jones now finds correct prospect
  • 🔍 When multiple matches: prefer exact name match first
  • 👶 When no exact match: prefer youngest player (prospects)
  • 📊 Added debug logging for multiple match scenarios

v4.9.0 - Historical Prospects (2020-2026)

  • 📊 Moved prospect data from hardcoded → GitHub JSON files
  • 🕐 Added 7 years of historical FanGraphs rankings (2020-2026)
  • 📅 Year selector dropdown now includes all years
  • 💾 Smart caching: fetches from GitHub, caches for 7 days
  • 🔄 Data updates automatically when GitHub files change
  • ⚡ Instant year switching with cached data
  • 📈 Track prospect progression across multiple years

v4.8.6 - Handle Accented Characters

  • ✅ Added accent/diacritic removal to name normalization
  • 🎯 "Jesús Made" now matches "Made, Jesus" (removes accents)
  • 🌐 Handles all Latin characters: á é í ó ú ñ ü etc.
  • 📊 Works for: José, Jesús, Peña, Rodríguez, etc.
  • 🔧 Uses Unicode NFD normalization to strip diacritics

v4.8.5 - Fixed Ownership Matching

  • 🐛 Fixed: Owner badges showed 0 matches for all prospects
  • 🔧 Root cause: FanGraphs uses "First Last", Fantrax uses "Last, First"
  • ✅ Added name normalization to handle both formats
  • 🎯 "Ryan Waldschmidt" now matches "Waldschmidt, Ryan"
  • 📊 Owner badges should now display correctly for rostered prospects

v4.8.4 - Fixed Top 100 Expandable Cards

  • 🐛 Fixed: Top 100 tab still had old "View Stats" buttons instead of expandable cards
  • 🎴 Top 100 prospects now use same expandable card format as Young & Elite
  • 👁️ Owner badges now display in Top 100 (green badge shows fantasy team)
  • 📊 Click prospect header to expand and see full stats inline
  • ✅ Feature parity across ALL prospect sections now complete

v4.8.3 - Ownership Detection

  • 🎯 Top Prospects now show which fantasy team owns them
  • 🔍 Player Lookup now shows owner badge if player is on loaded roster
  • ✅ Matching logic: Name + Age (±1 year) + MLB Team for accuracy
  • 🏷️ Green badge shows fantasy owner's team name
  • 💡 Helps identify which prospects are already rostered vs available
  • 🔄 Reverted roster filters to season-only (career HR = meaningless)

v4.8.1 - Top Prospects Show Full Player Cards

  • 🎴 Converted Top Prospects to expandable player cards (like roster/watchlist)
  • 📊 Click prospect header to expand and see full stats inline
  • ⏱️ Shows Service Time Tracker, Career Stats, Level-by-Level Performance
  • 🔍 No longer redirects to Player Lookup - stats load right in the card
  • 💾 Caches loaded stats so re-expanding is instant

v4.8.0 - Watchlist Player Cards Match Roster

  • 📊 Added "Level-by-Level Performance" section to watchlist cards
  • ⏱️ Added "Service Time Tracker" section to watchlist cards
  • 💰 Added "Contract Information" section to watchlist cards (if salary data loaded)
  • ✅ Watchlist cards now have complete feature parity with roster cards
  • 🎯 Shows timeline of performance across different MiLB levels by year

v4.7.9 - Better Logging & Stats

  • 📊 Added enrichment summary statistics at end of sync
  • 🔍 Shows: MLB API Success / Fantrax Fallback / Not Found counts
  • ⚠️ Detailed logging for players not found in MLB API
  • ✅ Shows SUCCESS/FAILED messages for fallback attempts
  • 💡 Helps debug which players need Fantrax team data

v4.7.8 - Fantrax Team Fallback

  • 🔄 Added fallback to extract MLB team from Fantrax roster data
  • ✅ Created getFullTeamName() function to convert abbreviations (e.g., "ATL" → "Atlanta Braves")
  • 📊 Now extracts team from playerData.team or playerData.mlbTeam if available
  • 🎯 If MLB API fails to find team, uses Fantrax team abbreviation as backup
  • 💡 Should fix players like Acuna Jr. who had empty MLB teams

v4.7.7 - Fixed "Office of the Commissioner"

  • 🐛 Issue: Acuna Jr. showed "Office of the Commissioner" instead of "Atlanta Braves"
  • ✅ Now tries multiple sources: parentOrgId → primaryTeam → currentTeam
  • 🚫 Filters out Commissioner's Office (team ID 0)
  • ⚾ Added primaryTeam to hydrate parameter
  • 🔧 Added error handling for team API calls

v4.7.6 - Fixed Winter Ball / MiLB Teams

  • 🐛 Issue: Players showed winter ball teams (e.g., "Scottsdale Scorpions") or MiLB affiliates
  • ✅ Now uses parentOrgId to get MLB organization instead of currentTeam
  • ⚾ Acuna Jr. now shows "ATL" instead of "Tiburones de La Guaira"
  • 🔧 McGonigle now shows "DET" instead of "Scottsdale Scorpions"
  • 📊 Fetches team info from /teams API for accurate MLB org names

v4.7.5 - Fixed MLB Team Badge

  • 🐛 Found issue: MLB search API wasn't returning currentTeam data
  • ✅ Added `&hydrate=currentTeam` to search API calls
  • ⚾ Now player cards show both MLB team (e.g., "DET") AND fantasy owner
  • 🔍 Example: Kevin McGonigle shows "DET" + "[email protected]"

v4.7.4 - Fixed Position Filter

  • ✅ Fixed: Position filter now applies when switching teams
  • 🔧 Changed handleTeamFilterChange to call applyFilters() instead of applyTeamFilter()
  • 📊 Now respects all active filters (position, status, team, quick filters)
  • 🎯 Example: Select "C" position → switch teams → still shows only catchers

v4.7.3 - Fixed 3 Issues

  • 🔍 Added logging to debug incorrect stats (e.g., Jarlin Susana showing hitting stats)
  • ✅ Fixed: Sorting/filtering now respects team selection (won't lose your team filter)
  • ⚾ Added 3-letter MLB team abbreviations (e.g., "SF" instead of "San Francisco Giants")
  • 👥 Fantasy owner badge stays full name for clarity

v4.7.2 - Fixed Career Stats Aggregation!

  • 🐛 Found the bug: `aggregateCareerStats` was using `levels[0].avg` instead of calculating
  • ✅ Now sums hits across all levels and calculates AVG = total hits / total at-bats
  • ⚾ Kevin McGonigle: (43+54+4+9+75+14+9) / (169+145+17+42+230+40+33) = 208/676 = .308
  • 📊 Pitchers: ERA and WHIP now calculated from aggregated IP, ER, H, BB
  • 🎯 STATS_VERSION = 5

v4.7.1 - Never Trust API Rate Stats!

  • 🔧 ALWAYS recalculate AVG/OBP/SLG/OPS from counting stats
  • ❌ Never trust MLB API's rate stats (they can be wrong!)
  • ✅ Kevin McGonigle now shows .308 AVG (208/676)
  • 📊 Applies to both single-split and multi-split career stats
  • ⚾ Pitchers: ERA and WHIP also always recalculated
  • 🎯 STATS_VERSION = 4 (forces all stats to recalculate)

v4.7.0 - Proper Stats Aggregation

  • ✅ Fixed: Now properly calculates AVG from aggregated hits/at-bats
  • 📊 Calculates OBP: (H + BB + HBP) / (AB + BB + HBP + SF)
  • 📊 Calculates SLG: Total Bases / At Bats
  • 📊 Calculates OPS: OBP + SLG
  • ⚾ Kevin McGonigle now shows correct .308 AVG (was .254)
  • 🎯 STATS_VERSION = 3 (forces recalculation)

v4.6.4 - Stats Version Debug

  • 🔍 Added debug logging for stats version checks

v4.6.3 - Stats Cache Invalidation

  • 🔄 Added STATS_VERSION constant to track calculation logic changes
  • ✅ Forces stats recalculation when logic is improved
  • 📊 Old cached stats (v1) automatically refreshed with new logic (v2)
  • 🎯 Kevin McGonigle and all players now show correct stats immediately

v4.6.2 - Fixed Career Stats Calculation

  • ⚾ Fixed batting average calculation for aggregated stats
  • 🔧 Rate stats (AVG, OBP, SLG, OPS, ERA, WHIP) now recalculated from counting stats
  • ✅ Kevin McGonigle now shows correct .308 AVG (was showing .254)
  • 📊 Accurate stats for players with multiple teams/levels

v4.6.1 - Fixed Stats Matching

  • ✅ fetchPlayerStats now uses cached mlbPlayerId from enrichment
  • 🔧 Converts "Last, First" to "First Last" when searching MLB API
  • ⚾ Edward Florentino now shows correct stats (not wrong player)
  • 🎯 All Fantrax players match correctly with MLB database

v4.6.0 - MLB Data Enrichment Complete! 🎉

  • 🔍 Auto-enriches Fantrax players with MLB API data (age, team, status)
  • ⚾ Shows actual MLB team badge (e.g., "Detroit Tigers")
  • 👥 Shows Fantrax owner in green badge (e.g., "[email protected]")
  • 📊 Batch processing with progress indicator (10 players at a time)
  • ✅ Handles "Last, First" name format from Fantrax
  • 💾 Enriched data cached - no re-enrichment needed on reload
  • 🔧 Fixed stats matching - now finds correct player in MLB database
  • ⏱️ Progress shows: "Enriching player data... X%"

v4.5.2 - Players Now Rendering

  • ✅ Fixed team filter to use fantraxTeam field
  • 👁️ Added empty state hiding when roster loads
  • 📊 Players grid now shows properly after Fantrax sync
  • 🔍 Team filtering works for both cached and fresh data

v4.5.1 - Bug Fixes

  • 🔧 Fixed updateStats → updateSummaryStats function name
  • 💰 Made salary cap dynamic based on selected league
  • ✅ Fantrax sync now works without errors

v4.5.0 - Fantrax Auto-Sync Complete! 🎉

  • 🌐 Full Fantrax API integration - auto-sync rosters from both leagues
  • 👥 Team filter dropdown - view all teams or filter to your team
  • ⭐ Your team highlighted in dropdown (San Francisco Giants / [email protected])
  • 💾 Smart caching - auto-refresh if data >1 hour old
  • 📊 Player count updates based on team filter
  • ⚡ Instant load from cache if fresh (<1 hour)
  • ❌ Error handling - falls back to cache if API fails
  • 💰 Salary data integration ready (upload CSV to overlay)

v4.4.0 - Fantrax Auto-Sync Phase 1

  • 🏆 Added league selector dropdown (MBL, Armchair GM's, Manual CSV)
  • ✅ League selection persists across sessions
  • 📊 Status indicator shows current league and sync state
  • 🔄 Refresh button ready (API integration coming in Phase 2)
  • 💾 Detects cached roster data and displays age

v4.3.8 - Fixed Watchlist Click Bug

  • 🔧 Fixed syntax error preventing watchlist cards from expanding
  • ✅ Changed from inline onclick to addEventListener (better iOS support)
  • 🍎 Watchlist cards now properly expand on iPad/iPhone
  • 🔧 Properly escaped player names with special characters

v4.3.7 - Watchlist Card Match & iOS Fix

  • ✅ Watchlist cards now match roster card design with status badges
  • ✅ Added "View in Player Lookup" button to watchlist cards
  • 🍎 Fixed iOS/iPadOS touch interaction - cards now expand properly
  • 🔧 Added touch-action CSS for better mobile support

v4.3.6 - Console Error Fix

  • 🔧 Removed undefined updateWatchlistBadge() function calls
  • ✅ No more console errors when removing watchlist players

v4.3.5 - Watchlist UUID Fix

  • 🔧 Fixed Supabase watchlist save - removed UUID conflict with player_name key
  • ✅ Watchlist now properly syncs to cloud database
  • ✅ No more "invalid input syntax for type uuid" errors

v4.1.3 - Notes & Watchlist Fixes

  • ✅ Fixed watchlist removal - now persists across refreshes
  • ✅ Added "Players with Notes" section in Watchlist tab
  • ✅ Quick view and delete notes functionality
  • ✅ Proper Supabase sync for deletions

v4.1.2 - Smart Year Fallback + GitHub Actions

  • ✅ Smart year fallback system (shows 2025 while waiting for 2026)
  • ✅ GitHub Actions for automated daily prospect updates
  • ✅ Year-agnostic system (works forever for 2027, 2028...)
  • ✅ No more waiting game - works TODAY with 2025 data

v4.3.4 - Fixed Syntax + Enhanced Debug

  • ✅ Fixed "Missing catch or finally after try" syntax error
  • ✅ Added comprehensive Supabase initialization debugging
  • ✅ Now logs: URL, key exists, library loaded, client created, connection test
  • 🔍 Check console on page load for detailed Supabase setup info

v4.3.3 - Watchlist Debug Logging

  • ✅ Added comprehensive debug logging for save/load operations
  • 📊 Console now shows: Loading source (Supabase/local), sync status, errors
  • 🔍 When you add a player, check console for "Synced to Supabase" messages
  • ⚠️ If you see "Supabase not enabled" - that's the problem

v4.3.2 - Search Web Fix

  • ✅ Changed player not found button to "Search Web" (opens Google in new tab)
  • ✅ Searches for "{player name} baseball stats MLB"

v4.3.1 - Watchlist Improvements

  • ✅ Added "Search in Player Lookup" link when player not found in MLB API
  • ✅ Quick Add now has autocomplete with all 342 prospect names
  • ✅ Fixed watchlist UI updates (badge counter)
  • ⏰ Supabase sync happens immediately - may take ~1-2 seconds
  • 📱 Cross-device sync: Should work - all devices share same Supabase database

v4.3.0 - Young & Elite FIXED! 🎉

  • ✅ Fixed inline `display:none` that was hiding the prospects
  • ✅ Young & Elite now displays all 6 prospects correctly
  • ✅ Shows: Jesús Made, Colt Emerson, Josue De Paula, Alfredo Duno, Luis Peña, Ryan Sloan

v4.2.9 - Young & Elite Auto-Load

  • ✅ Young & Elite now auto-loads when switching to that tab
  • ✅ Removed manual "Show" button - no longer needed
  • ✅ Should now display 6 prospects immediately when tab is clicked

v4.2.8 - Young & Elite Debug

  • ✅ Enhanced debug logging in Young & Elite function
  • ✅ Shows data source, prospect count, and current year in console
  • ✅ Better error messages showing why data might be missing
  • 📊 Expected: 6 prospects (FV 55+, under 22 years old)

v4.2.7 - Critical Bug Fixes

  • ✅ Fixed "Cannot set properties of null" error in populateTeamDropdowns
  • ✅ Fixed infinite year switching loop (2025 ↔ 2026)
  • ✅ Added guard to prevent switching to same year twice

v4.2.6 - Filter Fixes

  • ✅ Team filter now shows ALL 30 MLB teams (returns "no prospects" if team has none)
  • ✅ FV filter changed to tier ranges (50-54, 55-59, etc) instead of "X and above"
  • ✅ Added debug logging to Young & Elite to diagnose empty results
  • ✅ Confirmed prospects auto-load on tab switch (no more year switching needed)

v4.2.5 - Filters & UI Improvements

  • ✅ Fixed watchlist clear - improved Supabase delete logic
  • ✅ Fixed team filter - now populates and works properly
  • ✅ Added FV (Future Value) filter - filter by prospect grade
  • ✅ Removed "By Team" tab (not needed with team filter)
  • ✅ Replaced "Breakout Watch" with "Young & Elite" - shows FV 55+ prospects under 22 years old

v4.2.4 - Auto-load & Privacy Fixes

  • ✅ Fixed prospects not loading on initial page load
  • ✅ Fixed "Clear Watchlist" - now properly deletes from Supabase
  • ✅ Added privacy warning about data sharing in Guide tab
  • ⚠️ Important: Anyone with this URL shares the same database

v4.2.3 - Bug Fixes

  • ✅ Fixed JavaScript syntax error (stray closing brace)
  • ✅ Fixed CSV parser to handle "+" in FV values (35+, 40+, 45+)
  • ✅ Now shows all 342 prospects from FanGraphs (was only 178)

v4.2.2 - Manual CSV Only

  • ✅ Removed all MLB.com auto-fetch logic
  • ✅ Now uses only manually uploaded FanGraphs CSV data
  • ✅ Removed "Refresh Rankings" button
  • ✅ 2025 kept as placeholder for future historical CSV
  • ✅ Clean console - no more fetch errors

v4.2.1 - Year Switching Fix

  • ✅ Fixed auto-fetch issue when switching prospect years
  • ✅ 2026 data properly reloads from FanGraphs when switching back
  • ✅ No more unnecessary MLB.com fetches
  • ✅ Version number now visible in header

v4.2.0 - FanGraphs Integration

  • ✅ Embedded FanGraphs "The Board" 2026 prospects (178 prospects)
  • ✅ Auto-loads on page open - no refresh needed
  • ✅ Works with all existing filters (position, team, ETA)
  • ✅ Fixed prospectsLastRefreshed declaration bug

v4.1.0 - Live MLB Prospects

  • ✅ Removed all hardcoded prospect data
  • ✅ Live fetching from MLB.com prospects page
  • ✅ Smart caching system for offline use
  • ✅ Date-aware fetching (won't try before release)

v4.0.0 - Supabase Cloud Sync

  • ✅ Cross-device synchronization for notes and watchlist
  • ✅ Supabase database integration
  • ✅ Hybrid storage (cloud + local backup)
  • ✅ Real-time sync across all devices

v3.6.0 - Multi-Year Prospects

  • Year selector dropdown (2025/2026)
  • Historical prospect class comparisons
  • Separate databases per year

v3.5.0 & Earlier

  • Salary cap planning (2025-2028 projections)
  • Trade analyzer with multi-player support
  • Player research with MLB API integration
  • Roster breakdown and composition analysis
  • League rules documentation (MBL + Armchair GM's)

📊 Player Comparison

💰 Drop Penalty Calculator