Log the rounds you actually play, battle your friends for course records, and watch your territory grow with every win.
Sports & fitnessTypeScript · PLpgSQLGitHub @steeleanderson7OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
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 ↗Log golf rounds with friends; whoever shoots the lowest score at a course holds the "course record." Centerpiece feature is a world map showing who holds what, with a Voronoi "territory" view.
Full architecture/data-model rationale: see the plan this was built from — data model, RLS design, OSM ingestion, and map/UX design decisions are all documented there.
Fully live against a real Supabase project — no mock data left. Every page reads/writes through RLS-protected queries, verified end-to-end against the live database (auth, group creation/joining, logging a round, and every downstream query it feeds: ledger, leaderboard, map, course detail, profile).
supabase/migrations/0001-0004 — schema, RLS policies, course_group_records view, the atomic create_group/redeem_invite functions, and the OSM-shadow-field trigger. All run and verified.lib/supabase/{client,server}.ts, proxy.ts — Supabase SSR client + session refresh.app/login, app/signup, app/onboarding, components/layout/AuthMenu.tsx — real Supabase Auth.lib/queries.ts, lib/supabase/guards.ts — shared data-fetching + auth/active-group guards used by every page.app/dashboard, app/leaderboard, app/courses, app/courses/[id], app/log-round, app/map, app/profile/[id] — all real data.scripts/ingest-osm.ts.NEXT_PUBLIC_SUPABASE_URL and SUPABASE_SERVICE_ROLE_KEY as GitHub Actions secrets so the scheduled ingestion + keepalive workflows run (currently only tested by running them locally).npm run dev
Open http://localhost:3000 — it redirects to /dashboard. Try /map for the centerpiece feature (toggle "Pins" vs "Territory" in the left rail).
Next.js (App Router) + TypeScript + Tailwind + shadcn/ui, Supabase (Postgres + Auth), MapLibre GL + OpenFreeMap (free, no API key) via react-map-gl/maplibre, d3-geo-voronoi for the territory view. Deployed on Vercel.