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.
PRIME FC Mini 4-a-side League 2026 — fixtures, results and live table.
Translation pending
Sports & fitnessJavaScript · CSSGitHub @mfontoscoOnlineOwner 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
PRIME FC Mini 4-a-side League — fixtures, results, live table and squad draw
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗Web app for the PRIME FC Mini 4-a-side League 2026: fixtures, results, a live league table and the champion.
One League. Three Teams. One Champion!
Requires Node.js 22.9+. No dependencies to install.
ADMIN_PIN=your-secret-pin npm start # http://localhost:3000
On Windows PowerShell:
$env:ADMIN_PIN = "your-secret-pin"; npm start
| Env var | Default | Purpose |
|---|---|---|
ADMIN_PIN | prime2026 (warns) | PIN needed to enter scores / edit teams |
PORT | 3000 | HTTP port |
DATA_FILE | data/league.json | Where results are saved (when Redis isn't configured) |
Anyone with the link can view. Click Admin in the footer and enter the PIN to enter scores, change match dates, rename teams and run the squad draw.
1=). The rules define no further tie-breaker, so the app doesn't invent one.The 18 players are split into 6 pots of 3 (DEFAULT_POTS in public/lib/league.js). The draw gives each team one player from every pot, so each squad has 6 players. It uses crypto.randomInt on the server and is saved with a timestamp. Redrawing needs an explicit confirmation, so a published draw is never overwritten by accident.
Squads can also be picked by hand: in admin mode, Set squads manually lets you choose each team's player from every pot. The same one-player-per-pot rule is checked, and replacing existing squads needs confirmation.
To change the pot list before the draw, edit DEFAULT_POTS. If data/league.json already exists, edit its pots field instead.
data/uploads/.PLAYER_POINTS in public/lib/league.js). The 🏅 Player of the Season table ranks everyone by points, and ⭐ Player of the Matchday goes to the top points scorer each Saturday (level players share it).Vercel runs server.js directly: its default export is the request handler, and files in public/ are served from Vercel's CDN.
Set these in the Vercel project's environment variables:
| Env var | Purpose |
|---|---|
ADMIN_PIN | Admin PIN. Without it, admin login is disabled. |
UPSTASH_REDIS_REST_URL, UPSTASH_REDIS_REST_TOKEN | League data (from the Upstash console → your database → REST API). KV_REST_API_URL / KV_REST_API_TOKEN also work. |
BLOB_READ_WRITE_TOKEN | Match photos. Added automatically when a Vercel Blob store is connected to the project. |
Without the Redis variables the app falls back to /tmp, which Vercel wipes on every cold start, so nothing is kept. Saves are version-checked: if two people save at the same moment, the later request is re-run on the newer data instead of overwriting it.
npm run dev # http://localhost:4000, restarts on code changes; reads .env (copy .env.example)
npm test # unit + API tests (node:test)
npm run check # syntax check
public/lib/league.js: pure league logic (fixtures, standings, tie-breakers). Shared by the server and the browser.server.js: zero-dependency HTTP server + JSON API.src/storage.js: where data is saved: data/ locally, or Upstash Redis + Vercel Blob when configured.public/: the web app (vanilla JS, no build step).