Case study · Coursework
Study your game.
Track every round, shot by shot. Built for student golfers and their coaches — practice, tournaments, anything in between.
Visit the live siteRole
Design + build, end to end
Year
2026
Stack
Next.js · AWS Serverless
Status
Live
The brief
It started with my niece.
My niece plays competitive student golf and wanted a better way to track her rounds — shot by shot — and actually see how she was progressing without bro-talking through group chats, living in spreadsheets, or emailing every round to her coach. What began as a personal tracker for her morphed into something built for her and her coach together: same rounds, same data, two perspectives. Coach sees the roster, player sees the transcript, and “office hours” stops being a Google Sheet.
From there it grew. Anyone she trusts can claim a scorekeeper code for that round and log her shots in real time — dad on the cart, a buddy on the bag, a sibling at the clubhouse. Family, friends, or a remote coach who can't make it to the course get a live follow link: tap it, watch the scorecard update hole by hole, read the notes the scorekeeper drops along the way. No account, no install. It also handles tournaments end-to-end: leaderboards, attestations, and admin tooling. But the spine hasn't changed: one place where a player tracks her own game, and the people invested in her can see what's actually happening.
Design
A brand built end to end with Claude.
The product needed an identity, not just a logo. Working alongside Claude, the full brand came together from scratch: a heraldic shield that nods to old-world golf clubs without feeling stuffy, a tagline that reads as encouragement (“Study your game.”), and a palette built around a fairway-green that holds up against course photography, a cream that reads clean against UI chrome, and a single accent gold for moments of celebration on the leaderboard.
Brand kit
#2A4233
Fairway green
#FBFAF4
Cream
#E0C548
Pennant gold
Architecture
Static frontend, serverless backend.
Coursework runs as a static SPA on CloudFront, talking to an AWS HTTP API Gateway in front of 30 Lambda routes (Node 20). State lives in a single DynamoDB table. Auth runs through Cognito. The whole stack scales to zero when nobody's using it, which makes the cost profile of a small-tournament- season service nearly free at idle.
CloudFront + S3
Global CDN serving the SPA
API Gateway HTTP
Edge for the 30 Lambda routes
DynamoDB
Single-table design, all state
Cognito
User pool + auth flows
What's inside
Features.
- Rounds + shot-by-shot tracking
- Tournament leaderboards
- Team management
- Per-round scorekeeper claim codes
- Player + coach views
- Live follow links — family, friends, or coaches watch any round, no account needed
- Stats reporting
- Admin user management
- Activity audit log
Real screens
What it looks like.

