Disc Golf Tracker
A private, on-device disc golf scorecard app. Log rounds, track your bag, and follow your progress over time — no account or server needed.
Live at dgt.hannu.be -> server is not on 247 but app does not need page reloads.
Features
Scoring
- Log rounds hole by hole with − / + controls
- Scores default to par — tap through a hole without entering a number and par is recorded automatically
- Birdie / Eagle / Par / Bogey labels appear in real time (no aces yet!)
- Running total vs. par shown throughout the round
- Auto-save on every tap — leave mid-round and resume from the Home screen
Courses
- Add courses with custom hole counts (9, 18, or 24) and per-hole par
- Saved courses are reusable across rounds
- Multiple players per round, roster remembered between sessions
Bag
- Build a disc bag with name, type (Distance Driver, Fairway Driver, Midrange, Putter), and color
- Tag which disc was thrown on each hole during play
- Per-disc stats: throw count and average score vs. par
Stats & History
- Leaderboard ranked by average score vs. par across all rounds
- Per-player breakdown: eagles, birdies, pars, bogeys with a visual bar
- Score trend chart across rounds (line chart per player)
- Average score by course
- Full scorecard for every finished round with disc usage overlay
Tech stack
- React — UI
- Vite — build tool
- Tailwind CSS v4 — styling
- Recharts — trend charts
- lucide-react — icons
No backend. All data is stored in the browser's localStorage — private to the device browser, no account required.
About localStorage
Persistence — survives page reloads and closing the browser. Unlike sessionStorage which clears when the tab closes, localStorage stays until explicitly deleted or the user clears browser data.
Scope — dgt.hannu.be can only read its own data. Another website cannot read dgt.hannu.be's data and vice versa. Completely isolated per origin.
Chrome/Edge: install the site as a PWA (Add to Home Screen / Install App). Installed PWAs are treated differently — the browser is less aggressive about clearing their storage.
Run locally
Requires Node.js 20+.
git clone https://git.hannu.be/dev-hannu/disc-golf-tracker.git
cd disc-golf-tracker
npm install
npm run dev
Open http://localhost:5173.
Build & deploy
npm run build # outputs to dist/
npm run preview # preview the production build locally
The dist/ folder is plain static files — drop it on any web server or static host (Caddy, Nginx, Netlify, Vercel, GitHub Pages, etc.).
Origin
The app was built as a Claude artifact and then deployed as a standalone site.
The storage layer uses localStorage shim so it runs in any browser unchanged.