naissance-jerry/README.md
2026-10-14 21:18:47 +02:00

2.9 KiB
Raw Permalink Blame History

🍼 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 https://console.cloud.google.com/ : 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)

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

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.