Side Projects

I Built a Real-Time Auction App Because Our Spreadsheet Had One Too Many Versions

April 2026 · 5 min read

Six guys, a $447 pot, and a Google Sheet that three people had edited simultaneously. There had to be a better way to run a Calcutta.

Every year, same thing.

Someone drops the Calcutta spreadsheet in the group chat. Someone else opens it on their phone, edits the wrong cell, and now Scottie Scheffler is worth $0 and the payout column is broken. A third person has already downloaded a different version. Pat is texting "which one is current" and nobody knows.

We're six guys — Drew, Falls, Gula, A-aron, Jake, Pat — doing a Calcutta for The Masters every April. A Calcutta is a betting format where you auction off teams or golfers to the group, and whoever owns the winner takes home the pot. It's been around forever. It's genuinely more fun than fantasy sports. And for twenty years, every Calcutta in the world has been run out of a Google Sheet that someone's cousin built in 2011.

I decided to fix it.


PlayCalcutta is a real-time Calcutta auction app that runs entirely in the browser. No accounts. No downloads. No password. The admin creates a game, shares a six-character code, and everyone's in. The auction runs live — bids update on every phone instantly — and when the tournament starts, the leaderboard pulls live scores from ESPN and recalculates automatically.

The whole thing runs on Firestore, which is why the real-time part actually works. There's no server, no polling, no "refresh to see new bids." When A-aron throws $22 at a Rory McIlroy lot, everyone sees it immediately. When I bid $23, he sees that too. It works like a group chat, except the thing you're fighting over is a pairing of Rory McIlroy and one other guy from the OWGR 11–25 bucket.

"He overpaid for Rory. We all knew it at the time."

The Masters version has some structure to it. The 2026 field — 91 golfers — gets grouped into lots by world ranking. Top 10 in the world get solo lots: just Scottie Scheffler, just Rory, just whoever's sitting at number three. OWGR 11–25 get paired with one other golfer. 26–50 go in triples. Everyone ranked 51 and below gets grouped into fours. Amateurs get their own lot, because someone always wants to bid $3 on the amateur kid who makes the cut and finishes 35th.

Payout structure: 1st–10th place finishes (25% down to 2%) · Round 1–4 lowest score bonuses (2% each) · Best finish amateur (2%) · Total pot: $447

Payouts go to first through tenth place, plus a 2% bonus for each round's lowest score, plus a best-finish amateur bonus. With six people bidding and a $447 total pot, the math gets complicated fast. The app does all of it automatically.

The score sync works like this: admin hits a button, the app pulls the current ESPN golf leaderboard, matches golfer names to lots, finds the best-positioned player in each group lot, and updates every position on the leaderboard. Ties split the payout evenly. It takes about two seconds.


I didn't build this to sell. I built it because the spreadsheet was embarrassing and The Masters only comes once a year and I didn't want to spend 20 minutes of it explaining to Pat which version of the file was correct.

The stack is about as stripped down as it gets. Vanilla JS, Vite, one HTML file, Firestore for the database, Netlify for hosting. No backend. No accounts. No payment processing — you still Venmo each other at the end, because that part is fine.

Six people used it this year. The auction took 40 minutes. Everyone watched the leaderboard update from their phones on Saturday afternoon when Scheffler went on a run.

Nobody asked which version of the file was current.

That's the whole win.