# 🍼 Naissance — les pronostics pour le bébé de Jerry Petite application web pour parier sur l'arrivée du bébé : **jour, heure, sexe, poids, taille et prénom**. - Connexion avec un compte Google (le prénom Google est affiché). - Un pronostic par personne, que seul son auteur peut modifier ou supprimer, jusqu'à la clôture. - Les pronostics restent secrets jusqu'à la naissance : chacun ne voit que le sien et le nombre de participants. À partir de `STATS_MIN_PREDICTIONS` pronostics (5 par défaut), des tendances volontairement arrondies s'affichent (plutôt fille/garçon, semaine, moment de la journée, poids à 100 g près, taille au cm près). Les administrateurs voient en plus la liste des participants (sans leurs pronostics). - Les administrateurs (`ADMIN_EMAILS`) fixent la date du terme, clôturent les pronostics, saisissent les vraies informations à la naissance et peuvent supprimer un pronostic. - Une fois le résultat saisi : classement automatique, podium et confettis 🎉. ## Barème (sur 100) | Critère | Points | Calcul | |---|---|---| | Jour | 30 | −3 pts par jour d'écart | | Heure | 15 | dégressif, 0 à 6 h d'écart (circulaire autour de minuit) | | Sexe | 15 | tout ou rien | | Poids | 15 | dégressif, 0 à 1 kg d'écart (−1,5 pt / 100 g) | | Taille | 15 | dégressif, 0 à 8 cm d'écart | | Prénom | 10 | exact (accents et majuscules ignorés) ; 3 pts si même initiale | Égalité : le pronostic dont la dernière modification est la plus ancienne gagne. Le barème se règle dans `src/scoring.js`. ## Configuration Google 1. Sur : créer un projet, configurer l'écran de consentement OAuth (type « Externe », portées `openid`, `email`, `profile`), puis le **publier** pour que tout le monde puisse se connecter. 2. *Identifiants > Créer > ID client OAuth > Application Web*, avec comme URI de redirection autorisé : `https://VOTRE-DOMAINE/auth/google/callback` 3. Copier `.env.example` en `.env` et le remplir. ## Déploiement (Docker) ```sh cp .env.example .env # puis éditer docker compose up -d --build ``` L'app écoute sur `127.0.0.1:3000` ; placez un reverse proxy HTTPS devant (Caddy, Nginx, Traefik…). Exemple Caddy : ``` naissance.example.com { reverse_proxy 127.0.0.1:3000 } ``` Les données (SQLite) sont dans le volume `naissance-data`. Sauvegarde : `docker compose cp naissance:/data/naissance.db ./sauvegarde.db` Sans Docker : Node.js ≥ 22.13, `npm ci --omit=dev`, puis `npm start` avec les variables d'environnement (`DB_PATH` optionnel, `./data/naissance.db` par défaut). ## Développement ```sh npm install ADMIN_EMAILS=jerry@example.com npm run dev ``` `npm run dev` active `DEV_LOGIN` : sans identifiants Google, « Se connecter » crée un utilisateur de test. Plusieurs comptes : `http://localhost:3000/auth/dev?name=Alice`, `…?name=Jerry&email=jerry@example.com`. **Ne jamais activer `DEV_LOGIN` en production.** Tests du barème : `npm test`.