BikeControl (SwiftControl)
Use Zwift Click, Zwift Play, Shimano Di2, or any Bluetooth controller with MyWhoosh, Rouvy, Zwift, and more. Free to try on iOS, Android, Windows, and macOS.
Live scores from the October Singles at Penwortham Sports & Social Club
Sports & fitnessTypeScript · PLpgSQLGitHub @SamP25-codeOnlineOwner 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
Loading the full README. The saved excerpt is shown below.
A small live-scoring site for a knockout bowls competition:
• 4 qualifying nights, 16 players each, single-game-to-21 knockout, top 4 per night advance
• Finals day: the 16 qualifiers, knockout to one winner
• You enter the draw and update scores live from your phone (Android is fine, it's just a website)
• Anyone with the link sees live scores, updating automatically
• Next.js (React) — the website itself
• Supabase — Postgres database, login for you as admin, and realtime updates for viewers
• Jest — unit tests for the bracket logicRead the full README ↗A small live-scoring site for a knockout bowls competition:
supabase/schema.sql, and run it. This creates the nights, players, and matches tables, sets up permissions, and turns on realtime.supabase/seed.sql, and run it. This creates the competition's 5 nights (Monday–Thursday qualifying plus Finals Day) with fixed names and display order, so they immediately show up as nav links on the public site. Safe to skip or re-run — it won't duplicate a night whose name already exists./admin.cp .env.local.example .env.local
Open .env.local and fill in the two values from Supabase:
NEXT_PUBLIC_SUPABASE_URL=https://your-project-ref.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-public-key
npm install
npm run dev
Visit http://localhost:3000 for the public site, http://localhost:3000/admin to log in and manage nights.
npm test
This runs the bracket-logic unit tests in __tests__/bracket.test.js.
The easiest option is Vercel (made by the same people as Next.js, free for this kind of project):
.env.local.bowls-live.vercel.app you can share with players, and use on your phone for admin./admin and log in. The 5 nights from supabase/seed.sql are already there — no need to create them./admin/night/[finals-day-id]) without adding them yourself. This works as qualifiers come in from different nights on different days; each just slots into their number. Drag their name to a different number any time to move them — no need to reset anything, and it updates their match instantly, even after Finals Day's bracket has started.A couple of things worth knowing:
app/
page.tsx Public homepage — list of nights
night/[id]/page.tsx Public live bracket view for one night
admin/
login/page.tsx Admin sign-in
page.tsx Admin dashboard — create/list nights
night/[id]/page.tsx Admin editor — players, draw, live scoring
lib/
bracket.ts Pure bracket logic (round names, winners) — unit tested
adminActions.ts Supabase writes: create night, generate bracket, score, etc.
supabaseClient.ts Supabase browser client
types.ts Shared row types
supabase/
schema.sql Database schema — run this once in Supabase's SQL editor
seed.sql Creates the 5 competition nights with fixed names/order — run once after schema.sql
components/
NightNav.tsx Shared top nav of all 5 nights, used on the public homepage and night pages
__tests__/
bracket.test.js Jest tests for lib/bracket.ts