Discore disc golf score tracking app.
Translation pending
Sports & fitnessTypeScript · PLpgSQLGitHub @m6ruOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Browser-based PWA for disc golf score tracking. Mobile-first; scores save instantly and sync in the background. One signed-in Scorer per round writes; invited Observers watch live via Supabase Realtime.
STATUS.md — current state, handoff, roadmapBLUEPRINT.md — architecture and non-negotiable rulesARCHITECTURE.md — how it fits together: system diagram, life of a round, decision recordsCLAUDE.md — workflow and rules for AI coding agents (with AGENTS.md)Next.js (App Router), TypeScript, Tailwind, Supabase (Auth + Postgres + RLS + Realtime). Tests: Vitest (unit), pgTAP (database), Playwright (E2E). CI: GitHub Actions. Hosting: Vercel.
Needed once per machine (Windows PC or MacBook).
| Tool | Windows | macOS |
|---|---|---|
| Node.js 24 | winget install OpenJS.NodeJS.LTS | Node 24 .pkg or .tar.gz from nodejs.org (Homebrew compiles from source on Intel Macs — hours) |
| GitHub CLI | winget install GitHub.cli | .pkg / .zip from the GitHub CLI releases page (or brew install gh on Apple Silicon) |
| Docker Desktop (local Supabase, DB + E2E tests) | wsl --install (admin), then winget install Docker.DockerDesktop | brew install --cask docker-desktop |
Then, in the repo:
gh auth login # once
npm ci
cp .env.example .env.local # fill NEXT_PUBLIC_SUPABASE_URL + NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY
# (Supabase dashboard → Project Settings → API, or Vercel env vars)
npx supabase login # once; then link the production project:
npx supabase link --project-ref gslzfwbrdbvmnjaxxnms
npx playwright install chromium # once, for E2E
npm run dev # http://localhost:3000 (against production data — careful)
.env.local is not in git; recreate it on each machine. Line endings are normalized to LF by .gitattributes, so both platforms produce identical diffs.
Switching machines: commit and push (or open a PR) before you leave one; on the other, git pull and read STATUS.md → Handoff.
Other scripts:
| Script | Purpose |
|---|---|
npm run lint | ESLint (Next config) |
npm test | Vitest run over lib/**/*.test.ts |
npx supabase test db | pgTAP RLS / integrity tests in supabase/tests/ (needs Docker + npx supabase start) |
npm run test:watch | Vitest in watch mode |
npm run test:e2e | Playwright E2E in e2e/ against local Supabase (needs npx supabase start; first time: npx playwright install chromium) |
npm run seed:courses | Validate course JSON seeds in supabase/seeds/courses/ |
Course data is creator-maintained and lives in git — see supabase/seeds/README.md.
| Area | Paths |
|---|---|
| Pages | app/page.tsx, app/auth/, app/rounds/ |
| Round UI | app/rounds/[roundId]/round-session.tsx (+ hooks/, components/) |
| Scoring math | lib/scoring/ (pure TS, no React/Next/Supabase, no any) |
| Round actions | lib/rounds/ |
| Profiles | lib/profiles/ |
| Supabase clients | lib/supabase/{client,server,proxy,select-helpers}.ts |
| Migrations | supabase/migrations/ |