Golf Games
A mobile-first scorekeeper for nine different on-course golf game formats.
Why I built it
I love playing golf with friends, but keeping track of certain game formats can be a major hassle using pen and paper scorecards. Additionally, we invented a new game format that had some unique scoring rules and wanted a way to easily manage it. I built this project to solve those problems and make it easier to play fun games on the course. The ultimate goal is to keep it simple enough to use during a round while still supporting a variety of formats.
What it does
Currently, nine games are supported - with more to come as I continue to develop the app. Each has its own scoring engine and hole-by-hole UI. Rounds persist locally, handicaps are computed per the World Handicap System, and finished rounds can be shared via a generated URL.
UX decisions
The app is designed to be used on mobile devices, so I focused on creating a clean and intuitive interface that minimizes the number of taps required to enter scores. The main screen shows all players, holes, and games in a single view with quick access to score entry. Every single round I play results in at least one feature request or UX improvement, so it’s been a fun ongoing project to evolve the app based on real-world use.
Architecture notes
The game logic is isolated under `_lib/<game>` with pure scoring functions covered by Vitest. Each game has a matching `_hooks/use-<game>.ts` that owns state and persists it through a shared storage layer. UI lives in `_components/<game>` so a new game is roughly: add a lib, a hook, and a component folder. The whole thing is installable as a PWA.