Today's Schedule
Loading…
🔥 PARLAY OF THE DAY
Top 3-Leg Parlay
Loading today's parlay…
Today's Slate Snapshot
🎯 Track Record & Slate Snapshot
loading…
—
Hit Rate
— – —
Loading…
| Platform | 3-Leg | 4-Leg | 5-Leg | W% |
|---|---|---|---|---|
| Loading track record… | ||||
Pick History
▼
Loading track record...
Why We're Different
ONLY APP
FREE FOREVER
9-Year Historical Database
ONLY APP
FREE FOREVER
Player Mental Load Tracking
ONLY APP
FREE FOREVER
4-Source Prop Line Consensus
ONLY APP
FREE FOREVER
Travel & Fatigue Modeling
ONLY APP
FREE FOREVER
Spatial Quality of Attempt Formula
Confidence scores powered by four proprietary models — Mental Load, Travel Fatigue, Arena Context, and Spatial Quality of Attempt. Built from nine years of WNBA data — back to 2017, when DFS first recognized the WNBA. Found nowhere else.
Qualified Parlays
Each card requires every leg above the confidence floor. Cards with fewer than the required unique players are automatically rejected.
🟣 PRIZEPICKS LINES ONLY
All legs use real PrizePicks prop lines · Players confirmed available on PrizePicks today
PrizePicks-only parlays use the actual PP line values. Players without a live PrizePicks line for that market are excluded.
⚡ UNDERDOG LINES ONLY
All legs use real Underdog prop lines · Players confirmed available on Underdog today
Underdog-only parlays use the actual UD line values. Players without a live Underdog line for that market are excluded.
My Pick History
▼
DRAFTKINGS LINES
Live WNBA player props via The Odds API
FANDUEL LINES
Live WNBA player props via The Odds API
Top Confidence Plays
Player Candidate Legs
Live player pool · QoS & QoA independent tracking-native signals
| Player | Team | Market | Pick | Line | Proj. | Conf. | QoS | QoA | Zone | Retro% | Shot angle | Def. dist. | Clock | Home | Notes |
|---|
BUILD HISTORY
▾
Version Roadmap & Competitive Differentiation
| v9.9.9.29 | PropLine Streaming Lite — Full v1 Integration: Fixed /api/propline.js base URL from broken /v4 to correct /v1. Rewrote full client fetchPropLineLines() — now parses all 10 markets (added Steals, Blocks, Turnovers). Direct DK + FD bookmaker lines from PropLine (draftkings, fanduel keys). NoVig as FanDuel fair-value proxy. Bovada as DK proxy fallback. PP dfs_odds_type (goblin/demon/standard) stored in ppDfsTypeMap — DEMON badge (orange) + GOBLIN badge (cyan) shown on PP parlay legs and player table. Line movement tracker (propLineLineHistory) shows up/down arrow + delta when PP line shifts between fetches. propLineLiveEvents Set tracks live games from PropLine live flag. noVigMap stores fair-value consensus lines. Added /api/propline-webhook.js — HMAC-SHA256 verified PropLine push webhook handler with Supabase upsert for result.settlement, odds.update, odds.open, odds.close events. | |
| Version | What Shipped | Competitive Edge |
|---|---|---|
| v9.9.9.73 | API Refresh Timing + Full Badge Parity Across All Parlay Cards: PropLine refresh tightened 3min → 90s (paid Streaming Lite; 100K/day quota — 960 req/day well within limit). OddsAPI DK/FD direct lines tightened 5min → 3min. Candidate table (legsBody) now shows FORM badge alongside LOCKED IN/mental-load indicators — was missing from table rows, only rendered on parlay cards. Main parleyGrid card legs now render BLOW/fatigue/arena badges — were absent, only present in UD cards. renderPlatformLeg() (DK & FD) now renders BLOW/fatigue/arena badges. Full badge parity across all five card types: main, UD, PP, DK, FD. Build history updated v9.9.9.51–56. |
API PropLine 90s · OddsAPI 3min · badge parity all card types |
| v9.9.9.73 | GET Fetch Cache Busters + Dynamic Badge Parser Removed: Added _cb=Date.now() to 3 remaining GET fetch() calls: PropLine fetch(PL_URL), /api/picks?player= sync GET, and track-record fetch(url). Dynamic badge JS parser removed — single-digit slicing of 4-digit key produced “v9.9.5.6” not “v9.9.9.73”. Static badge HTML is now authoritative; Gate 1 enforces badge = SW cache key sync at build time. SW → sgg-v9956. |
CACHE 3 GET cache busters · badge parser removed · static badge authoritative |
| v9.9.9.55 | Full Audit Pass — 8-Check Gate 1 + KPI Layout Restore: Comprehensive live audit of v9.9.9.51–54 fixes. KPI ROW re-restored after gh-api pull regression. Badge parser fixed in validate.js. validate.js syntax error fixed. All 8 audit checks passing. SW → sgg-v9955. | AUDIT 8-check Gate 1 · KPI layout restored · all checks green |
| v9.9.9.54 | Dynamic Version Badge + Gate 1 Permanent Checks: Added id="versionBadge" dynamic badge span. Gate 1 extended: checkVercelCacheHeaders(), checkMappingQA() (scoped to JS script blocks — platformPick, udPick, udPickFull, UD_LINE_FLOORS, _udFloors, badge/SW sync), checkSWCacheVersion(). renderPlatformLeg render line fix (l.pick→platformPick). SW → sgg-v9954. |
GATE1 Dynamic badge · 3 permanent Gate 1 checks · mapping QA enforced |
| v9.9.9.53 | CDN Cache Kill — Vercel Edge No-Store: Added s-maxage=0 + Surrogate-Control: no-store to vercel.json for / and /index.html. Eliminates Vercel edge CDN caching of the HTML shell — mobile users always get the live version. SW → sgg-v9953. |
CDN s-maxage=0 · Surrogate-Control: no-store · edge cache killed |
| v9.9.9.52 | UD Best Available Direction Fix + UD_LINE_FLOORS Guard: UD Best Available card used stale l.pick; fixed with udPick recalculated vs udLine. UD full parlay: udPickFull replaces undefined ppPick. UD_LINE_FLOORS sanity guard rejects implausible lines (0.5 rebounds, 99 points). _udFloors guard in fetchUnderdogDirect. SW → sgg-v9952. |
MODEL UD Best Available direction · udPickFull · UD_LINE_FLOORS guard |
| v9.9.9.51 | KPI Row Above Scorecard + Platform Leg Direction Fix: KPI ROW moved above scorecardWidget. renderPlatformLeg() DK/FD now uses platformPick (recalculated vs live platform line) — fixed Clark UNDER on DK/FD with projection clearly OVER. Stale parlay_of_day Supabase row deleted. SW → sgg-v9951. |
MODEL KPI row order · platformPick recalc · stale POTD cleared |
| v9.9.9.50 | PrizePicks Purple + Track Record Merge + PP Direction Fix: PP toggle button, badges, and "PP VERIFIED" label recolored from gold to brand purple (#7c3aed) for visual distinction from Underdog. PP best-available preview and full parlay renderer now recalculate pick direction against ppLine (was using stale model pick — caused wrong Over/Under on legs). Redundant "Platform Track Record" scorecard, "Hit Rate Banner", and "Public Track Record" collapsible merged into one unified "Track Record & Slate Snapshot" widget — single card with live W-L pill in header, compact hit-rate bar, platform×size table, and expandable pick history. Eliminates duplicate track record displays. | UX PP purple · merged track record · direction recalc |
| v9.9.9.49 | Cache Busters + POTD Direction Root Cause Fix: Added _cb=Date.now() cache-bust param to all 21 internal fetch calls app-wide (index.html + api/data.js) — eliminates browser-cached stale API responses. Fixed POTD direction bug root cause: rollingProjMap was referenced in handleGeneratePotd before being declared, causing a runtime error that silently fell back to price-asymmetry direction. Added rollingProjMap Supabase fetch block inside the function with per-market avg lookup (pts/reb/ast/fg3/stl/blk + combo markets). Direction is now projection >= refLine ? OVER : UNDER with price-asymmetry as fallback only when no rolling data exists. initPotdCard rewritten: always calls generate-potd&force=1 as primary (never loads stale cached row first). Cleared stale parlay_of_day Supabase row that had wrong Clark direction baked in. |
MODEL Cache busters · POTD rolling proj direction · force=1 primary |
| v9.9.9.48 | Full Accuracy Pass — 14 Model Fixes: PropLine hardcoded key removed (fail-closed env-only). CDN no-store cache killer removed from vercel.json. POTD unified with scoreServerLeg multi-signal model. Rolling projections from player_game_stats via /api/data?action=rolling-projections. MARKET_CAL_FACTOR dampening + Over/Under bias correction in scoreLeg. Same-game correlation penalty (countSameGamePairs) across all 5 builders. NoVig edge gate (0.5pt minimum) on all builders. Steam signals feeding into scoreLeg. RETRO_WIN_RATES in POTD generator with market confidence caps. B2B → 6% projection reduction on volume markets. 3PM label multi-alias (3PT/3P/FG3/3FG). Last-name fallback team disambiguation in grading. auto-grade.js upsert error surface. Slider debounce + _scoredLegCache. Gate 1 (validate.js) made standard SOP for all deploys. | MODEL 14-fix accuracy pass · rolling proj · correlation · edge gate · steam |
| v9.9.9.45 | Confidence Score Fix — scoreLeg() Guard + Profile Embedding: Fixed critical bug where all 115 synthetic markets returned confidence:undefined, causing 0 picks to pass the 93% floor and legsBody to show "No games today" even with 23 players on the ATL/IND slate. Root cause: scoreLeg() called topPlayers.find(x => x.name === leg.name) — when name-matching failed (accent/case differences between APIs), p was undefined and all downstream p.quality, p.usage etc threw silently, returning NaN confidence. Fix 1: generateSyntheticMarkets() now embeds _playerProfile: p on every leg object so scoreLeg() gets the player directly without a re-lookup. Fix 2: scoreLeg() now resolves player as leg._playerProfile || topPlayers.find(...) || _defaultPlayerProfile(name, team) — three-tier fallback guarantees p is always a valid object. Confidence scores are now numeric for all legs. |
|
| v9.9.9.45 (base) | Dynamic Player Pool — All Available Players Captured: Replaced hardcoded 201-player topPlayers array with a fully dynamic buildPlayerPool() system. The pool now expands automatically to include every player with a live line from any source: PropLine (all 10 markets), PrizePicks (direct feed), and Underdog. Any player not in the historical base gets a default stat profile seeded with league-average values. Team codes are synced from the Sleeper roster on every 10-minute roster refresh so trades and signings propagate automatically. buildPlayerPool() is called after every API fetch: PropLine, PrizePicks, Underdog, Sleeper roster, and ESPN scoreboard (for gameStatus updates). Initial call fires at page load. This eliminates the root cause of "No games today" false negatives — previously all ATL/IND players were present in the base but the confidence model was returning undefined scores, causing all 115 synthetic markets to have undefined confidence and pass the 93% floor as NaN. Now fixed. | CORE Dynamic player pool — all live API players captured, no hardcoded list ceiling |
| v9.9.9.41 | PropLine + OddsAPI Refresh Rate — 15-Minute Cadence: PropLine Streaming Lite (100K req/day) interval changed from 5min → 15min — aligns with paid-tier refresh SLA and preserves quota. OddsAPI Business tier interval already bumped to 15min. PropLine serverless cache-control tightened from s-maxage=90 → s-maxage=60 so Vercel edge always serves near-live data on each 15min client poll. ESPN scoreboard now fetches today's CDT date explicitly (?dates=YYYYMMDD) instead of the no-param default which was returning yesterday's completed games. Schedule strip no longer shows yesterday's FINAL scores — transitions cleanly to next slate. fetchTomorrowSchedule() uses CDT-aware date math to avoid UTC midnight flip. | API PropLine + OddsAPI → 15min refresh · ESPN date fix · no stale FINAL chips |
| v9.9.9.40 | Add to Home Screen — Restored & Cross-Platform: Re-added "Add to Home Screen" button to topbar. Now always visible (was hidden by default — only showed on Android when beforeinstallprompt fired). Styled as gold pill button (SGG primary). Smart platform logic: Android/Chrome fires the native install sheet via the captured beforeinstallprompt event; iOS Safari shows a tooltip ("Tap Share → Add to Home Screen") since iOS doesn't support beforeinstallprompt; already-installed PWA (standalone mode) auto-hides the button. Button hides after appinstalled fires. iOS tooltip dismisses via "Got it" button. | PWA Add to Home Screen always visible · iOS tooltip · Android native prompt |
| v9.9.9.39 | Service Worker Fix — PWA Version Badge Always Fresh: Root cause of PWA showing stale v9.9.9.36: sw.js CACHE_NAME was static ('sgg-v1') so the SW never detected updates and kept serving the cached HTML shell. Fixed by: (1) bumping cache key to 'sgg-v9938' on this deploy — triggers immediate old-cache eviction on next visit, (2) switching the fetch strategy for '/' and *.html from cache-first to network-first — ensures the HTML shell is always fetched live so the version badge matches the deployed code, (3) API routes remain network-first, icons/manifest remain cache-first. Going forward: CACHE_VERSION will be bumped with each deploy to guarantee stale PWA installs self-update. | PWA SW network-first for HTML — version badge always current after install |
| v9.9.9.38 | Newsletter SGG Logo + Brand Update: Added She Got Game V2 logo (80px, rounded, gold shadow) to the top of the newsletter section on the app. Updated newsletter sub-copy tagline to "Know the game. Play the game. Free forever." Updated beehiiv.js email templates: daily report + alert headers now use SGG forest green gradient (#0d1f14 → #162d1e) with gold bottom border (#C9A84C) instead of dark navy. Email footer tagline updated from "Built by a fan · Validated by data" to SGG tagline "Know the game. · Play the game. · Free for the real ones." Email footer link color updated from blue (#3b82f6) to SGG gold (#C9A84C). Email body background updated to SGG dark green (#0a1510). Full newsletter section and outbound emails now on-brand. | BRAND SGG logo in newsletter · email templates rebranded forest green + gold |
| v9.9.9.37 | Full Brand Audit — Eradicate ParkRangerPicks Everywhere: Comprehensive sweep of all remaining ParkRangerPicks / Park Ranger Picks references across index.html. Fixed 26 occurrences: newsletter headline ("ParkRangerPicks Pro Insights" → "She Got Game Pro Insights"), footer disclaimer banner, all legal modal text (terms, affiliate disclosure, responsible gambling), share card canvas text (share image generator), share download filename, copy-to-clipboard text, X/Twitter tweet text, Web Share API title/text, share bottom bar sub and footer, Beehiiv newsletter link text (parkrangerpicks.beehiiv.com → shegotagame.beehiiv.com), visitor logger comment. All user-visible and behind-the-scenes strings now read She Got Game. Historical build history entries retained as accurate brand migration records. | AUDIT Full ParkRangerPicks eradication — 26 fixes across newsletter, legal, share card, footer |
| v9.9.9.36 | PWA Splash Fix — She Got Game on Install Screen: Fixed PWA install experience showing old ParkRangerPicks name. Updated manifest.json: name “She Got Game”, short_name “SGG”, description and tagline updated, theme_color updated to SGG gold #C9A84C. Created sw.js (was missing) with cache name sgg-v1 — old PRP caches automatically purged on next visit. Added 192×192, 512×512, and 180×180 SGG logo icons for home-screen install. Updated SW registration console tags from [PRP v9.9.6] → [SGG v9.9.9.45]. Replaced all remaining ParkRangerPicks references in api/beehiiv.js (6 occurrences) and api/data.js (1 comment). App now installs as “She Got Game” on iOS and Android home screens. | PWA PWA splash → She Got Game, sw.js created, sgg-v1 cache |
| v9.9.9.35 | Logo + Color Scheme — She Got Game Visual Identity: Replaced old PRP hexagonal badge with She Got Game V2 logo (green silhouette, pink hair tie, WNBA ball) in navbar, OG image, and Twitter card. Updated light theme CSS to SGG cream palette: bg #F5F0E8, surface #FDFCF8, primary gold #C9A84C, text forest green #1B4332, gold borders. Dark theme already matched SGG brand (forest green backgrounds). Full brand color system now consistent with She Got Game identity across dark and light modes. | BRAND SGG logo + cream/green/gold color system live |
| v9.9.9.34 | Brand Rebrand — ParkRangerPicks → She Got Game: Full brand identity migration to She Got Game (SGG). Updated: <title>, all Open Graph / Twitter meta tags, apple-mobile-web-app-title, navbar H1, tagline strip ("Know the game. · Play the game. · Free for the real ones"), no-games message, tip jar handles (Cash App / Venmo / PayPal → @shegotagame), footer domain reference (shegotagame.app), copyright line, share text. New tagline replaces "Built by a fan · Validated by data · Free for the everyday man." Domain: shegotagame.app. Brand colors unchanged — forest green (#1B4332) + gold (#C9A84C). | REBRAND ParkRangerPicks → She Got Game · shegotagame.app |
| v9.9.9.33 | Model Recalibration — Aggressive 93% Gate + 8 Signal Upgrades: Confidence floor raised to 93% (was 88% default, 90% gate). Rec #1: Fatigue weight 1.0× → 0.5× (B2B penalty -5pts → -2.5pts). Rec #2: Blowout scale graduated — 10-15pt = -3/-0.75, 15-20pt = -5/-1.5, 20+pt = -7/-2.5 (was binary -4/-1). Rec #3: Blowout directional — favorites get ~50% reduced penalty vs underdogs. Rec #4: Usage coefficient 0.32 → 0.24 in scoreLeg() raw formula. Rec #5: B2B gate suppresses Steals/Turnovers/Blocks picks entirely. Rec #6: Volume markets (Points/PRA/P+R/P+A) require ≥93% in blowout scenarios. Rec #7: Rebounds market hard floor raised to 93% (sim showed 26.7% HR drag). Rec #8: Assists suppressed in ≥15pt blowout spreads (garbage-time collapse). Simulated HR at 93% gate: 61.7% (n=47 picks). All 5 parlay builders updated: PP, UD, Main, DK, FD. | MODEL Sim HR 61.7% — aggressive gate, 8 signal upgrades |
| v9.9.9.31 | ESPN Next-Day Schedule + Empty State Fix: Added espnTomorrowEvents global and fetchTomorrowSchedule() — fetches tomorrow's ESPN slate when all today's games are final or no games today. Rewrote renderScheduleStrip() with buildChips() helper showing today's finals + tomorrow's upcoming slate with day label. Wired _noGamesMsg / _finalMsg / _liveGameMsg into all 7 render sites (udGrid, ppGrid, dkGrid, fdGrid, parleyGrid, legsBody, confChart). Root cause fix: all state vars (allGamesLive, allGamesFinal, noGamesToday) moved to top of render() to eliminate JS temporal dead zone ReferenceError that was crashing the entire render function silently. |
App no longer shows blank on post-game nights — automatically pivots to tomorrow's slate with game times CDT |
| v9.9.9.30 | Scheduled Cron Infrastructure + Slack Reconnect: Built full automated monitoring pipeline — 5 scheduled crons: (1) Post-Game Pipeline Health Check 1am CDT daily, (2) Weekly Model Calibration 1:15am CDT Monday, (3) High-Confidence Line Shift Alert hourly 5pm–midnight CDT, (4) API Latency & Health Monitor 7am CDT weekdays with 14-day rolling baseline in Supabase, (5) Parlay Performance Dashboard Refresh 7:30am CDT weekdays grading yesterday's picks vs actual WNBA outcomes with drift detection. Reconnected Slack DM channel (D0BAZBRMU87) for model drift alerts. All cron times adjusted for west coast game end times (10pm ET tips end ~midnight CDT). | Full observability layer — latency baselines, model drift alerts, weekly calibration reports, and line movement notifications fully automated | v9.9.9.29 | PropLine Pro + OddsAPI Business Tier + Last-Known-Line Cache: Rewrote /api/propline.js — now hits real prop-line.com Pro API (25K req/day, 90s refresh) with full WNBA market set: Points, Rebounds, Assists, 3PM, Steals, Blocks, PRA, P+R, P+A across UD + PP + NoVig + Bovada + Pinnacle + DK + FD. Upgraded /api/odds.js to OddsAPI Business tier — real DraftKings + FanDuel player prop lines via event-odds endpoint (was returning game lines only). Client fetchOddsAPILines() upgraded: type=player_props, 9 market keys mapped. Added lastKnownPropLines/lastKnownDkPlayers/lastKnownFdPlayers snapshot cache — when lines go dark mid-game, DK/FD/UD/PP cards restore from last good fetch instead of going blank. propLinesLocked flag triggers PRE-GAME LINE badge on every platform card, player table row, and main parlay leg so users know the line was captured pre-tip. PROPLINE_API_KEY set as Vercel env var. | DATA Real DK/FD props live + lines survive book closure |
| v9.9.9.27 | Post-Game Intelligence + Full QA: Added allGamesFinal state detection — when all ESPN games go final, every section (player table, qualified parlays, confidence chart, UD/PP/DK/FD grids) now shows a warm "Tonight's games are in the books!" message with next-drop date, grading status badge, and a gold "Get tomorrow's picks by email" CTA pill. KPI Today's slate delta also updates to "✅ All N games final — grading now". Full functional live QA: ESPN scoreboard (6 games confirmed), OddsAPI (8 events, 19,508 quota remaining), PrizePicks (485 lines live), PropLine (OddsAPI event routing), Supabase track-record (9 entries), POTD API (3-leg parlay confirmed), log-visit (200 OK), Beehiiv (405 on GET = correct). PropLine player_props routed through event-specific endpoint — EVENT_NOT_FOUND when game mid-progress is expected behavior. |
SMART UX Post-game state handled across all 6 sections + full data source audit |
| v9.9.9.26 | Live Game Intelligence + Topbar CTA Polish: When all ESPN games are in-progress, player candidate table, qualified parlays, confidence chart, and all 4 platform grids (UD/PP/DK/FD) now show a clear "🏀 Games are live right now!" message with LIVE badge and auto-grade reminder — no more empty/broken UI during game time. Topbar newsletter CTA redesigned to compact pill (border-radius 999px) — "📩 Free picks" label + slim email input + Join button. Eliminates the large padded CTA box on desktop that made the topbar feel cluttered. | LIVE UX Smart live-game state across all sections + clean topbar |
| v9.9.9.25 | Desktop Layout + Logo Recovery: Logos baked as inline SVG data URIs — never lost on redeploy again. Created manifest.json + apple-touch-icon.png. Fixed topbar right column desktop overflow. Parlay-tag pills fixed (explicit line-height, no blob rendering). Desktop breakpoint overrides for topbar at 769px and 1101px. brand flex-shrink:0 so logo never squishes. | FIXED Cross-browser desktop + logo always present |
| v9.9.9.24 | Mobile Optimization + POTD Stale Fix: Full mobile-first audit. Topbar right goes full-width on phones. Newsletter CTA flex input fills available width. POTD ESPN cross-check after loading legs — if all leg teams STATUS_FINAL, shows "Tonight's games are in the books" instead of stale picks. Theme persistence via localStorage (dark/light survives reload). iPhone safe-area-inset-bottom on scroll bar. Footer newsletter stacks to full-width column on mobile. Modals capped at calc(100vw - 2rem). Typography: KPI labels uppercase+bold, table headers uppercase, parlay tags consistent weight. | MOBILE-FIRST Full responsive audit — optimized for where users live |
| v9.9.9.23 | API Infrastructure Recovery + Analytics: Rebuilt all 8 API serverless functions from scratch after project migration (odds, parlay-of-day, prizepicks, propline, track-record, beehiiv-subscribe, auto-grade, log-visit). Set all env vars on wnba_full: ODDS_API_KEY (paid tier), SUPABASE_URL, SUPABASE_SERVICE_KEY, BEEHIIV_PUB_ID. Vercel Analytics + Speed Insights injected. Deployment protection disabled for public access. Corrected ODDS_API_KEY to paid-tier key. | INFRA All APIs live — paid-tier OddsAPI for real DK/FD prop lines |
| v9.9.9.22 | POTD Games-Underway Catch Block: ESPN scoreboard fallback when POTD API returns empty — if any game is STATUS_IN_PROGRESS, shows "Games are underway — enjoy tonight's action!" message with next-drop time instead of blank card. | UX No more blank POTD card during game nights |
| v9.9.9.21 | Newsletter Capture + Submission UX: Top newsletter CTA in topbar (gold-bordered inline form, auto-hides after subscribe, skips if already subscribed). Post-submission modal fires 1.2s after POTD lock-in — skippable. Duplicate lock-in guard via localStorage (prp_potd_locked_YYYY-MM-DD). Checkmark toast on lock-in. Lock In button turns green with ✓ on success. | GROWTH Newsletter capture at every touchpoint — no duplicates |
| v9.9.9.20 | Vercel Project Migration: Migrated from wnba-v700 to wnba_full project. Alias wnba-v700.vercel.app → wnbafull.vercel.app set. Vercel Analytics enabled. Deploy SOP established: syntax check → deploy → alias → live QA. | DEPLOY Clean CI/CD pipeline established |
| v9.9.10 | OddsAPI Live Player Count KPI: Added real-time DK + FD player line count logging. KPI grid now shows live OddsAPI player counts after lines load. Render() triggered after DK/FD lines load to update checkboxes. Console log: [v9.9.10] OddsAPI: N lines, DK=X FD=Y for diagnostics. | DATA Live paid-tier DK/FD line counts visible in KPI grid |
| v9.9.9.16 | Confidence Tier Badge Bolder Styling: ELITE (≥95%) and HIGH (≥90%) badges made larger and more eye-catching across all 4 platform card types. ELITE badge: gold (#E8C46A) with thicker border. HIGH badge: green (#4ade80). Font-weight 900, letter-spacing .06em. Removed badges below 90% floor — all legs already filtered at 88% minimum confidence. | UX Elite confidence stands out immediately for users |
| v9.9.9.14 | Shared Platform Leg Renderer (DK + FD): Unified renderPlatformLeg() function replaces duplicate DK/FD card HTML builders. CONSENSUS badge shows PropLine consensus line if available, otherwise confidence %. FORM badge shown for players with last-N-game form blending active. DK badge orange (#ff7300), FD badge blue (#00aeef). Platform line pulled from live dkPlayers/fdPlayers maps with fallback to model line. | CODE DK/FD cards now consistent with UD/PP card style |
| v9.9.9.13 | Live Data Source Status Monitor: Real-time status indicator showing which data sources are active (OddsAPI, PropLine, PrizePicks, ESPN). Colored status dots — green for live, amber for degraded, red for failed. Source latency tracked. Visible in sidebar for transparency into model data freshness. | ONLY APP Users see exactly which data sources are live |
| v9.9.9 | Parlay of the Day Card: AI-generated daily best parlay displayed at top of app. Pulls from /api/parlay-of-day serverless endpoint. Shows player, team, market, direction, line, confidence tier. Avg confidence pill. Lock In button with duplicate guard (one per day via localStorage). Share button. Post-lock newsletter modal. Styled with forest green gradient background and gold borders — premium card feel. | ONLY APP Daily AI-curated parlay — no other free WNBA tool has this |
| v9.9.8 | Hit Rate Banner: Live public win-rate display at top of parlay section. Fetches from /api/track-record — shows season W-L record, win %, last-7-days breakdown, and confidence tier breakdown (ELITE/HIGH/MOD hit rates). Color-coded rate: hot (≥60%), warm (≥50%), cold (under 50%). Graceful empty state for early season. Launched season tracking June 16, 2026. | TRUST Public track record builds credibility with users |
| v9.9.6 | PWA Install Support: Service worker registered (/sw.js) — app installable to iOS and Android home screens as a native-feeling PWA. beforeinstallprompt captured — "Add to Home Screen" button appears in topbar when browser allows. appinstalled event hides the button after install. manifest.json with forest green theme, portrait orientation, WNBA Parlay Builder description. | MOBILE Full PWA — installs to home screen like a native app |
| v9.9.2 | Track Record API Refactor: /api/track-record now returns pre-calculated stats object — total, wins, losses, rate (%), last7 object (wins/losses/rate), and tiers breakdown per confidence tier. Eliminates all client-side stats computation. Hit Rate Banner and Public Track Record section both consume the same unified stats payload. Supabase query optimized for season-to-date filtering. | INFRA Single API call powers all track-record UI components |
| v9.9.1 | WNBA Ball SVG: Replaced external wnba_logo.png image with inline SVG basketball. Official red/white/blue WNBA colors. Radial gradient shading, curved panel lines, blue side panels, white center strip, specular highlight. No external file dependency. Mobile-friendly at any size. Red+blue drop shadow glow on hover. | |
| v9.9.0 | Pick Tracker UI Upgrade: W/L result badges upgraded to pill style with color fills. Confidence tier badges (ELITE/HIGH/MOD) made larger and more visible. Live W-L summary pill injected into Track Record header after data loads. Current streak display (W3 / L2 etc.) shown above breakdown. Streak calculated from ordered picks array — consecutive same result from most recent pick. | |
| v9.7.1 | DK + FD Share Buttons: Added window._dkParlaysCache and window._fdParlaysCache to renderDkParlays/renderFdParlays. Share button now present on all 4 platform card types (UD, PP, DK, FD). Refactored DK/FD track buttons to use cache index pattern (same as UD/PP) — eliminates inline JSON.stringify in onclick. | |
| v9.7.0 | Public Parlay Share: Share button on every parlay card. Generates a unique URL with parlay encoded in query string. Share modal with visual card preview, copy link, and native share sheet (iOS/Android). Shared URL opens a read-only parlay overlay — anyone with the link sees the legs. Base64 encoded, no backend needed. | |
| v9.6.0 | Beehiiv Direct Subscribe Integration (v9.8.0): Subscribe form now POSTs directly to Beehiiv API via /api/beehiiv-subscribe.js server-side proxy. API key kept server-side. Inline success/error feedback — no new tab, no page leave. UTM-tagged: utm_source=wnba-app, utm_medium=in-app-form, utm_campaign=newsletter-cta-v980. Welcome email auto-sent on new subscribe. Existing subscribers handled gracefully. BEEHIIV_API_KEY + BEEHIIV_PUB_ID added to Vercel env. Newsletter Polish (v9.7.2): Replaced minimal one-liner newsletter bar with full polished CTA section — gradient background, gold radial glow, eyebrow label, headline, tagline sub-copy, 5 feature perk pills, email subscribe form (pre-fills Beehiiv URL, feedback on submit), tip jar quick-links, legal footer links, © line. Mobile-responsive at 480px breakpoint. Legal Protection Layer (v9.6.0): Dismissible sticky disclaimer banner (Entertainment Only, remembers via localStorage). Terms of Use modal, Responsible Gambling modal (1-800-522-4700 hotline + 3 resource links), Affiliate Disclosure modal (FTC-compliant). Consolidated legal footer. Affiliate disclosure note near platform toggles. © 2026 She Got Game · Know the game. Play the game. · Free Forever. | |
| v9.5.0 | Public Track Record: Supabase-powered public W/L record section. Filterable by market, platform, date range. Confidence tier breakdown (ELITE/HIGH/MOD hit rates). Per-market breakdown. Shareable record card. Live from /api/track-record.js proxy. | |
| v9.4.0 | Server-Side Scoring Engine + 3 New Signals: Opponent Fatigue Overlay (mirrors Travel Fatigue model against defending team), Blowout Risk Flag (bidirectional, abs spread ≥10, volume market penalty), Arena Context Phase 1 (home/away proxy for stars >15 PPG). Four proprietary models now active: Mental Load, Travel Fatigue, Arena Context, Spatial Quality of Attempt. | ONLY APPFREE FOREVER Opponent fatigue + blowout risk + arena context — found nowhere else |
| v9.3.0 | API Key Security Migration: All API keys moved server-side via Vercel serverless proxies. OddsAPI, PropLine, Supabase keys no longer exposed in client-side JS. New proxies: /api/odds, /api/propline. Keys stored as Vercel environment variables. Zero functional change — all data sources work identically. | SECURED API keys server-side only — production-grade key management |
| v9.2.5 | DraftKings + FanDuel Platform Toggles: DK and FD toggle buttons added alongside Underdog and PrizePicks selectors. Parlay cards built using real DK/FD line values from OddsAPI. Players without a live DK or FD line on that market are excluded. Four platforms now fully toggleable. | ONLY APPFREE FOREVER All 4 major platforms in one free tool — shop lines without switching apps |
| v9.2.0 | Multi-User Pick Tracker: Supabase backend wired — every graded leg synced to cloud database. Weekly W/L dashboard with 7-day hit rate. Dual-write architecture: localStorage + Supabase with graceful fallback. Mental Load calibration loop now feeds permanent observation dataset. | ONLY APPFREE FOREVER Cloud-backed pick history — data persists across devices |
| v9.1.6 | Player table fix: Removed loading placeholder race condition — bootstrap now seeds liveGameStatus synchronously before any async fetch. ESPN 0-event guard prevents bootstrap state from being wiped on CORS block. Players and parlay cards now populate immediately on load. | FIXED Slate-day player visibility fully restored |
| v9.1.5 | Synchronous bootstrap IIFE seeding liveGameStatus before fetchLiveData. KPIs fixed to 161/395. Schedule strip functional. Safety net 6s render fallback added. | Partial fix — KPIs correct but player table still broken (loading placeholder race) |
| v9.1.1 | ParkRangerPicks rebrand: Forest Green + Gold color scheme, V2 hexagonal ranger badge logo, WNBA logo gold-tinted, Why We're Different strip, section renames, mobile overflow fixes | ONLY APPFREE FOREVER Fan-first identity — brand built around the game |
| v9.0.0 | Full commercial launch: 4-source consensus KPI card, The Odds API fully wired, Tip Jar (🍺 Buy Me a Beer), Underdog affiliate, Pro Insights newsletter opt-in, full retrograde + Mental Load + Steam Move stack live | ONLY APPFREE FOREVER Most complete free WNBA parlay tool ever built |
| v8.8.0 | True Matchup Grades (last-5 ESPN box scores, per-market per-opponent), Full STEAM MOVE time-series detection | ONLY APPFREE FOREVER Live matchup context + line-movement signals in a free tool |
| v8.7.0 | 5ive-R Retrograde Database — 337K records, 308 players, 1,453 games across 2020–2025 seasons. 271 players embedded with min-20-game filter. | ONLY APPFREE FOREVER 5-year proprietary retrograde DB — no free app has this depth |
| v8.6.0 | Mental Load auto-calibration — MENTAL_LOAD_WEIGHTS shift from real graded pick outcomes (min 10 graded legs). Self-learning loop via localStorage. | ONLY APPFREE FOREVER Model learns from your real results — no paid app offers this free |
| v8.5.0 | Mental Load Indicator — 4-signal composite (news tone, arc fatigue, rest focus, veteran resilience). Badges: LOCKED IN / DISTRACTED / SLEEP FLAG | ONLY APPFREE FOREVER Only free WNBA app modeling cognitive/emotional readiness |
| v8.0.0 | Travel Fatigue model (road trips, B2B games, travel distance), PrizePicks 4-source consensus, The Odds API integration | ONLY APPFREE FOREVER 4-source consensus + fatigue modeling — unique in free WNBA tools |
| v7.9.0 | Sleeper API integration — player injury/news sentiment feed, roster transaction monitoring | ONLY APPFREE FOREVER Real-time roster intel most free apps ignore |
| v7.6.0 | Recent Form Blend (last-5 rolling avg, 35% weight) + Dynamic OppDef from live ESPN game log | ONLY APPFREE FOREVER Hot/cold streaks + live defensive context — not stale season averages |
| v7.5.0 | Second Spectrum spatial QoA — true logistic-regression creation difficulty, 6 shot-clock buckets, 4 defender tiers | ONLY APPFREE FOREVER Spatial tracking inputs — most apps use raw PPG only |
| v7.4.0 | ESPN live stats + QoS/QoA foundation, PropLine consensus integration, 201-player pool | ONLY APPFREE FOREVER Free multi-source consensus at launch |