// Self-Hosted · Free

LAN PARTY
MANAGER

A self-hosted web app for organizing your LAN party weekends. Crew management, expenses, tournaments, Twitch livestreams, a shared media vault, and Discord notifications — all from any phone or laptop on your network.

localhost:3001 — HUB
8
Players
€ 420
Budget
3
Tournaments
2
Upcoming
CW
CrossWax
ADMIN
AL
Alfred
READY
CH
Chakiboule
USER
BY
Byndou
READY

EVERYTHING FOR A
PERFECT LAN

One app your whole crew uses from their phones and laptops. No cloud, no subscription — just run it on any machine or Raspberry Pi. Fully available in English and French.

Live Dashboard
The HUB everyone lands on: your crew roster with clickable profiles, a live activity feed of the latest moves, and event stats at a glance — the pulse of your LAN in one screen.
Crew Management
Player profiles with avatar, clothing size, and volunteer roles. Admins can grant roles, reset passwords, or deactivate a member — no database access required.
LAN Calendar & RSVP
Schedule events with a cover image, optional capacity, and a live countdown. Players RSVP with their own arrival and departure dates, bounded to the event window.
Treasury & Pro-Rata
The treasurer logs expenses by category. Costs split automatically by each player's attendance nights — pay only for the days you were there. P2P settlement shows who owes whom in the fewest transfers. Pick your currency (€, $, £) and export to CSV.
Prizes Showcase
Turn on a per-event prize board with photos and descriptions — ideal for sponsored or competitive LANs. When enabled it takes the Treasury's place, since crews handing out prizes usually don't split costs.
Event Sponsors
Showcase the brands backing your event. Upload sponsor banners (PNG, GIF or WebM) with click-through links — shown on the event, tournaments and player profile pages.
Team & Solo Tournaments
Single-elimination brackets and round-robin standings for team or solo games. Seeding, live scores, and a full-page bracket view to project on the big screen.
Hall of Fame
Every tournament victory is tallied into a persistent leaderboard — players ranked by wins and participations. Bragging rights that outlive the weekend and carry into the next LAN.
Twitch Livestreams
Embed any Twitch channel with a live badge powered by the Helix API, plus clip highlights. The crew watches the caster without leaving the app.
Media Vault
Players upload photos and videos (up to 100 MB) straight from the app. Shared gallery with lightbox, video playback, event filter, and admin bulk delete.
Discord Notifications
Post new-event announcements and reminders straight to a Discord channel via webhook — with customizable templates and a one-click test button. Optional and self-contained.
Email & Recovery
Optional SMTP integration for self-service password resets. Admins can also issue a one-time temporary password from a player's profile.
Backup & Restore
Download a full backup (database + all uploads) as a single archive — then restore it in one click from the Settings page. Your data stays in your hands.
Invite-Only Access
The first user becomes admin automatically. Every later sign-up needs a valid per-event invite code — short, shareable as a QR, and admin-revokable.
Bilingual EN / FR
Every screen is fully localized in English and French. Each player picks their language from the navbar — the choice is remembered on their device.
Docker · Raspberry Pi
One-command deploy from Docker Hub. Multi-arch images run on any machine or Raspberry Pi 4/5 (ARM64). SQLite means zero external dependencies — data stays on your box.

ONE-CLICK
DISCORD
SIGN-IN

Skip the password. Players log in with their nickname or their email — whichever they remember — or in one click with Discord, the platform your crew already lives in. Fully optional and off by default.

  • Log in with your nickname or your email
  • One-click "Continue with Discord" on Login and Register
  • New players sign in with Discord after an invite code
  • Link or unlink Discord anytime from your profile
  • Credentials live in the database, never in .env
localhost:3001/login

PLAN YOUR LANS,
KEEP THE CREW
IN SYNC

Schedule your LAN dates well in advance with a cover image and optional capacity. Every player RSVPs with their own arrival and departure dates.

  • Cover image and a live countdown per event
  • Per-player RSVP with arrival / departure dates
  • Optional capacity with a "seats left" indicator
  • Per-event invite codes, shareable as a QR
localhost:3001/events

UPCOMING — 2 EVENTS

LAN Party #6 — Summer Edition
UPCOMING
14 Jul 2026 → 17 Jul 2026 4 DAYS
📍 42 Gaming St, Lyon
Halloween LAN 2026
UPCOMING
30 Oct 2026 → 01 Nov 2026 3 DAYS

PAST — 1 EVENT

LAN Party #5 — Spring
PAST
03 Jun 2026 → 05 Jun 2026 3 DAYS

TEAM OR SOLO
TOURNAMENT
BRACKETS

