TeeOff Club
- Role
- Design & build, solo
- Timeline
- Mar – Oct 2026
- Platform
- iOS
- Status
- Live on the App Store
- Built with
- Flutter · Supabase · Swift



Introduction
A golf scorecard that keeps the score, so the group can keep playing. Golf is a four-hour walk with friends. For most casual players in Kenya, the score still lives on a paper card, along with an argument about who got a five on the seventh.
TeeOff Club is the scorecard I wanted in my own pocket. It is quick to fill in between shots, live for everyone in the group, and honest about what it knows. I designed and built it on my own, from the first sketch to the App Store.
01The brief
Less admin, more golf.
Most golf apps are built for the stats-obsessed or for club administrators. A casual group needs far less: enter a score in two taps, see where everyone stands, and never lose a round to a bad connection.
That set the rules for every screen. It has to work with one hand, outdoors, between shots, with nothing to set up before the first tee. The words are plain throughout. Even the commit messages follow that rule.
Everything a golfer needs. Nothing they don’t.
teeoffclub.app



02Key decisions
Five calls that shaped the round.
- 01
Scoring is two buttons and a number.
Each hole card is one large number with a minus on one side and a plus on the other. Previous and next hole sit at the bottom of the screen. Ending a round takes a press and hold, so a stray tap in a pocket can’t finish it.
- 02
Results lead with whatever decided the event.
TeeOff supports stroke play and Stableford. A Stableford event opens its results on points, because points are what decided it.
- 03
Live, but only when you ask for it.
The host adds friends or guests, and each player scores their own card while the leaderboard updates in real time. Sharing a round with your home club is off by default and chosen per round. Joining a club round only works within 2 km of the club, and anywhere else the button reads “Not at club”, so you always know why you can’t join.
- 04
Standings that read like the sports pages.
Event standings follow the golf listings in Apple Sports: T2 for ties, THRU for holes played, “Won by 4 strokes”. A player who hasn’t scored yet ranks last instead of quietly counting as level par.
- 05
The Lock Screen is a scorecard too.
During a round, a Live Activity shows the hole, your score to par, and one coloured mark per hole split into OUT and IN. The clock runs on the phone itself, so the app never has to push an update to keep it current.


03Redesign
Home should be about playing, not about nearby courses.
The first home screen greeted you, picked a course near you and listed others around it. It looked helpful, but golfers often play away from home, and a wrong guess meant changing the course before you could even start.
The redesign leads with one card: “Ready for the fairway?” and a Start a round button. I compared the start card with fitness apps like Apple Fitness+, Future and Centr, which have the same job of getting you from opening the app to starting a session. New players see only the button, with no empty stats. Profile moved into the avatar, which left three tabs: Home, Play and Courses.


04Club data
Every club in Kenya, without inventing a single fact.
A scorecard is only as good as its course list. I started with 40 Kenyan clubs entered by hand. Growing that meant crawling club websites, and most of what comes back from the web is wrong: dead links, logos pretending to be photos, placeholder text.
So the crawler runs on plain matching rules, not AI. It cannot invent a value. Descriptions are only ever proposed for review, never published automatically. A guessed website has to prove itself by naming the club’s town or country. That rule caught a tourism site, a US veterinary lab, and clubs with the same name in Virginia and Seattle.
705
clubs across 14 countries, up from 40 entered by hand
25
clubs bundled in the app, so a first launch offline still works
16 / 41
Kenyan clubs matched in the third-party course API
Being honest about the data mattered as much as collecting it. The course API has no stroke index, the field that says which holes get a handicap stroke. I wrote that limit into the changelog in plain words, so nobody plans a scoring feature on a field that will never arrive.


05A hard lesson
Saved means the server has it.
TeeOff saves every round on the phone first and syncs it afterwards, so a weak signal on the back nine never costs you a score. For a while, though, the server rejected every upload while the app went on marking rounds as saved. Those rounds existed only on the phone, and some players lost them.
The fix was a rule I now apply everywhere: a round is only marked saved once the server has accepted it. A one-off repair pass offered every stranded round up again.
- 01
Score entered
Instantly, on the phone
- 02
Kept locally
SQLite, works offline
- 03
Uploaded
In the background
- 04
Server accepts
The only proof that counts
- 05
Marked saved
Never before this
06Identity
Nine icons, one flag.
The first icon was a 3D render that looked like it belonged to a different app. I drew nine directions and checked each one at real size on light and dark wallpapers. My notes leaned towards a ball on a tee and called the flag “the most obvious golf idea”. The flag on dark green is what shipped.

Small things got the same scrutiny. A blinking red “Live” dot was replaced because it overstated the urgency. An App Store review rejected a build because the Health screen’s button said “Allow Access”. The wording changed and the build went back in.
Cream
#F7F3ED
Deep green
#2D3D22
Golf green
#437C18
Sage
#E9EADD
Olive
#7A8540
Pill yellow
#FEFF73
Ready for the fairway?
Figtree
Display 42 · Black · −4% tracking. Body 16 / 1.5
07Where it stands
Shipped, with three known gaps.
Version 1.0 is live on the App Store, and 1.1 brings the new home screen, the Lock Screen redesign and the new event results. The marketing site at teeoffclub.app is plain HTML that I wrote and host alongside it.
- —Net scoring is approximate: it uses your handicap across the whole round, because per-hole strokes need the stroke index the data doesn’t have.
- —Course data covers about 40% of Kenyan clubs, so the crawler and the review queue keep doing the slow work.
- —The tournament calendar is specific to Kenya for now; scoring works on any course anywhere.

Sumi
A writing companion that helps you think, and is built so it can’t write for you.