Files
Focolari-Voting-System/ai-prompts/00-welcome-agent.md
alfy e68f299feb feat: Controllo accessi RFID completo con gestione sessioni
- Aggiunto supporto multi-pattern RFID (US/IT layout)
- Implementata invalidazione sessioni al restart del server
- Schermata "badge non trovato" con countdown 30s
- Notifica quando badge validatore passato senza utente
- Database aggiornato con badge reali di test
- Layout ottimizzato per tablet orizzontale
- Banner NumLock per desktop
- Toggle visibilità password
- Carosello benvenuto multilingua (10 lingue)
- Pagina debug RFID (/debug)
2026-01-17 20:08:36 +01:00

4.5 KiB

🗳️ Focolari Voting System - Welcome Agent

Panoramica Progetto

Sistema di controllo accessi per le assemblee di voto del Movimento dei Focolari. Applicazione web ottimizzata per tablet in orizzontale che gestisce i varchi d'ingresso alle sale votazione tramite lettori RFID USB (emulano tastiera).


Stack Tecnologico

Backend Mock

  • Python 3.11+ con FastAPI
  • Pydantic per validazione dati
  • Uvicorn come server ASGI
  • Pipenv per gestione dipendenze

Frontend

  • React 18 + TypeScript
  • Vite come build tool
  • Tailwind CSS 4 per styling
  • React Router per navigazione

Struttura Progetto

VotoFocolari/
├── dev.sh                    # Script di sviluppo (install, dev, server, ...)
├── README.md
├── ai-prompts/               # Documentazione sviluppo
│   ├── 00-welcome-agent.md   # Questo file
│   ├── 01-backend-plan.md    # Piano backend
│   └── 02-frontend-plan.md   # Piano frontend
├── backend-mock/
│   ├── main.py               # Entry point con argparse
│   ├── Pipfile               # Dipendenze Python
│   ├── api/routes.py         # Endpoint API
│   ├── schemas/models.py     # Modelli Pydantic
│   └── data/
│       ├── users_default.json
│       └── users_test.json
└── frontend/
    ├── package.json
    ├── vite.config.ts
    └── src/
        ├── App.tsx           # State machine principale
        ├── hooks/            # useRFIDScanner
        ├── components/       # UI components
        ├── screens/          # Schermate
        ├── services/         # API client
        └── types/            # TypeScript types

Funzionalità Principali

Flusso Utente

  1. Login Validatore: Passa badge + inserisci password → Sessione 30 min
  2. Attesa Partecipante: Schermata grande "Passa il badge"
  3. Visualizzazione Utente: Card con foto, nome, ruolo, stato ammissione
  4. Conferma Ingresso: Validatore ripassa il badge → Carosello benvenuto multilingua

Gestione RFID

  • Multi-pattern: Supporta layout tastiera US (;?) e IT (ò_)
  • Timeout 2.5s: Per scansioni accidentali
  • ESC annulla: Scansione in corso
  • Enter handling: Gestito automaticamente

Sicurezza Sessioni

  • Sessione salvata in localStorage
  • Invalidazione automatica se il server riparte
  • Timeout 30 minuti

Comandi Rapidi

# Setup iniziale
./dev.sh install

# Sviluppo (hot reload)
./dev.sh dev
# Frontend: http://localhost:5173
# Backend: http://localhost:8000

# Produzione locale
./dev.sh server
# App completa: http://localhost:8000

# Debug RFID
# Vai a http://localhost:8000/debug

Badge di Test

Badge Nome Ruolo Ammesso
0008988288 Marco Bianchi Votante
0007399575 Laura Rossi Votante
0000514162 Giuseppe Verdi Tecnico
0006478281 - - ⚠️ Non nel DB

Password validatore: focolari


Dove Trovare Cosa

Cosa cerchi Dove guardare
Logica flusso applicazione frontend/src/App.tsx
Hook lettura RFID frontend/src/hooks/useRFIDScanner.ts
Chiamate API frontend/src/services/api.ts
Endpoint backend backend-mock/api/routes.py
Dati mock utenti backend-mock/data/users_default.json
Configurazione Vite frontend/vite.config.ts

Note Importanti

  1. Layout Tastiera: Il lettore RFID potrebbe inviare caratteri diversi in base al layout OS. La pagina /debug aiuta a diagnosticare.

  2. Server Restart: Quando il server riparte, tutte le sessioni frontend vengono invalidate (controllato via server_start_time).

  3. Badge Validatore: Qualsiasi badge può diventare validatore se la password è corretta. Il badge viene memorizzato nella sessione.

  4. NumLock: Su desktop, viene mostrato un banner per ricordare di attivare NumLock.


TODO (da concordare con committenti)

  • Verificare se il badge validatore debba essere validato anche lato server
  • Test automatici E2E per regression detection