06

Fantasy Baseball Dashboard

Pulls live Yahoo Fantasy data every 15 minutes and turns 10 roto categories into a real-time strategy dashboard.

based-gods-dashboard.vercel.appOPEN ↗
Fantasy Baseball Dashboard screenshot
LOADING...
CHECK IT OUT

THE STORY

I play in a competitive 10-team OPS roto league on Yahoo Fantasy. Roto scoring means you get points for your rank in each of 10 categories — 10 points for 1st, 1 point for last. The target is roughly 8 points per category, which means you're playing for 3rd place in most of them, not 1st. Yahoo's UI doesn't think about the game this way at all. Figuring out whether a player is helping you means toggling between views and scanning numbers across a table that wasn't designed to answer the question you're asking. The standings page is worse — it tells you where you are, not how comfortable you are. How close is the team above me in ERA? How many home runs to jump a rank? None of that is on the screen. So I built the thing I actually wanted: a dashboard that answers those questions at a glance.

KEY DECISIONS

No database — JSON as the data layer

Every tracker run writes two JSON files to GitHub. Vercel serves them statically. No backend, no infrastructure to manage. The tradeoff is no queryable history, but for a tool refreshed every 15 minutes that's fine.

Health scoring over raw ranks

3rd place with a big gap below you is comfortable. 3rd place with someone one stat away is not. Cards use a composite score — 60% rank, 40% gap to the team below — so you can read the board without doing the math.

IP-weighted pitcher grading

A 6.75 ERA over 3 innings is noise. The same ERA over 40 innings is tanking your category. Grades scale by innings pitched so the matrix is actually useful instead of just alarming.

K/IP instead of raw strikeouts

Grading relievers on total K made every bullpen arm look bad. K per inning puts closers and starters on the same scale — a closer with 1.1 K/IP grades green regardless of whether his total is 30 or 150.

Innings cap as a real constraint

In a 1500-IP roto league you're competing on efficiency, not volume. The pitching table makes that explicit before September.

RESULT

A live fantasy baseball dashboard deployed on Vercel, updated every 15 minutes via a cron-driven Python tracker on a home Mac mini. Covers category rank tracking with daily trend lines, roster grading against per-slot targets weighted by playing time and innings pitched, pitching efficiency analysis relative to the innings cap, and a full league standings view with per-category breakdowns.

STACK

FRONTEND
Vanilla HTML, CSS, JavaScript (no framework)
DATA LAYER
Python tracker, JSON flat files
API
Yahoo Fantasy Sports v2 (OAuth 2.0)
HOSTING
Vercel (static)
NETWORKING
Tailscale
AUTOMATION
macOS cron, Git push on every run
← PREVIOUSSports Mini