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.
翻訳待ち
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 ↗Web app e archivio digitale dei Bolo Sgreeners, squadra di basket CSI di Bologna: stagioni, roster, giocatori, partite con box score, calendari, classifiche, statistiche e storico. Responsive, installabile come PWA, dati su Supabase.
docs/DATI_IDENTIFICATI.mddocs/ARCHITETTURA.md/statistiche); pagina
giocatore (carriera, stagioni, fasi, record personali, partita per partita, altezza e mano);
pagina partita (punteggio, parziali, palestra, leader, MVP, box score, confronto squadre, fonti,
grafiche da scaricare); area squadra riservata (compleanni e paste); feedback (/feedback:
idee e segnalazioni che legge solo l'admin)./admin): import dei box score HTML con anteprima, associazione giocatori via
alias e conferma; CRUD di stagioni, competizioni, regole di classifica, penalizzazioni,
squadre, giocatori (con foto), roster per stagione, alias, partite; correzione delle statistiche
importate (tracciata); gestione delle discrepanze tra fonti; audit degli import; grafiche
per Instagram (/admin/grafiche); lettura dei feedback (/admin/feedback).Next.js 16 (App Router, Cache Components) · React 19 · TypeScript · Tailwind CSS 4 · Supabase (PostgreSQL, Auth, Storage) · zod · node-html-parser · vitest · Vercel.
src/app/(site)/ pagine pubbliche
src/app/admin/ area admin (login + pagine protette)
src/components/ componenti UI (match, player, stats, standings, navigation, admin/…)
src/lib/importers/ parser box score: estrazione, normalizzazione, mapping, validazione, payload
src/lib/data/ letture dal database (con cache)
src/lib/domain/ logica pura: statistiche/leaderboard, classifica, formattazione
src/lib/admin/ autenticazione admin e server action
src/lib/supabase/ client Supabase e tipi generati (database.types.ts)
supabase/migrations/ migrations SQL versionate
supabase/demo/ dati demo (seed + eliminazione)
scripts/import-historical/ import storico (Excel + HTML + CSI curato)
scripts/local-db/ stack locale di test senza Docker (Postgres + PostgREST)
data/curated/ dati curati a mano (trascrizioni CSI) — committati
data/sources/ fonti originali (NON committate)
docs/ report fonti e architettura
tests/ test vitest con fixture sintetiche
Requisiti: Node.js ≥ 20.9.
npm install
cp .env.example .env.local # e compila le variabili
npm run dev # http://localhost:3000
| Variabile | Dove | Descrizione |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL | app + script | URL del progetto Supabase |
NEXT_PUBLIC_SUPABASE_ANON_KEY | app | chiave pubblica (anon o publishable); sicura nel browser grazie alla RLS |
SUPABASE_SERVICE_ROLE_KEY | solo script locali | chiave service role / secret: mai su Vercel, mai nel repository |
NEXT_PUBLIC_SITE_URL | app | URL pubblico del sito (metadata, OpenGraph, sitemap) |
REVALIDATE_SECRET | app (Vercel) + GitHub | segreto per POST /api/revalidate, con cui l'aggiornamento automatico dal Livescore rigenera subito le pagine |
Senza Supabase configurato l'app parte comunque e mostra stati vuoti.
Crea un progetto su supabase.com e copia URL e chiavi
(Project Settings → API) in .env.local.
Applica le migrations da GitHub (consigliato): nel repository, Settings → Secrets and
variables → Actions, aggiungi SUPABASE_DB_URL: la stringa di connessione del database
(Supabase → Connect → Session pooler → URI, con la password al posto di
[YOUR-PASSWORD]). Non scade e non serve nessun token. In alternativa vanno ancora bene
SUPABASE_ACCESS_TOKEN (token da supabase.com/dashboard/account/tokens, permessi Project
read e Database write; scade), SUPABASE_PROJECT_ID (Reference ID) e SUPABASE_DB_PASSWORD.
Poi Actions → Database Supabase → Run workflow. Il workflow
(.github/workflows/supabase-migrations.yml) riparte da solo a ogni push su main che
modifica supabase/migrations/.
In alternativa, dalla CLI (inclusa nelle dev-dependency):
npx supabase login
npx supabase link --project-ref <ref-del-progetto>
npx supabase db push # applica supabase/migrations/*
npm run db:types # rigenera src/lib/supabase/database.types.ts
Le migrations creano tabelle, view, RLS, la funzione di import e i bucket Storage
(match-files privato, media pubblico). Nessuna modifica manuale al database senza una
nuova migration (npx supabase migration new <nome>).
Authentication → Providers → Email: disattiva Allow new users to sign up (gli admin si creano a mano).
Creare un amministratore: Authentication → Users → Add user (email + password), poi nello SQL Editor:
insert into public.user_roles (user_id, role)
select id, 'admin' from auth.users where email = '[email protected]';
This is the beginning of the README. Read the rest at the original. Read the full README ↗