My Vote
Votazioni di giurie — webapp HTML5 in P2P
My Vote è una **Progressive Web App** scritta in HTML/CSS/JavaScript senza alcuno step di build, porting fedele dell'app Android originale (ora dismessa). Si apre direttamente nel browser, può essere installata come PWA e funziona offline grazie al service worker. Setup giuria, inserimento performance/concorrente, votazione giurato per giurato (slider + numerico), schermata voto a schermo intero con colore interpolato tra "voto minimo" e "voto massimo" (default rosso → verde), riepilogo performance, classifica finale rivelata un concorrente alla volta dal peggiore al migliore, con gestione del parimerito 1°/2° posto. Storico sessioni completo, template riutilizzabili (single-device e "server"), range/decimali/colori/palette personalizzabili.
Due modalità d'uso. **Single-device**: un solo telefono passa di mano fra i giurati a turno, niente rete. **Multi-device peer-to-peer**: l'host genera un Peer ID + PIN, la pagina pubblica un QR `myvote://join?host=...&pin=...&session=...`. Ogni giurato apre la webapp dal proprio telefono, scansiona il QR (o inserisce manualmente Peer ID e PIN) e si collega come client. I voti viaggiano direttamente fra i browser via **WebRTC DataChannel** (signaling con PeerJS pubblico, lo STUN/TURN è configurabile per i NAT più ostici). Niente piu` passaggio di smartphone, niente sbirciate ai voti altrui. L'host orchestra il flusso (cambio performance, momento del reveal della classifica) e raccoglie i voti sincronizzati. Su iOS/Android la **Wake Lock API** tiene il telefono dell'host sveglio durante la sessione (sostituisce il vecchio ForegroundService Android). Nessun account, nessun tracker, nessuna pubblicità: i dati delle sessioni vivono in `localStorage` sul tuo browser e non escono mai dai partecipanti.
Funzionalità
- Webapp HTML5/PWA pura: niente build step, niente install obbligatoria
- Funziona offline (service worker) dopo il primo caricamento
- Installabile dal browser come app del sistema (manifest + icone)
- Modalità single-device: un solo telefono passa di mano
- Modalità multi-device peer-to-peer via WebRTC DataChannel
- Signaling pubblico PeerJS con STUN/TURN custom configurabile
- QR code `myvote://join?...` per join istantaneo dei giurati
- Voti sincronizzati in tempo reale fra browser, niente server di traffico
- Reveal della classifica orchestrato dall'host
- Setup giuria con drag-and-drop, range voto e nome sessione
- Voto a schermo intero con colore interpolato min→max
- Classifica progressiva (uno per volta dal peggio al meglio) con parimerito
- Riepilogo performance (totale, media, voti per giurato)
- Storico sessioni completo con dettaglio e cancellazione
- Template riutilizzabili (single-device e "server")
- Wake Lock API: il telefono host non si spegne durante la sessione
- Range / decimali / colori / palette / tema personalizzabili
- Sessioni recenti lato client salvate in localStorage (max 5)
Parametrizzazioni
- Modalità: single-device | multi-device peer-to-peer
- Range votazione (min / max, default 0–10)
- Permetti decimali (slider 0.1 vs interi)
- Colore voto minimo / massimo (interpolazione lineare)
- Palette: Default (slate) / Sky / Sunset / Ocean / Forest
- Tema: sistema / chiaro / scuro
- Connettività P2P avanzata: STUN/TURN custom (default: Google STUN pubblico)
- Mostra inserimento numerico oltre allo slider
- Auto-skip se alias giurato == nome concorrente
Pre-requisiti tecnici
- Browser moderno (Chrome / Edge / Firefox / Safari recenti) con supporto WebRTC + service worker
- HTTPS in produzione (richiesto da fotocamera e WebRTC)
- Per modalità multi-device: 2+ dispositivi con accesso a internet (almeno per il signaling iniziale)
- Permesso fotocamera: solo per scansionare il QR di join (modalità client)
- Nessun account, nessuna installazione obbligatoria, nessun permesso di sistema speciale