Before there was an app

Paper Brackets to a Real Web Application

Every other page under /about documents what Tourney is. This one tells the story of why it needed to exist — fifteen-plus years of a pool that worked, more or less, on tools that were never built for the job, until this year.

Three-panel cartoon: squinting at agate type in a newspaper fifteen years ago, typing random names into a blank spreadsheet two years ago, and this year, relaxed, while the scheduler checks ESPN automatically ~15-20 years ago USA TODAY (agate type, illegibly small) ?! "whoever squints hardest wins" (pen & paper, one bracket, no re-dos) 2 years ago (a completely blank grid) ? ? ? "just type a name in. any name." picked the same guy twice? who's counting. (spelled "Zach Edey" four different ways) This year it just... runs itself "the scheduler checks ESPN so I don't have to" live in minutes, not "maybe Wednesday"

01The paper era

Fifteen, twenty years ago, running this pool meant a printed bracket, a pen, and a newspaper.

Not a metaphorical newspaper — an actual, physical copy of USA Today, spread out on a table, because that was where you could reliably find player stats printed in agate type small enough to make your eyes hurt. You'd scan down a column of numbers, cross-reference it against a name on your bracket, and make a pick. Whoever had spent the most time with that newspaper before Selection Sunday usually had the edge — not because they understood basketball better, but because they'd done more manual lookups than anyone else in the pool.

There was no live anything. You filled in your bracket once, in pen, and then you watched games on television like everyone else in the country and kept your own private tally in the margins.

02The free-form spreadsheet era

Eventually the paper became a spreadsheet — but a blank one.

You'd get a file with no structure in it at all: a link to a list of every player in the country, and an empty grid. You typed your own picks in yourself, by hand, into cells that had no idea what a "valid pick" even meant. Nothing stopped you from picking the same player twice, or a player who wasn't actually in the tournament, or misspelling a name badly enough that whoever was tallying scores by hand had to guess who you meant. The newspaper was gone; the manual labor wasn't.

03The structured spreadsheet era

The next improvement fixed exactly one problem: the blank page.

Someone pre-populated the spreadsheet with the actual players and teams for the year, so at least you were picking from a real, valid list instead of typing free text into a void. Entry got easier. Everything downstream of entry — scoring, standings, correcting a mistake — was still exactly as manual as it had ever been.

04The recurring pain, all three eras

Across paper, free-form spreadsheet, and structured spreadsheet alike, one problem never went away: getting real numbers during the tournament was hard.

The spreadsheet got updated once. Maybe by Tuesday. Sometimes not until Wednesday — days after the games that decided those numbers had actually been played. Every update meant someone sitting down, looking up box scores by hand, and re-typing an Excel formula. There was no version of "check the live standings" during a game, or even the same day as a game. You played the pool, and then you waited, sometimes most of a week, to find out how you'd actually done.

05Two years ago: the modern-manual era

Two years ago, Derek took the pool over — and modernized the tools without eliminating the underlying problem.

Entry moved to a Google Form. A Python script "massaged" the submitted data into shape. The results lived on a Google Site, fed by a Google Sheet, which in turn fed a Google Looker Studio report for something close to live standings. It was a real upgrade — no more hand-typed Excel formulas, no more newspaper — and it was still, underneath all of it, a manual pipeline: updated once each morning, after the previous day's games were already long over. A better car, still running on the same road.

06This year: the leap

This year, every one of those manual steps got replaced by something that runs itself — not a better spreadsheet, but a real, live web application.

  • From "updated once a day, maybe" to real, automated, continuous updates. The scoring scheduler checks ESPN every few minutes during live tournament windows, all day, with no one touching a spreadsheet at any point — see Big Picture §05.
  • From a static report to a living, visual bracket that colors in as the tournament unfolds, projects forward for games that haven't been played yet, and flags the earliest round two of your own picks could collide — see Big Picture §06.
  • From "type your own picks into a blank cell" to a real, validated draft experience — a tabbed entry form with live pick counters and guards against submitting an invalid bracket, the direct descendant of that empty free-form spreadsheet from Part 1 — see Player Experience.
  • From "no analysis, just the raw numbers" to a real predictive-scoring research effort — a dedicated analytics warehouse, kept deliberately separate from the live system, exploring what actually predicts a good draft pick — see Data Warehouse.
  • From nothing to AI-generated daily commentary, run through two fundamentally different kinds of model side by side — a hosted foundation model and a self-hosted open-weight model on private hardware — as a genuine build-vs-buy comparison, not a gimmick — see AI: Foundation vs. Open-Weight.
  • From one person's Python script to a real engineering practice — automated tests, an independent automated review pass, and a CI/CD pipeline that gates every single deploy — see The Development Process.

None of this erases where it came from. The player pool, the "draft players not teams" idea, the whole shape of the game — that's the same pool it always was. What changed is everything underneath it: the distance between "a game just ended" and "your standing reflects it" went from days to minutes, and the distance between "an idea for the pool" and "a real, tested, running feature" went from one person's evening with a spreadsheet to an actual development process with gates that catch mistakes before players ever see them.

07Where to go from here

This page told the story. The rest of /about is where the story gets specific.

  • Overview — the map to everything else.
  • Meet the team — how a solo developer builds and ships all of this safely.
Part 1 of this page (the pre-Tourney history) is Derek's own account, told with real narrative license — there is no codebase to check it against. Part 2 (this year's leap) holds to this site's usual rule: every specific capability named is real and linked to the page that proves it.