Blind Test musical
Rôle
Application événementielle pour organiser un blind test musical du Nouvel An. Permet à 9 participants de soumettre leurs tops 30 chansons à l'avance, puis de les révéler le jour J.
Application événementielle
Ce LXC est destiné à être supprimé après l'événement. Pas de monitoring dashboard ni Uptime Kuma.
Accès
| LXC | 116 — 192.168.1.72 |
| Port | 80 |
| URL | https://blindtest.2h15.fr (public) |
| Stack | React + Vite (frontend) · FastAPI + SQLite (backend) |
Architecture
Internet → NPM (LXC 101) → Nginx (port 80, LXC 116)
├── / → /opt/blindtest/frontend-src/dist/
└── /api/ → FastAPI (service blindtest.service)
└── SQLite (local)
Participants
9 participants, chacun avec un code PIN à 4 chiffres :
Val · Milie · JB · Alvina · Gaga · Momo · Laura · Sandy · Didi
Pages
| URL | Accès | Description |
|---|---|---|
/ |
Public | Accueil — barres de progression par participant (X/30) + total global |
/login/:name |
Public | Authentification par code à 4 chiffres — JWT 30 jours |
/submit |
Authentifié | Soumission des chansons via recherche YouTube + preview iframe |
/reveal |
Code 4821 | Révélation — recherche titre/artiste, bouton "Révéler" affiche les prénoms |
/playlist |
Code 4821 | Génération playlist YouTube privée via OAuth Google |
Page /submit
- Recherche YouTube avec debounce 400ms
- Preview iframe avant ajout
- Champ artiste éditable (channel YouTube pré-rempli mais modifiable)
- Avertissement si doublon artiste chez le même participant
- Suppression possible d'une chanson déjà soumise
Page /reveal
- Recherche par titre ou artiste
- Bouton "Révéler" affiche les prénoms des participants qui ont soumis cette chanson
- Bouton "Révéler toutes les chansons" charge
GET /api/reveal/all— révèle tout d'un coup - Stats globales en haut : soumissions / uniques / doublons
YouTube API
| Clé API | Projet blindtest-503519 |
| Usage | Recherche + preview |
| Quota | 10 000 unités/jour (100 unités par recherche) |
| OAuth desktop | Pour création de playlist privée |
Suivi de quota
Le quota est suivi en base de données :
- Table
youtube_search_logs— log de chaque recherche - Table
youtube_quota_flags— flag si quota épuisé
Widget quota sur / : barre de progression, nb recherches restantes, heure de réinitialisation (heure de Paris).
Si le quota est épuisé : widget passe en rouge, page /submit affiche un bandeau d'avertissement avec l'heure de réinitialisation.
Fichiers importants
| Chemin | Rôle |
|---|---|
/opt/blindtest/backend/ |
Code FastAPI, venv, service blindtest.service |
/opt/blindtest/frontend-src/ |
Code React/Vite, build dans dist/ |
/root/blindtest/deploy.sh |
Script de déploiement (host Proxmox) |