Back to projects June 2026 - Present

Gorilla Draft: Fantasy Leagues That Draft Teams, Not Players

A fantasy league where managers draft whole teams across ten sports, live on the web and available on the App Store.

  • TypeScript
  • React
  • Node.js
  • SQLite
  • Capacitor iOS
  • Server-Sent Events
  • Sports Data
Gorilla Draft: Fantasy Leagues That Draft Teams, Not Players

Gorilla Draft is a fantasy league in which managers draft teams rather than players, across ten sports from MLB and the NFL to the Premier League. You take the Yankees, not Aaron Judge, and every win those teams earn becomes points. I designed its scoring so that teams from sports with different season lengths compete on equal terms. It is live on the web and available on the App Store.

The card prices every sport’s best projected season at 1,000 points

Since a baseball team plays 162 games and a college football team plays 12, equal points per win would hand the league to whoever drafts baseball. The card prices each sport so its best team’s projected season comes out at 1,000 points. A baseball win is worth 10.24 and a college football win 87.72. The card is live.

Two panels. The left is a bar chart of published points per win across ten sports, from 10.24 for baseball up to 166.67 for the Champions League. The right lists each sport's benchmark season and shows the product of benchmark and rate as exactly 1000.0000 points on every row.

Left, points per win under the card. Right, each sport’s projected best season, 1,000 points in every row.

Before choosing this rule, I tested the simpler one of 1,000 divided by games played, since it needs no projection, and rejected it. Under that rule the best college basketball team would bank 1,329 points and the best baseball team 771 for the same achievement, winning their sport. A title team simply wins a different share of its games in each sport.

One React build runs the website and the app

The website and the iOS app share one React build. The app ships that bundle and connects to gorilladraft.com, rather than opening the website in a browser.

Three iOS screens side by side: a league home showing live games with each row credited to a manager, a live draft board with a snake order and a pick clock, and a standings table with tied managers shown as joint third.

Three screens from the iOS app: a league’s live games, the draft board, and the standings.

The server owns the draft clock, the pick order and the automatic picks, so a manager who closes a laptop mid-draft does not stall the room. Live updates use server-sent events, a one-way stream from the server to the browser, because those updates only travel in that direction. The server itself is small: it stores everything in SQLite through Node’s built-in driver and runs on one machine behind a Cloudflare tunnel. The app’s own look comes from an iOS-only stylesheet that the build includes only in iOS mode, so the website’s CSS never contains it.

Public feeds and preseason estimates are the limits

Game data comes from ESPN’s public endpoints and the MLB Stats API, not licensed feeds, so ingestion caches responses, flags stale data, and refuses to write an outdated season. The card also depends on preseason estimates of each sport’s best team. An error in that estimate misprices every team in that sport for the whole season.