| public | ||
| src | ||
| test | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||
| Dockerfile | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| server.js | ||
🍼 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_PREDICTIONSpronostics (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
- 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. - Identifiants > Créer > ID client OAuth > Application Web, avec comme URI de redirection autorisé :
https://VOTRE-DOMAINE/auth/google/callback - Copier
.env.exampleen.envet 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.