Run tournaments for any game — team events like CS or Rocket League, or solo events like Smash Bros. Single-elimination brackets or round-robin standings.

  • Choose TEAM or INDIVIDUAL when creating a tournament
  • Auto-generated brackets with shuffled seeding
  • Round-robin standings table with points
  • Live score entry — winner auto-advances to the next round
  • Full-page bracket view to project on a shared screen
localhost:3001/tournaments

BRACKET — SUPER SMASH BROS ULTIMATE

Semifinal

CrossWax
3
HugeP
1
SquallMax
3
Powet
2

Final

CrossWax
SquallMax
SOLO SINGLE ELIMINATION IN PROGRESS

SPLIT COSTS
BASED ON WHO
WAS THERE

The treasurer logs shared expenses. The pro-rata algorithm calculates each player's fair share based on how many nights they attended.

  • Expenses by category: food, drinks, equipment, accommodation…
  • Pro-rata: cost ÷ person-nights × your nights = your share
  • Late arrivals and early leavers pay less, automatically
  • P2P settlement — who pays whom, in the fewest transfers
  • One-click CSV export of the full breakdown
localhost:3001/finances — Pro-Rata
€ 420
Total
3
Nights
9
Person-nights
Player Nights Share
CrossWax
4 nights € 186.67
Alfred
3 nights € 140.00
Chakiboule
2 nights € 93.33

WATCH THE
CASTER WITHOUT
LEAVING THE APP

Admin embeds any Twitch channel directly inside the app, with a live badge from the Helix API. The whole crew watches live from the same interface.

  • Admin adds any Twitch channel name in one click
  • Full 16:9 Twitch player embedded per stream card
  • Live badge auto-detected via the Helix API
  • Clip highlights and an optional chat iframe
localhost:3001/streams

ACTIVE — 1 STREAM

crosswax
twitch.tv/crosswax
LIVE
▶ WATCH
Twitch Player

EVERY PHOTO,
EVERY CLIP,
IN ONE PLACE

Players upload their best shots and highlights straight from the app. A shared vault that outlives the group chat — browsable and always on your network.

  • Any player can upload — images and videos up to 100 MB
  • JPEG, PNG, GIF, WebP, MP4, WebM, MOV supported
  • Full-screen lightbox for photos, native player for videos
  • Filter by event; delete your own, admin deletes any
localhost:3001/media

PHOTOS — 8   ·   VIDEOS — 3

UP AND RUNNING
IN 3 STEPS

No cloud account. No subscription. No database server. Pull the images from Docker Hub and run everything with Docker Compose — on your laptop, a spare PC, or a Raspberry Pi on your local network.

// STEP 01
Create docker-compose.yml
# docker-compose.yml
services:
  backend:
    image: crosswax/
      lanpartymanager-backend

  frontend:
    image: crosswax/
      lanpartymanager-frontend
    ports: ["3001:80"]
// STEP 02
Set your secret key
# create a .env file next to
# the compose file

SECRET_KEY=a-long-random-
string
// STEP 03
Launch
docker compose up -d

# Frontend → :3001
# API → :8000
# API docs → :8000/docs

Multi-arch images (amd64 + arm64) are published on Docker Hub — a copy-paste compose file with volumes is shown in the app's Settings page.

Deploy as a Portainer stack

Using Portainer? Paste this full stack into a new Stack — it pulls both images from Docker Hub, persists your database and uploads, and serves the app on port 3001. Set a strong SECRET_KEY in the stack's environment variables.

docker-compose.yml
services:
  backend:
    # https://hub.docker.com/r/crosswax/lanpartymanager-backend
    image: crosswax/lanpartymanager-backend:latest
    ports:
      - "8000:8000"
    volumes:
      - ./data:/app/data        # SQLite database (persisted)
      - ./uploads:/app/uploads  # Avatars, media, video thumbnails (persisted)
    environment:
      SECRET_KEY: ${SECRET_KEY:-lanparty-secret-CHANGE-ME}
      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"
    volumes:
      - ./uploads:/app/uploads  # Nginx serves uploads directly
    depends_on:
      - backend
    restart: unless-stopped

BUILT WITH THE
RIGHT TOOLS

FastAPI
Python 3.11 · Backend API
React 18
TypeScript · Frontend
SQLite
Via SQLAlchemy · Database
Docker
Compose · Deployment
Tailwind CSS
Utility-first · Styling
JWT + bcrypt
python-jose · Auth
Nginx
Alpine · Frontend serving
Vite 5
Build tool · Dev server

Built by people who take their LAN parties a little too seriously. You'll fit right in.

// Self-Hosted · Free Forever

READY TO HOST
YOUR LAN?

Pull the images from Docker Hub, deploy in minutes, and let your crew focus on gaming — not spreadsheets. Streams, media, tournaments, expenses, and Discord alerts all in one place.