6.2 KiB
Bierbaron Casino
Ein vollständiges Fun-Projekt bestehend aus:
- Backend (Node.js / TypeScript / Express)
- Frontend (React + Vite)
- Reverse Proxy (NGINX)
- Datenbank (PostgreSQL)
Das „Bierbaron Casino“ ist ein reines Spaß-Casino ohne Echtgeld.
Alle Einsätze und Gewinne basieren auf einer fiktiven Währung namens „Bierkästen“.
Es gibt kein echtes Geld, keine Auszahlungen, kein Glücksspiel, sondern ein reines Under-Engineering-Projekt für Lernzwecke, Discord-Login, Sessions, Slot-Mechanik und Frontend-Animationen.
✨ Features
🎰 Slot-Machine – „Book of Bier“
- 5 Walzen, 3 Reihen, 10 Gewinnlinien
- Scatter-Symbol (BOOK)
- Gewichtete Symbolverteilung
- Gewinnlinien-Berechnung identisch mit dem Backend
- Animiertes Rollen mit Soundeffekten
- Einzelne Walzen stoppen nacheinander
🔑 Discord OAuth Login
- Login via Discord OAuth 2.0
- Avatare + Userdaten werden übernommen
- Backend speichert Sessions (Express-Session + Secure-Cookie)
💼 Bierkasten-Wallet
- Stundenbasierter Claim (25 Bierkästen pro Stunde)
- Automatische Begrenzung offline gesammelter Stunden
- Transaktionshistorie
- Live-Kontostand
🏆 Leaderboards
- Top Balance (wer hat die meisten Bierkästen?)
- Biggest Single Win (größter Einzelgewinn aus allen Slot-Runden)
🔐 Reverse Proxy via NGINX
- Frontend + Backend sauber über eine einzige externe URL
- Session-Handling via Proxy
- WebSocket-Support für Vite HMR
🛠️ Tech Stack
| Komponente | Technologie |
|---|---|
| Frontend | React, TypeScript, Vite, CSS-in-JS |
| Backend | Node.js 22, TypeScript, Express, pg |
| Datenbank | PostgreSQL 16 |
| Proxy | NGINX (Routing für /auth, /api, /slot, /wallet, /me) |
| Auth | Discord OAuth2 |
| Sessions | express-session (Cookie-basiert) |
| Builds | Docker (+ separates Build/Runtime-Stage für Backend) |
| Dev-HMR | Vite WebSocket Support durch NGINX proxied |
📦 Ordnerstruktur
.
├── backend/ # Node.js + TypeScript Backend
│ ├── src/
│ ├── Dockerfile
│ └── tsconfig.json
│
├── frontend/ # React + Vite Frontend
│ ├── src/
│ ├── public/
│ ├── Dockerfile
│ └── vite.config.ts
│
├── nginx/
│ └── nginx.conf # Reverse Proxy
│
├── docker-compose.yml
├── .env.example
└── README.md
🚀 Lokale Entwicklung (mit Docker)
1. Repository klonen
git clone https://github.com/mrunknownde/bierbaron-casino.git
cd bierbaron-casino
2. .env erstellen
cp .env.example .env
Trage dort deine Daten ein:
- Postgres-Login
- Discord Client ID & Secret
- Redirect URI (muss exakt im Discord Developer Dashboard hinterlegt sein)
- COOKIE_SECURE=false (für HTTP-Dev-Modus)
3. Stack starten
docker compose up -d --build
Danach läuft:
- Frontend: http://localhost
- Backend: intern auf Port 3000 (durch NGINX erreichbar)
- NGINX Reverse Proxy: http://localhost
- Postgres: als Container
db
4. Debugging
Logs ansehen:
docker compose logs -f backend
docker compose logs -f frontend
docker compose logs -f nginx
🔐 Discord OAuth einrichten
- https://discord.com/developers → New Application
- „OAuth2 → General → Redirects“
- Folgende Redirect-URL eintragen (je nachdem, welchen Port du extern nutzt):
http://localhost/auth/discord/callback
- Client ID & Secret kopieren
- In
.enveinfügen:
DISCORD_CLIENT_ID=
DISCORD_CLIENT_SECRET=
DISCORD_REDIRECT_URI=http://localhost/auth/discord/callback
📚 Datenbanktabellen (Kurzüberblick)
users
| Spalte | Typ | Beschreibung |
|---|---|---|
| id | serial | interne User-ID |
| discord_id | text | Discord User-ID |
| discord_name | text | Anzeigename |
| avatar_url | text | Avatar-Bild |
wallets
| Spalte | Typ | Beschreibung |
|---|---|---|
| user_id | int | FK users.id |
| balance | int | aktueller Kontostand |
| last_claim_at | timestamptz | Zeitpunkt des letzten Claims |
slot_rounds
| Spalte | Typ |
|---|---|
| user_id | int |
| bet_amount | int |
| win_amount | int |
| book_count | int |
| grid | jsonb |
wallet_transactions
| Spalte | Typ |
|---|---|
| user_id | int |
| amount | int |
| reason | text |
🧪 Lokaler Dev-Modus (optional ohne Docker)
Backend
cd backend
npm install
npm run dev
Frontend
cd frontend
npm install
npm run dev
Dazu brauchst du dann:
- Postgres lokal
- Nginx lokal oder direkt API URLs ändern
🛡️ Sicherheit & Hinweise
- Dieses Projekt verwendet keine Echtgeld-Transaktionen.
- Die Slot-Mechanik dient als reines Lernbeispiel (Game-Loop, RNG, Paylines, Persistenz).
- Die Währung „Bierkästen“ ist rein fiktiv.
- Sessions werden in Cookies gespeichert – sichere Einstellungen (Secure, SameSite) sind in
.envkonfigurierbar. - Für Produktionsbetrieb solltest du TLS via Traefik, Caddy oder NGINX-LetsEncrypt hinzufügen.
🚀 Deployment (Prod)
Empfohlene Struktur
-
Static Build für Frontend (kein Vite Dev-Server)
-
NGINX dient sowohl als:
- Reverse Proxy
- Static File Server
-
Backend in
NODE_ENV=production -
COOKIE_SECURE=true
-
HTTPS aktiviert
Ein mögliches Setup:
docker compose -f docker-compose.prod.yml up -d
❤️ Contributing
Pull Requests, Verbesserungen, Issues & Feature-Vorschläge sind jederzeit willkommen.
📄 Lizenz
Dieses Projekt steht unter einer freien Lizenz deiner Wahl (MIT empfohlen).
Hinweis: Aufgrund der Slot-Mechanik solltest du klar kommunizieren, dass kein Echtgeld involviert ist, um Missverständnisse zu vermeiden.
🤝 Kontakt
Für Fragen, Ideen oder Austausch: GitHub Issues oder Discord-Kontakt.