Une application web en temps réel du célèbre jeu de société Loup-Garou (Werewolf), construite avec Next.js, React, Node.js et Socket.io. Jouez avec vos amis en ligne dans une ambiance immersive et mystérieuse !
🇫🇷 Version française | 🇬🇧 English version
- 🌙 Gameplay en Temps Réel : Parties dynamiques et engageantes avec Socket.io
- 👥 Multijoueur : Jusqu'à 18 joueurs par partie
- 🎭 16 Rôles Disponibles : Loup-Garou, Voyante, Sorcière, Chasseur, Cupidon, et bien d'autres
- 🔒 Authentification Sécurisée : Comptes utilisateurs avec JWT et historique de parties
- 📊 Statistiques en Direct : Suivez les parties en cours et les joueurs connectés
- ⚙️ Configurations Personnalisables : Choisissez vos rôles et configurations de partie
- 🎨 Interface Moderne : Design élégant avec Tailwind CSS et DaisyUI
- 🐳 Déploiement Docker : Conteneurisation complète pour un déploiement facile
Le jeu inclut 16 rôles différents avec des capacités uniques :
- Loup-Garou : Élimine un joueur chaque nuit
- Loup-Garou Blanc : Peut éliminer un autre loup-garou
- Voyante : Découvre l'identité d'un joueur chaque nuit
- Sorcière : Possède une potion de vie et une potion de mort
- Chasseur : Élimine un joueur lorsqu'il meurt
- Salvateur : Protège un joueur chaque nuit
- Petite Fille : Espionne les loups-garous
- Sœur : Deux sœurs qui se connaissent
- Servante Dévouée : Peut prendre le rôle d'un joueur éliminé
- Enfant Sauvage : Devient loup-garou si son modèle meurt
- Renard : Détecte les loups-garous
- Montreur d'Ours : Son ours grogne si un loup est proche
- Villageois : Aucun pouvoir spécial
- Cupidon : Crée un lien d'amour entre deux joueurs
- Voleur : Peut échanger son rôle au début de la partie
- Frontend : Next.js 15, React 19, Tailwind CSS 4, DaisyUI
- Backend : Node.js, Socket.io
- Base de données : PostgreSQL, Prisma ORM
- Authentification : JWT, bcrypt
- Email : Nodemailer
- Conteneurisation : Docker, Docker Compose
- Graphiques : Chart.js, Recharts
- Validation : Zod
Avant de commencer, assurez-vous d'avoir installé :
- Node.js : Version 20 ou supérieure
- npm : Inclus avec Node.js
- Docker : Pour la conteneurisation (optionnel)
- Docker Compose : Pour les applications multi-conteneurs (optionnel)
- PostgreSQL : Base de données (ou via Docker)
-
Cloner le dépôt :
git clone https://github.com/achedon12/werewolf.git cd werewolf -
Installer les dépendances :
npm install
-
Configurer les variables d'environnement :
Créez un fichier
.envà la racine du projet en vous basant sur.env.example:# Database DATABASE_URL="postgresql://db_user:db_password@localhost:5432/db_name" # App JWT_SECRET="votre_clé_secrète_jwt" NEXT_PUBLIC_APP_URL=http://localhost:3000 NEXT_PUBLIC_DISCORD_URL="https://discord.gg/TgybvRqjEY" NEXT_PUBLIC_GITHUB_URL="https://github.com/achedon12/werewolf" NODE_ENV=development # Mailer (Development) SMTP_HOST=localhost SMTP_PORT=1025
-
Lancer les migrations de base de données :
npx prisma migrate dev
-
Générer le client Prisma :
npx prisma generate
-
Peupler la base de données (optionnel) :
npm run seed
-
Démarrer le serveur de développement :
npm run dev
-
Accéder à l'application :
Ouvrez votre navigateur à l'adresse
http://localhost:3000
Pour déployer l'application avec Docker :
-
Créer le fichier
.env:Copiez
.env.examplevers.envet configurez les variables (notamment pour PostgreSQL) -
Construire et démarrer les conteneurs :
docker compose up --build -d
Pour le développement :
docker compose -f docker-compose.dev.yml up --build -d
-
Lancer les migrations :
docker compose exec app npx prisma migrate deploy -
Accéder à l'application :
- Production :
http://localhost:82 - Développement :
http://localhost:3000
- Production :
-
Voir les logs :
docker compose logs -f app
-
Arrêter les conteneurs :
docker compose down
Note : À chaque modification du code, reconstruisez l'image Docker avec
docker compose up --build -d
- Créer un compte : Inscrivez-vous avec un nom d'utilisateur et un email
- Rejoindre ou créer une partie : Accédez à la liste des parties disponibles
- Configurer les rôles : L'hôte choisit les rôles et le nombre de joueurs (8-18)
- Commencer la partie : Les rôles sont distribués aléatoirement
- Jouer :
- Nuit : Les rôles spéciaux effectuent leurs actions
- Jour : Tous les joueurs débattent et votent pour éliminer un suspect
- Gagner :
- Villageois : Éliminez tous les loups-garous
- Loups-garous : Égalisez ou dépassez le nombre de villageois
werewolf/
├── src/
│ ├── app/ # Pages Next.js et API routes
│ │ ├── api/ # Endpoints API
│ │ ├── game/ # Pages du jeu
│ │ ├── auth/ # Authentification
│ │ └── ...
│ ├── server/ # Serveur Node.js et Socket.io
│ │ ├── socket/ # Gestionnaires Socket.io
│ │ └── index.js # Point d'entrée du serveur
│ ├── utils/ # Utilitaires (Roles, Date, etc.)
│ └── components/ # Composants React
├── prisma/
│ ├── schema.prisma # Schéma de base de données
│ ├── migrations/ # Migrations
│ └── seed.js # Script de seed
├── public/ # Fichiers statiques
└── docker-compose.yml # Configuration Docker
npm run dev # Démarre le serveur de développement avec nodemon
npm run build # Construit l'application pour la production
npm start # Démarre le serveur en mode production
npm run lint # Exécute ESLint
npm run seed # Peuple la base de données
npm run analyze # Analyse la taille du bundlePOST /api/auth/register- Créer un comptePOST /api/auth/login- Se connecterGET /api/auth/profile- Récupérer le profil utilisateurGET /api/auth/profile/history- Historique des parties
GET /api/game/list- Liste des parties disponiblesPOST /api/game- Créer une nouvelle partie
create-game- Créer une partiejoin-game- Rejoindre une partiestart-game- Démarrer la partiechat-message- Envoyer un messagevote- Voter pendant le journight-action- Effectuer une action nocturne
| Variable | Description | Exemple |
|---|---|---|
DATABASE_URL |
URL de connexion PostgreSQL | postgresql://user:pass@localhost:5432/db |
JWT_SECRET |
Clé secrète pour les tokens JWT | votre_clé_secrète_très_sécurisée |
NEXT_PUBLIC_APP_URL |
URL de l'application | http://localhost:3000 |
NEXT_PUBLIC_DISCORD_URL |
Lien vers Discord | URL du serveur Discord |
NEXT_PUBLIC_GITHUB_URL |
Lien vers GitHub | URL du dépôt |
NODE_ENV |
Environnement d'exécution | development ou production |
SMTP_HOST |
Serveur SMTP pour les emails | localhost ou serveur SMTP |
SMTP_PORT |
Port SMTP | 1025 (dev) ou 587 (prod) |
SMTP_USER |
Utilisateur SMTP | Votre email SMTP |
SMTP_PASSWORD |
Mot de passe SMTP | Mot de passe SMTP |
Les configurations de rôles pour chaque nombre de joueurs (8-18) sont définies dans src/utils/Roles.js. Vous pouvez personnaliser les rôles disponibles pour chaque taille de partie.
Les contributions sont les bienvenues ! Voici comment contribuer :
- Forkez le dépôt
- Créez une branche :
git checkout -b feature/nouvelle-fonctionnalite - Faites vos modifications
- Committez :
git commit -m 'Ajout d'une nouvelle fonctionnalité' - Poussez :
git push origin feature/nouvelle-fonctionnalite - Ouvrez une Pull Request
- Respectez le style de code existant
- Testez vos modifications avant de soumettre
- Documentez les nouvelles fonctionnalités
- Assurez-vous que le linting passe :
npm run lint
Si vous trouvez un bug, veuillez ouvrir une issue sur GitHub avec :
- Une description claire du problème
- Les étapes pour reproduire le bug
- Le comportement attendu vs le comportement actuel
- Des captures d'écran si possible
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
Copyright (c) 2025 Leo Deroin
Ce projet utilise et remercie les technologies suivantes :
- Next.js - Framework React pour le frontend
- React - Bibliothèque UI
- Node.js - Runtime JavaScript serveur
- Socket.io - Communication temps réel
- Prisma - ORM pour la base de données
- PostgreSQL - Base de données relationnelle
- Tailwind CSS - Framework CSS
- DaisyUI - Composants UI pour Tailwind
- JWT - Authentification sécurisée
- Docker - Conteneurisation
- Chart.js - Graphiques et statistiques
- Zod - Validation de schémas
- Discord : Rejoindre le serveur
- GitHub : Dépôt du projet
- Auteur : Leo Deroin - l.deroin@netcourrier.com
- Version : 0.3.0
- Rôles disponibles : 16
- Joueurs supportés : 8-18 par partie
- Technologies : 15+ bibliothèques et frameworks
Fait avec ❤️ par Leo Deroin
⭐ N'oubliez pas de mettre une étoile si vous aimez ce projet !