← All posts

Creating a personal bracket tracker

I built a personal software solution that tracks my march madness games.

It's a fun and experimental project that explores agents, automations, and personal software development. It took about 1 hour to build. This repo has the source code.

Background

Every March, I compete with friends in a bracket pool for the NCAA basketball tournament. The pool has complex rules and uses a gnarly spreadsheet to store matchups and results.

I needed a way to quickly view my matchups on my phone so that I could easily follow along. I wanted to spend as little time as possible building it.

How it works

Initial ETL

  1. dropped the pool CSV into claude, extracted matchups relevant to me
  2. transformed data into a simple list, scraped web for game times and broadcast networks
  3. spun up a simple nextjs app to store the list and display my matchups
  4. deployed to vercel with a public domain

etl-diagram

Regular sync

  1. set up codex automations (agent cron jobs) to scrape spreads, score, and results throughout the tournament. codex updates the data in the nextjs app code directly and pushes to github. vercel listens for changes and deploys to prod.

sync-diagram

Reflections

  • Personal software era - With today's capable coding agents and abundant access to dev tools and compute, quickly building throwaway software for temporary and personal use cases is not only possible but fun.
  • Different requirements - Building personal software is a totally different ballgame. Since I built this for an audience of one, a shelf life of 3 weeks, and a low-risk use case, I was able to make design decisions that only make sense for this project (storing data in code, agent web scraping isntead of a deterministic integration, agent updating code to sync data). A public multi-tenant application or serious long-term solution would look very different.
  • Same patterns, new ways of working - system integrations, web services, ETL, and cron jobs are nothing new. However, agentic tools provide new and powerful ways to implement them. Instead of parsing the excel sheet myself and authoring the dataset (or writing a program to do so), I pointed an agent at the task. Instead of analyzing a data source and writing an integration for regular syncs, I set up a cron job to trigger an agent to find the data and update application data. These decisions dramatically accelerated development. Knowing when and how to use agents is a powerful skill to add to your toolkit.