Private
Public Access
1
0
Files

86 lines
3.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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](https://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](https://react.dev/) — UI
- [Vite](https://vite.dev/) — build tool
- [Tailwind CSS v4](https://tailwindcss.com/) — styling
- [Recharts](https://recharts.org/) — trend charts
- [lucide-react](https://lucide.dev/) — 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+.
```bash
git clone https://git.hannu.be/dev-hannu/disc-golf-tracker.git
cd disc-golf-tracker
npm install
npm run build
npm run preview # serves the built app at http://localhost:4173
```
`npm run dev` is only needed if you're actively editing the code (gives you hot reload).
---
## Deploy
```bash
npm run build # outputs to dist/
```
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](https://claude.ai) artifact and then deployed as a standalone site.
The storage layer uses `localStorage` shim so it runs in any browser unchanged.