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):
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.
Two types, one unified interface:
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:
gamefiles/covers/gamefiles/screenshots/How to use it:
| 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 | DEBUG
No git clone, no build. Just two commands:
curl -O https://raw.githubusercontent.com/gomaaz/Gameparty/main/docker-compose.yml
docker compose up -d
Open 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 -d
Persistent data:
gameparty-data) — survives restarts and updates./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 start
Requires 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 |
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.
Content type
Image
Digest
sha256:f059fc0cb…
Size
51 MB
Last updated
7 months ago
docker pull gomaaz/gameparty