Application web qui aide un groupe d'amis à choisir ensemble à quel jeu vidéo jouer ce soir. Fonctionne avec Steam, Epic Games, GOG et directement depuis Discord.
- À quoi sert ce produit ?
- Fonctionnalités principales
- Comment ça fonctionne
- Bot Discord
- Environnements
- Déploiement
- Stack technique
- Documentation complémentaire
| Document | Description |
|---|---|
| Architecture API | Routes REST, événements WebSocket, API Discord et flux de vote |
| Schéma de base de données | Structure des tables et leurs relations |
| Intégration Steam | Authentification OpenID 2.0, synchronisation et protections |
| Bot Discord | Architecture du bot, commandes slash, personas IA et flux de vote |
- Trouver un jeu commun parmi les bibliothèques de tous les membres du groupe
- Supporter plusieurs plateformes — Steam, Epic Games, GOG Galaxy
- Créer des groupes et inviter vos amis via un lien sécurisé à usage limité
- Voter pour ou contre chaque jeu proposé, depuis le site ou depuis Discord
- Recevoir des recommandations de jeux basées sur l'historique de votes du groupe
- Suivre en temps réel l'avancement des votes de chaque participant
- Lancer le jeu choisi directement depuis Steam une fois le résultat révélé
- Connexion via Steam — Authentification unique par votre compte Steam
- Multi-plateforme — Liez vos comptes Epic Games et GOG pour élargir la liste de jeux
- Gestion de groupes — Création, invitation par lien sécurisé avec expiration
- Détection des jeux communs — Calcul automatique des jeux partagés entre les membres
- Filtres de jeux — Affinez la sélection par catégorie (multijoueur, coopératif) lors du vote
- Sessions de vote — Vote pouce haut / pouce bas sur chaque jeu commun
- Votes planifiés — Programmez une session qui se clôture automatiquement
- Votes automatiques — Configurez un planning récurrent par groupe (ex : chaque vendredi soir)
- Recommandations IA — Suggestions de jeux basées sur l'historique de votes du groupe
- Historique et statistiques — Consultez les résultats passés et les tendances du groupe
- Fiche de jeu détaillée — Description, métadonnées et image pour chaque jeu
- Bot Discord — Votez et consultez les résultats directement dans un canal Discord
- Personas IA — Le bot Discord change de personnalité (7 personas par défaut, personnalisables)
- Temps réel — Suivi en direct de la progression des votes via WebSocket
- Révélation du résultat — Affichage du jeu gagnant avec lancement Steam en un clic
- Notifications configurables — Désactivez les notifications par groupe si souhaité
- Application installable — PWA (Progressive Web App) pour un accès rapide depuis mobile ou bureau
- Panneau d'administration — Gestion des utilisateurs, des personas et des paramètres du bot
graph LR
A[Joueur] -->|Connexion Steam| B[Application Web]
A -->|Commandes slash| C[Bot Discord]
B -->|API REST| D[Serveur Backend]
C -->|API REST| D
D -->|Requêtes SQL| E[Base PostgreSQL]
D -->|Bibliothèques| F[APIs Jeux]
D -->|Temps réel| G[WebSocket]
D -->|Webhooks| C
G -->|Votes & événements| B
Le joueur se connecte via Steam. L'application récupère ses bibliothèques de jeux (Steam, Epic, GOG). Un groupe est créé, le serveur calcule les jeux communs. Les membres votent en temps réel via le site web ou le bot Discord. Le résultat est révélé à tous simultanément.
Le bot Discord permet de voter et de consulter les résultats sans quitter Discord. Il adopte une personnalité différente chaque jour grâce à un système de personas IA.
graph LR
A[Joueur Discord] -->|/wawptn-link| B[Liaison de compte]
B --> C[Compte WAWPTN lié]
C -->|/wawptn-games| D[Jeux en commun]
C -->|Boutons 👍👎| E[Vote en direct]
E --> F[Résultat automatique]
/wawptn-setup— Lie un canal Discord à un groupe WAWPTN/wawptn-link— Lie votre compte Discord à votre compte WAWPTN/wawptn-games— Affiche les jeux en commun du groupe- Vote par boutons — Votez directement sur les embeds Discord
- Notifications automatiques — Le canal reçoit les créations de session et les résultats
- Personas rotatives — Le bot change de personnalité automatiquement (sarcastique, dramatique, coach, zen…)
| Environnement | URL | Description |
|---|---|---|
| Développement | http://localhost:5173 (front) / http://localhost:3000 (API) |
Environnement local |
| Production | https://wawptn.battistella.ovh |
Environnement de production |
graph LR
A[Développeur] -->|Push sur main| B[GitHub Actions]
B -->|Lint & types| C{Tests OK ?}
C -->|Oui| D[Bump de version]
D --> E[Build image Docker]
E --> F[Push Docker Hub]
F --> G[Déploiement Production]
C -->|Non| H[Notification erreur]
Le pipeline CI/CD (Intégration et Déploiement Continus) se déclenche à chaque push sur main. GitHub Actions vérifie le code, incrémente la version, construit l'image Docker et la publie sur Docker Hub. Le déploiement en production est automatique via un runner dédié. Traefik gère le routage HTTPS.
L'image Docker contient le backend, le frontend et le bot Discord. En production, deux services tournent : le serveur principal et le bot Discord (sidecar).
- Frontend : React 19, TypeScript, TailwindCSS v4, Zustand, Framer Motion, i18next, PWA
- Backend : Node.js 24, Express 5, Socket.io, Zod, Knex.js
- Bot Discord : Discord.js 14, TypeScript, Personas IA
- Base de données : PostgreSQL 16
- Infrastructure : Docker, Docker Compose, Traefik, GitHub Actions CI/CD
- Architecture API — Routes REST, événements WebSocket, API Discord et flux de vote
- Schéma de base de données — Structure des tables et leurs relations
- Intégration Steam — Authentification OpenID 2.0, synchronisation et protections
- Bot Discord — Architecture du bot, commandes slash, personas IA et flux de vote Discord