building MeshGolf: a scorecard that works without the internet
What I’m building, why nearby scores use Bluetooth LE, and where the prototype goes next.
I’m working on MeshGolf, a small Android scorecard for friends playing a round together. The main job is deliberately boring: make score entry fast, keep the current hole obvious, and show how the nearby group is doing without requiring an account or internet connection.
The Android prototype can track an 18-hole round, broadcast a player’s current hole and total strokes through Bluetooth Low Energy advertisements, and scan for the latest score snapshots from nearby players. It does not need location permission, cloud storage, or a group chat running beside the scorecard.
Why Bluetooth LE
A golf group is already in the same place. Sending a tiny score snapshot to nearby phones through BLE fits that situation better than routing every update through a server. It also keeps the live round useful where mobile coverage is weak and makes privacy the default rather than a setting buried in a menu.
The name needs one important qualification: current MeshGolf uses BLE advertising and discovery. It is not the Bluetooth SIG’s managed Bluetooth Mesh profile, and it does not relay messages across multiple hops. Every phone still needs to be within radio range. A real relay mesh would need packet IDs, TTL rules, retransmission, persistence, reconciliation, and a lot of field testing across different Android hardware. I would rather describe the current system accurately than claim architecture that has not been built.
More than a radio experiment
The difficult part is not adding one stroke to an integer. A scorecard gets used outdoors, one-handed, in changing light, while people are trying to keep the round moving. That changes the design priorities:
- scoring controls need large touch targets and immediate feedback;
- the current hole must win the visual hierarchy;
- selected and current states cannot depend on colour alone;
- English and Icelandic need equal treatment;
- saved rounds must survive interruption and remain exportable;
- nearby sharing must explain clearly what leaves the phone.
I’m keeping the product free and open source. No subscriptions, paid gates, ads, or sale of user data. If it ever receives funding, that will be through voluntary contributions.
Current shape
MeshGolf now has a Kotlin and Jetpack Compose Android app, a bilingual static website, and a shared design system for both. The visual direction is bright and friendly, inspired by playing in Icelandic landscapes, but the in-round UI stays compact and practical.
The next foundation is local course and round persistence: versioned course and tee data, resumable rounds, history, deletion, summaries, and export. The local database will remain authoritative during play. BLE field testing comes after the packet identity, expiry, and reconciliation rules are explicit enough to test rather than guess.
That is the project today: a working local-first prototype, a constrained radio model, and plenty of real-world testing still ahead. I’ll write more once it has survived a few rounds on different phones and the failure modes are facts, not assumptions.