Sistema di votazione real-time per eventi di dibattito con prevenzione anti-doppio voto basato su device fingerprinting.
- Firebase Realtime Database: Voti e match in tempo reale
- Firebase Storage: Upload e hosting immagini fighters
- Device Fingerprinting: Prevenzione doppio voto senza login
✅ Sistema Master/User: Passkey condivisa per gestione match
✅ Anti-Doppio Voto: Tracking per dispositivo (sopravvive logout/login)
✅ Tempo Reale: Aggiornamenti istantanei via Firebase
✅ Upload Sicuro: Immagini su Firebase Storage
✅ UX Ottimale: Una passkey per tutta la giornata
git clone https://github.com/your-repo/web3-fighters
cd web3-fighters
npm installCrea .env con le tue credenziali Firebase:
# Firebase Configuration
VITE_FIREBASE_API_KEY=your_firebase_api_key
VITE_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com
VITE_FIREBASE_DATABASE_URL=https://your_project-default-rtdb.firebasebaseapp.com
VITE_FIREBASE_PROJECT_ID=your_project_id
VITE_FIREBASE_STORAGE_BUCKET=your_project.appspot.com
VITE_FIREBASE_MESSAGING_SENDER_ID=123456789
VITE_FIREBASE_APP_ID=1:123456789:web:abcdef123456npm install -g firebase-tools
firebase login
firebase init database
firebase deploy --only databasenpm run dev- Entra: Visita l'app, inserisci passkey condivisa
- Vota: Seleziona fighter e conferma voto
- Esci/Rientra: La passkey funziona tutta la giornata
- Anti-Doppio: Impossibile votare due volte per stesso match
- Accesso Master: Passkey master (
bfethcc8master) - Crea Match: Upload immagini + nomi fighters
- Gestisce Stati: PENDING → VOTE → CLOSED
- Monitora: Dashboard real-time con tutti i voti
- Browser fingerprint unico per dispositivo
- Memorizzazione localStorage + Firebase
- Sopravvive a logout/login
- Permette voti per match diversi
- Blocca rivoto stesso match
9:00 - Entra, vota Match A, esce
11:00 - Rientra, può votare Match B ✅
11:30 - Tenta rivoto Match A → BLOCCATO ❌
- Frontend: React + TypeScript + Vite
- Backend: Firebase Realtime Database
- Storage: Firebase Storage
- Styling: CSS Custom + CSS Variables
- Deploy: Firebase Hosting (opzionale)
{
"debates": {
"1234567890": {
"id": 1234567890,
"title": "Match Title",
"fighter1": {
"id": 1,
"name": "Fighter Name",
"imageUrl": "https://firebase_storage_url",
"votes": 42
},
"fighter2": { "..." },
"status": "VOTE", // PENDING | VOTE | CLOSED
"totalVotes": 100
}
},
"votes": {
"device_fingerprint_hash": {
"1234567890": {
"deviceId": "hash",
"debateId": 1234567890,
"fighterId": 1,
"timestamp": 1699123456789
}
}
}
}- Utenti:
BFethcc8(votazione) - Master:
bfethcc8master(gestione completa)
npm run build
firebase init hosting
firebase deploynpm run build
# Upload dist/ folderPermission Denied:
- Verifica credenziali Firebase in
.env - Deploy regole database:
firebase deploy --only database
Upload Fallisce:
- Controlla Firebase Storage rules
- Verifica configurazione Storage in console Firebase
Voti Non Sincronizzati:
- Controlla connessione internet
- Verifica console Firebase per errori Database
L'app è ottimizzata per eventi live con:
- Gestione real-time di centinaia di votanti
- UX mobile-first per uso su smartphone
- Dashboard master per moderazione live
- Sistema robusto anti-manipolazione voti
Sviluppato per ETHcc8 BlockFighters 🥊⚡