ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
Impara il bridge con BridgeLab, la piattaforma ufficiale della Federazione Italiana Gioco Bridge (FIGB): 4 corsi, 49 lezioni e 152 moduli interattivi con video, quiz e pratica al tavolo.
Translation pending
EducationTypeScript · PLpgSQLGitHub @albertogerliOnlineOwner 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.
Piattaforma didattica ufficiale della Federazione Italiana Gioco Bridge (FIGB) per imparare il bridge: corsi interattivi, quiz, pratica al tavolo contro l'AI, tornei, sfide tra amici e portale istruttori. In produzione su bridgelab.it.Read the full README ↗
Piattaforma didattica ufficiale della Federazione Italiana Gioco Bridge (FIGB) per imparare il bridge: corsi interattivi, quiz, pratica al tavolo contro l'AI, tornei, sfide tra amici e portale istruttori. In produzione su bridgelab.it.
@theme inline in globals.css, nessun tailwind.config) + shadcn/uiavatars), RPCios/, Android in android/)main. Non usare mai vercel --prod (la directory public/ supera i limiti di upload).npm install
cp .env.example .env.local # se assente, creare .env.local con le variabili sotto
npm run dev # http://localhost:3000
Variabili d'ambiente richieste (.env.local, mai committato):
| Variabile | Uso |
|---|---|
NEXT_PUBLIC_SUPABASE_URL / NEXT_PUBLIC_SUPABASE_ANON_KEY | client Supabase (pubbliche) |
SUPABASE_SERVICE_ROLE_KEY | solo server (route API admin/email); bypassa RLS |
RESEND_API_KEY / RESEND_FROM | invio email |
CRON_SECRET | autorizza /api/cron/engagement (header Authorization: Bearer) |
BEN_API_URL | opzionale: server AI neurale BEN self-hosted (fallback automatico su solver/euristica se assente); per ospitarlo vedi deploy/ben-railway/ |
BEN_API_TOKEN | segreto condiviso con la guardia davanti a BEN; obbligatorio se BEN è ospitato, inutile in locale |
NEXT_PUBLIC_GADS_SIGNUP_LABEL | label conversione Google Ads (registrazione) |
ADMIN_NOTIFY_EMAIL | opzionale: destinatario notifiche richieste istruttore |
NEXT_PUBLIC_SENTRY_DSN | error monitoring; se assente Sentry è interamente no-op |
SENTRY_ORG / SENTRY_PROJECT / SENTRY_AUTH_TOKEN | opzionali: upload source map in build (senza, gli stack trace restano minificati) |
HEYGEN_API_KEY | solo script di generazione video |
src/app/ 66 rotte App Router (gioca/, lezioni/, istruttori/, admin/, api/)
src/components/ 90 componenti (bridge/ = tavolo da gioco, ui/ = shadcn)
src/lib/ logica di dominio pura: bridge-engine, dds-table (double dummy
esatto, bridge-dds in WebAssembly), robot-pimc (il robot che
gioca con le carte che vede), bridge-scoring (punteggi WBF/IMP),
ai-difficulty, pbn, hand-encoder, catalog (contenuti da DB)
src/hooks/ 26 hook (use-bridge-game = orchestrazione partita)
src/data/ seed iniziale dei contenuti — ATTENZIONE: i contenuti live sono
nel DB Supabase e DIVERGONO dal seed; correggere via DB, non reseed
scripts/sql/ schema incrementale (eseguire su Supabase Dashboard → SQL Editor)
scripts/ pipeline video HeyGen, validatori smazzate, seed legacy
Lo schema vive su Supabase e si evolve con gli script di scripts/sql/, eseguiti a mano su Dashboard → SQL Editor. Non c'è una catena di migrazioni automatica, ma il database si ricostruisce dal repository e ogni script applicato è tracciato:
scripts/sql/000-schema-baseline.sql è lo schema completo di produzione (tabelle, vincoli, RLS, policy, funzioni, privilegi), generato dal database stesso con node scripts/dump-schema.mjs. Si rigenera e si committa insieme a ogni script che cambia lo schema.public.script_applicati registra gli script eseguiti. Ogni script nuovo termina con la riga che lo registra (insert into public.script_applicati …): un test (src/lib/sql-registro.test.ts) fallisce se manca. node scripts/sql-stato.mjs elenca gli script del repository non ancora applicati in produzione ed esce con 1 se ce ne sono. Gli script anteriori al 2 ottobre 2026 sono registrati come retroattivi.*-rollback.sql). Gli script test-*.sql sono prove da eseguire su un database di prova, non modifiche dello schema.Tutte le tabelle hanno RLS; le RPC amministrative sono protette da is_admin() (colonna profiles.role).
Contenuti didattici. La fonte di verità è il database: lezioni, moduli, smazzate ed eserciziario si correggono lì (UPDATE), mai rieseguendo il seed. Il seed in src/data/ è quello iniziale e diverge da produzione; scripts/legacy/seed-supabase.ts resta solo per storia. Per una copia aggiornata dei contenuti: node scripts/esporta-contenuti.mjs scrive scripts/contenuti/*.json, che non si committa (contiene commenti e soluzioni nascosti agli allievi, e il repository è pubblico).
npx tsc --noEmit # typecheck (bloccante in CI)
npx eslint src # lint, zero errori/warning (bloccante in CI)
npm test # unit test motori di dominio (vitest, bloccante in CI)
npm run test:rls # verifica RLS con anon key (dopo modifiche schema)
npm run test:e2e # smoke E2E Playwright (solo locale: crea/elimina
# un utente di test via service role)
CI: .github/workflows/ci.yml (typecheck + lint + test su ogni push/PR).
Debito noto (perizie tecniche in PERIZIA-*.md e piano in PIANO-MIGLIORAMENTO-2026-08.md): pagine monolitiche (fino a ~2.200 righe), niente i18n (scelta di prodotto), error monitoring assente (aggancio pronto in src/lib/report-error.ts), schema DB senza migrazioni versionate.
Non documentazione tecnica: sono i manuali per chi la piattaforma la usa, da consegnare così come sono.
| manuale | per chi |
|---|---|
docs/manuale-utenti.md | chi usa Bridge LAB per conto proprio |
docs/manuale-allievi.md | chi segue un corso con un istruttore |
docs/manuale-istruttori.md | gli istruttori: classi, compiti, strumenti d'aula |
Quando cambia una funzione visibile, cambiano anche loro: un manuale che descrive la versione di sei mesi fa fa perdere più tempo di uno che non esiste.
profiles.role = 'admin'), sia client sia RLS/RPC.GET /api/cron/engagement gira alle 17:00 UTC via Vercel Cron; trigger manuale con curl -H "Authorization: Bearer $CRON_SECRET".catalog.ts li serve con cache); le infografiche sono generate (Gemini) e i video con HeyGen (scripts/generate-all-videos.py).ios/App (submission marzo 2026).