From the stands to the semantic layer.
178 games I was actually in the stands for — joined to the historical record, modeled in dbt on BigQuery, tested, and documented down to the lineage graph. My grandfather kept score by hand. I carried the tradition. This is the same diamond, a generation later, answered with new tools.
The whole project is live and browsable — models, tests, and the full lineage graph.
KEEPING SCORE is a personal data project: every MLB game I've ever attended — 178 of them, going back to childhood — turned into a queryable, tested, documented dataset. My attendance record joined to Retrosheet's historical game logs, modeled in dbt on Google BigQuery, with a semantic layer on top so the questions can be asked in plain language.
It started analog. My grandfather kept score by hand at the ballpark, and I grew up doing the same — pencil, scorecard, the little diamond you fill in when someone reaches base. Those scorecards, his and mine, are the seed. This is what happens when you point modern data tooling at a shoebox full of them.
Five pieces, each doing one job:
The move here: treat a personal archive like production data. Sources, staging, marts, tests, docs — the same discipline a team would use, applied to a shoebox of scorecards. The dataset is sentimental; the engineering is real.
A scorecard answers questions. Who's up? What did he do last time? How did this game actually go? Fans have asked the same handful of questions for a hundred years.
The tools to answer them keep changing. First the scorecard in your lap. Then the box score in the morning paper. Then the stat sites. Now: a semantic model an agent can query in plain English.
Same questions every baseball fan ever asked. New tools answering them — scorecard, box score, now agentic. This project is the literal proof of that thesis. The same diamond my grandfather filled in by hand, now a tested data model with a lineage graph of its own.