Case study · Coursework
Study your game.
Track every round, share it live with the family, and keep your coach in the loop. Built for players, families, and coaches.
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.
A logo wasn't enough. The product needed an identity. 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
- Live follow links: family watches any round, no account needed
- Emoji reactions on the follow view, in real time
- Per-round scorekeeper claim codes
- Player + coach views
- Tournament leaderboards
- Stats reporting
- Team management
- Admin user management
Real screens
What it looks like.

