Disclaimer: This project is 100% vibe-coded. It was built for fun, at a LAN party, for friends — not for production. No guarantees of any kind. The author takes no responsibility for any damage, data loss, bugs, or chaos that may result from using this software. Use at your own risk. Have fun. 🤙
Because telling your friends "let's play something" is never quite enough.
We all know the situation: you've got a group of friends at a LAN party, everyone wants to have fun together — but half the group is glued to their own game, and getting everyone to actually play together feels like herding cats. Someone always has a reason not to join. "Just one more round." "I don't really know that game." "Maybe later."
Gameparty was built to fix exactly that.
The idea is simple: turn your LAN party into a shared experience with a little friendly competition. Players earn Coins for gaming together, spend them on fun actions in the Shop, challenge each other to Duels and Team Duels, and fight for the top spot on the Leaderboard. Suddenly, joining a group session isn't just something you do — it's something you want to do, because there's something at stake and the whole crew is in on it.
It's not about winning. It's about getting everyone off their corner of the couch and into the same game — laughing, competing, and actually spending time together. That's the whole point.
Players earn Coins for every minute they spend in a group session. The rate scales with the number of participants and is fully configurable by the admin. Session cards show the expected rate while waiting, and a live counter ticks up in real time once the session is running.
Spend Coins on actions that shake up the session:
| Item | Cost | Description |
|---|---|---|
| Controller Point | 20 Coins | Permanent victory point on the leaderboard |
| Force Play | 5 Coins | Force one other player to join a game of your choice |
| Skip Token | 2 Coins | Skip a game you don't want to play |
| Drink Order | 3 Coins | Order someone to drink immediately |
| Pickpocket (Coins) | 10 Coins | Steal 0–20 Coins from another player |
| Pickpocket (Controller) | 50 Coins | Steal a Controller Point — 50% chance |
Targeted actions (Force Play, Drink Order, Pickpocket) trigger a real-time notification for the recipient, including an acknowledgement flow.
1v1 Duels: Challenge another player head-to-head — stakes are deducted from both sides the moment a duel is accepted. No backing out.
Team Duels: Build two teams from everyone present, set a stake per person, and every participant must individually accept before it goes live. The winner is set by the Group Leader; the admin pays out the pot.
FFA (Free-for-All): The third challenge type — everyone against everyone. Any number of players (minimum 3) enter with equal stakes, and the payout is distributed by finishing position. Configure exactly how much each place earns (e.g. 1st: 50%, 2nd: 30%, 3rd: 20%) or use a preset. Quick picks included: 50/30/20, 60/40, 70/20/10, and Winner-Takes-All. Every participant must accept individually before stakes are locked. Once the session ends, the creator assigns the final standings; the admin reviews and triggers the payout.
Payout Modes (available for all three challenge types):
- Winner Takes All — the default. The full pot goes to the winner (or winning team).
- Split by % — configure a custom winner/loser percentage split. The loser gets a partial refund; the winner takes the rest. The winner must receive at least 50%.
The game list is the heart of Gameparty — all approved games in one place, each with cover art visible as a faded background on every card.
- Game detail modal — click any game title to open a full view with a screenshot slider (cover + up to 6 in-game screenshots), release date, genres, supported platforms, Metacritic score, shop links, description, and PC system requirements
- Shop links — clickable badges below each game title (Steam, GOG, Epic, and more)
- YouTube badge — quick link to a YouTube search for any game
- Game Matcher — shows which game currently has the most interested players
- Players can mark their interest per game; the admin can add, edit, approve, and delete games
Two types, one unified interface:
- Spontaneous sessions — start immediately, players join the lobby
- Planned sessions — scheduled for a specific date/time, visible to everyone in advance
- Session cards show the game's cover image for quick recognition
- Optional player slots — numbered seats, lowest free slot filled first
- When a session ends and Coins are paid out, every participant gets a receipt modal with game, duration, player count, and coin earnings
A live panel in the header collects all pending actions — duel challenges, team duel invites, shop tasks (Force Play, Drink Order), and admin payout alerts. Badge count updates instantly for everyone.
Connect to RAWG.io to automatically enrich your game library with rich metadata. Get a free API key at rawg.io/apidocs and set it in docker-compose.yml.
What gets fetched and stored locally:
- Cover image →
gamefiles/covers/ - Up to 6 in-game screenshots →
gamefiles/screenshots/ - Description, Metacritic score, genres, release date, platforms, PC system requirements
- Store links (Steam, GOG, Epic, Xbox, PlayStation Store, official website)
How to use it:
- Toggle RAWG on/off in the admin panel under Game Data
- Click "Load game data from RAWG" to enrich all approved games at once — already complete entries are skipped to save API calls
- When suggesting a new game, an autocomplete dropdown appears with RAWG results — selecting one pre-fills all metadata and downloads images immediately
- The admin panel shows total API requests made and how many games have been enriched
| Action | Description |
|---|---|
| Export CSV | Download all approved games as a CSV file |
| Import CSV | Upload a CSV to add or update games — existing entries are overwritten, player interests are preserved |
| Import via URL | Paste a public Google Sheets link or direct CSV URL — fetched and parsed server-side |
| Load Default Games | One-click import of ~100 pre-configured games — ideal for a fresh setup |
All imports show a preview modal before committing. CSV format:
name,genre,maxPlayers,shoplink_label_1,shoplink_url_1,shoplink_label_2,shoplink_url_2
"Mario Kart 8","Racing",4,"Steam","https://store.steampowered.com/app/...","",""
Tip (Excel): Save as CSV UTF-8 (comma delimited) — not the default semicolon-separated format used in some locales.
Live log viewer in the admin panel with level filter (ALL / INFO / ERROR / DEBUG). RAWG API calls are logged in detail at DEBUG level. Set the log level in docker-compose.yml:
LOG_LEVEL=INFO # OFF | INFO | DEBUGNo git clone, no build. Just two commands:
curl -O https://raw.githubusercontent.com/gomaaz/Gameparty/main/docker-compose.yml
docker compose up -dOpen http://localhost:3000 in your browser. Everyone on your network can join via http://<HOST-IP>:3000.
Default login (first start only):
| Field | Value |
|---|---|
| Username | admin |
| PIN | 1234 |
Change default credentials before first start by editing
SEED_ADMIN_NAME/SEED_ADMIN_PINindocker-compose.yml.
Update to the latest version:
docker compose pull && docker compose up -dPersistent data:
- The SQLite database lives in a named Docker volume (
gameparty-data) — survives restarts and updates - Cover images and screenshots downloaded via RAWG are stored in
./gamefiles/(bind-mounted from your host)
Custom port (e.g. 8080):
Change "3000:3000" to "8080:3000" in docker-compose.yml.
RAWG API key:
Set RAWG_API_KEY=your_key_here in docker-compose.yml. Free key at rawg.io/apidocs.
If you expose Gameparty via a reverse proxy, SSE (live updates) requires specific configuration. Add this to the Advanced tab of your Proxy Host:
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
proxy_http_version 1.1;
proxy_set_header Connection '';Without
proxy_buffering off, live updates are silently swallowed and clients fall back to polling only.
npm install
npm startRequires Node.js 18+. Server runs at http://localhost:3000.
All configuration lives in docker-compose.yml:
| Variable | Default | Description |
|---|---|---|
PORT |
3000 |
HTTP port |
DB_PATH |
/data/gameparty.db |
SQLite database path |
GAMEFILES_PATH |
/app/gamefiles |
Storage path for covers and screenshots |
TZ |
Europe/Berlin |
Timezone for timestamps |
RAWG_API_KEY |
(empty) | RAWG.io API key — enables game metadata enrichment |
LOG_LEVEL |
INFO |
Log verbosity: OFF / INFO / DEBUG |
SEED_ADMIN_NAME |
admin |
Initial admin username (fresh DB only) |
SEED_ADMIN_PIN |
1234 |
Initial admin PIN (fresh DB only) |
| Role | Permissions |
|---|---|
player |
Earn Coins, use Shop, create and accept Duels, Team Duels & FFA Challenges, mark game interest, join sessions |
admin |
+ Start/end sessions, manage players, adjust Coins, configure coin rates, pay out duel/FFA pots, manage game library, run RAWG enrichment |
- Backend: Node.js, Express, better-sqlite3 (SQLite)
- Frontend: Vanilla JS, HTML5, CSS3 — no framework
- Realtime: Server-Sent Events (SSE)
- External API: RAWG.io (optional)
- Deployment: Docker / Docker Compose
The UI supports English (default) and German. Switch via the flag button in the header — stored in localStorage.
Every change is committed with a version tag (v2.3.x).
All releases are available under Releases.









