Aller au contenu

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)

Déploiement

# Depuis le host Proxmox
bash /root/blindtest/deploy.sh

Débogage

# Statut du service backend
pct exec 116 -- systemctl status blindtest

# Logs
pct exec 116 -- journalctl -u blindtest -n 50

# Vérifier le quota YouTube restant
pct exec 116 -- curl -s http://localhost:8000/api/youtube/quota