Auto-hébergé · Gratuit · FR/EN
L'application auto-hébergée qui fait tourner tout le week-end LAN — invitations, brackets, frais partagés, photos — depuis un Raspberry Pi posé dans un coin de la pièce. Votre serveur, vos données, votre équipe.
Chaque module se désactive depuis les réglages admin : l'application reste exactement à la taille de votre LAN.
Des codes d'invitation par événement, partageables en QR et révocables à tout moment. Les dates de RSVP alimentent tout le reste.
Brackets à élimination directe et round-robins, en équipe ou en solo, pour n'importe quel jeu — les scores entrent, le classement sort.
Notez les dépenses ; chacun paie au prorata des nuits réellement passées. Exportable.
Photos et clips dans une galerie partagée, avec réactions emoji et miniatures vidéo.
Une page projecteur autorisée par jeton : matchs en cours, classements, arrivées, mur de photos, cérémonies de trophées.
Proposez des créneaux, laissez l'équipe voter, verrouillez le programme. Le kiosque affiche le compte à rebours du prochain.
Intégrez les chaînes et les clips de l'équipe, avec statut live et nombre de viewers via l'API Helix.
Connexion en un clic et annonces relayées sur votre serveur — LPM travaille avec Discord, pas contre lui.
Qui apporte le switch, qui apporte le projecteur — engagements, demandes ouvertes, et le kit de l'édition passée pré-coché.
Une liste de courses partagée par événement, pour que le frigo suive les plans de douze personnes.
Des récompenses définies par l'équipe, au vote ou par décret, révélées une à une sur le projecteur.
Après le week-end : résultats, meilleures photos, badges et chiffres sur une page, avec un lien de partage.
Vingt-neuf fonctionnalités au total — dont les checklists de sac, un chat d'avant-LAN, des mini-jeux, les sponsors et les lots. Le README les liste toutes.
Montez un bracket à élimination directe ou un round-robin en une minute, en équipe ou en solo. Un score déclaré depuis n'importe quel téléphone, et le tour suivant comme le classement suivent tout seuls.
Notez la location, les courses, la commande de pizzas. LPM répartit le total en nuits-personnes, directement depuis les dates de RSVP de chacun — pas de tableur, pas de « on verra ça après ».
Une URL sur le projecteur, autorisée par un jeton révocable — aucune connexion personnelle sur un écran partagé. Elle fait tourner matchs en cours, classements, arrivées et mur de photos, et s'interrompt pour ce qui compte : un champion, un trophée, une photo fraîche.
Copiez le fichier ci-dessous — il récupère les deux images sur Docker Hub.
Passez cette étape et LPM en génère une au premier démarrage — ou mettez votre propre chaîne aléatoire de 32 caractères ou plus dans un fichier .env à côté.
Exécutez docker compose up -d. Le premier compte créé devient admin ; tous les autres entrent avec un code d'invitation.
services:
backend:
image: crosswax/lanpartymanager-backend:latest
# No ports: — the frontend's Nginx reaches it over the Docker network.
volumes:
- ./data:/app/data # SQLite database (persisted)
- ./uploads:/app/uploads # Avatars, media, video thumbnails (persisted)
environment:
SECRET_KEY: ${SECRET_KEY:-} # optional, from .env (step 2)
DATABASE_URL: sqlite:///./data/lanparty.db
UPLOAD_DIR: /app/uploads
restart: unless-stopped
frontend:
image: crosswax/lanpartymanager-frontend:latest
ports:
- "3001:80"
environment:
# Where your reverse proxy (Nginx Proxy Manager, Caddy…) connects from.
# The default covers a proxy running in Docker on the same host.
LPM_TRUSTED_PROXIES: "172.16.0.0/12"
volumes:
- ./uploads:/app/uploads # Nginx serves uploads directly
depends_on:
- backend
restart: unless-stopped
services:
backend:
# https://hub.docker.com/r/crosswax/lanpartymanager-backend
image: crosswax/lanpartymanager-backend:latest
# No ports: — the frontend's Nginx reaches it over the Docker network.
volumes:
- ./data:/app/data # SQLite database (persisted)
- ./uploads:/app/uploads # Avatars, media, video thumbnails (persisted)
environment:
# Empty: the backend generates a random key on first start and keeps
# it in ./data/secret_key. Never paste an example value here.
SECRET_KEY: ""
DATABASE_URL: sqlite:///./data/lanparty.db
UPLOAD_DIR: /app/uploads
restart: unless-stopped
frontend:
# https://hub.docker.com/r/crosswax/lanpartymanager-frontend
image: crosswax/lanpartymanager-frontend:latest
ports:
- "3001:80"
environment:
# Where your reverse proxy (Nginx Proxy Manager, Caddy…) connects from.
# The default covers a proxy running in Docker on the same host.
LPM_TRUSTED_PROXIES: "172.16.0.0/12"
volumes:
- ./uploads:/app/uploads # Nginx serves uploads directly
depends_on:
- backend
restart: unless-stopped
Puis docker compose up -d — l'application répond sur le port 3001.
À coller comme stack Portainer. Utilisez-y des valeurs littérales : Portainer transforme ${VAR:-default} en chaîne vide.
Un client Windows optionnel qui embarque votre instance : notifications natives quand un match est appelé ou qu'une annonce tombe, et stats League of Legends capturées automatiquement pendant la LAN. Même app, même serveur, zéro configuration en plus pour l'équipe.
LAN Party Manager (LPM) est une application web gratuite et auto-hébergée pour organiser des LAN parties. Elle réunit tout ce dont une équipe a besoin au même endroit — invitations et RSVP, brackets de tournoi, partage des frais au prorata, streams Twitch, galerie photo partagée et kiosque grand écran — et tourne sur votre propre machine ou un Raspberry Pi avec Docker. Disponible en français et en anglais, avec une app desktop Windows optionnelle.
Oui. Pas d'abonnement, pas d'offre payante, aucun compte à créer chez qui que ce soit. Vous la faites tourner sur votre machine — la seule facture, c'est l'électricité.
N'importe quelle machine avec Docker : un portable, un PC qui traîne ou un Raspberry Pi 4/5. Les images existent en amd64 et arm64, et SQLite évite tout serveur de base de données à installer.
Chez vous : un fichier SQLite et un dossier d'uploads. Rien n'est envoyé nulle part — il n'y a pas de télémétrie. Téléchargez une sauvegarde complète (base + uploads) depuis les Réglages quand vous voulez, et restaurez-la en un clic.
Non — c'est une application web, n'importe quel navigateur de téléphone ou de portable suffit. Les joueurs sous Windows peuvent aussi prendre l'app desktop optionnelle pour les notifications natives et les stats League of Legends.
L'application elle-même tourne sur votre réseau. Les intégrations optionnelles — Discord, Twitch, e-mail, Steam — joignent leurs services par internet quand vous les activez.
Seulement les gens que vous invitez. Le premier compte devient admin ; toute inscription suivante demande un code d'invitation par événement, partageable en QR code et révocable à tout moment.
Oui. La plupart des modules — chat, planning, matériel, lots, sponsors, mini-jeux, kiosque, récap et d'autres — s'activent ou se coupent depuis les réglages admin, pour que l'application reste aussi simple que votre LAN.
Un tableur et un serveur Discord couvrent chacun un morceau de la LAN ; LPM les relie. Les dates de RSVP alimentent le prorata, les résultats de tournoi alimentent le Hall of Fame et le récap, et le kiosque affiche le tout sur grand écran — rien n'est recopié à la main. Discord reste utile : LPM peut y publier vos annonces et permet de s'y connecter en un clic.
Tous. Les tournois, le planning et la bibliothèque de jeux ne dépendent d'aucun titre en particulier — montez un bracket pour CS, Rocket League, Smash Bros ou n'importe quoi d'autre. League of Legends a en plus des stats automatiques via l'app desktop, et l'arcade intégrée embarque Neon Survivor.
Posez donc la même question aux gens de Home Assistant, d'Uptime Kuma ou de Jellyfin. LPM est conçu autour de notre bande de dix potes, pas pour une méga-LAN de 250 joueurs. À cette échelle, SQLite est le choix sérieux : rien à administrer, et une sauvegarde, c'est une copie de fichier.
On organise des LANs depuis 2015, et les origines de LPM remontent à 2019, quand j'apprenais Ruby on Rails et que nos week-ends viraient au Simulateur de Tableur. Alors oui — Claude Code a énormément accéléré les choses depuis que j'ai pris mon compte en juillet, et a donné vie à cette vision en un temps record pour un MVP à notre LAN d'octobre. Indice : cette landing page aussi est vibecodée. J'utilise VS Code tous les jours au boulot et je me fiche royalement d'aller sur son site web. Désolé, mais 200 heures à aligner des divs et régler des paddings, ce n'était pas dans le budget — je préfère les mettre dans les ~90 commits, la QA et les fonctionnalités de LPM. 😉
AGPL-3.0. Le code source complet est sur GitHub depuis la 1.3.3 — les versions jusqu'à la 1.3.2 sont restées en test privé, le temps de nettoyer le vieux spaghetti du backend. Faites-la tourner, forkez-la, améliorez-la : si vous servez une version modifiée à votre équipe, partagez vos changements. C'est le deal.
Plus maintenant. Au début oui, c'était plus simple pour développer et tester. Depuis la 1.3.3, le backend tourne sous un utilisateur non privilégié, lpm : le conteneur ne démarre en root que le temps de lui confier data/ et uploads/, puis abandonne ces droits pour de bon. Les installations existantes basculent toutes seules au premier démarrage, sans aucune commande à lancer.
Surtout ffmpeg. L'app Python elle-même pèse quelques mégaoctets ; le reste, c'est l'image de base Python 3.11, les bibliothèques d'image de Pillow et un ffmpeg complet — celui qui transforme les clips de votre équipe en miniatures de galerie, chez vous, sans service externe. De toute façon, les photos de pizza du week-end pèseront plus lourd dès le samedi soir.
// Votre serveur est déjà assez bon
Deux images Docker, un fichier compose, dix minutes. Le premier RSVP peut tomber ce soir.