Initial PlayBull release with Trilogy Hub integration.

Includes homelab deploy tooling, image position/zoom manifest persistence, and full trading/casino stack.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-02 08:31:36 +02:00
commit 94b6cc3be9
60 changed files with 9206 additions and 0 deletions

80
README.md Normal file
View File

@@ -0,0 +1,80 @@
# 🐂 PlayBull — Trading & Gamble (Spielgeld)
Eine mobile-first Web-App, die **Live-Trading** mit echten Aktienkursen und ein **Casino**
verbindet. Alles mit Spielgeld, alle Spieler teilen denselben Live-Markt.
> ⚠️ Reines Spaßprojekt mit **Spielgeld**. Kein echtes Geld, kein echtes Glücksspiel.
## Features
### 📈 Trading (für alle sichtbar, Handel mit Login)
- **Echte Startkurse** über die Finnhub-API (Aktien) + Live-Simulation
- **Geteilter Live-Markt**: Kurse sind bei allen identisch und ticken jede Sekunde
- **Long & Short**, Position-Netting, Live-P&L, Depot/Net-Worth
- 14 Assets: Aktien (AAPL, TSLA, NVDA, …), Krypto/Meme (BTC, ETH, DOGE, BULL)
- Live-Chart pro Asset (Canvas)
### 🎛️ Markt-Manipulation (Spaßmodus: jeder eingeloggte User)
- **Pump 🚀 / Dump 📉**, Kurs hart **setzen**, **Halt/Resume**, **Reset**
- Wirkt sofort für **alle** Spieler gleichzeitig (geteilter Live-Status)
### 🎰 Casino (Login erforderlich)
- **🐔 Chicken Road** — Straße überqueren, Multiplikator steigt, rechtzeitig cashen (4 Schwierigkeiten)
- **🃏 10×10 Karten-Deck** — 100 Felder, Bomben vermeiden, Multiplikator steigt pro sicherer Karte
- **🚀 Crash** — server-autoritativ, raus bevor die Rakete crasht
- **🎲 Dice** — Über/Unter mit einstellbarem Risiko
- **🪙 Coinflip** — Kopf oder Zahl, 2×
### ⚙️ Einstellungen / Admin (Spaßmodus)
- **Geld bearbeiten** bei sich selbst & anderen (hinzufügen / setzen, Quick-Buttons)
- Markt-Kontrolle direkt aus den Einstellungen
- Avatar wählen, Spielerliste
### 🏆 Social
- Live-Aktivitäts-Feed (Trades, Wins, Manipulationen) als Ticker + Liste
- Rangliste nach Net-Worth
## Tech-Stack
- **Backend**: Node.js, Express, Socket.IO, eingebautes `node:sqlite`
- **Auth**: JWT (httpOnly-Cookie) + bcrypt
- **Frontend**: Vanilla JS (ES-Module), Canvas-Charts, mobile-first CSS
- Keine Build-Tools nötig
## Start
```bash
npm install
npm start
```
Dann im Browser öffnen: **http://localhost:3000** (Handy: gleiche WLAN-IP, Port 3000).
## Konfiguration (`.env`)
| Variable | Bedeutung |
|---|---|
| `PORT` | Server-Port (Default 3000) |
| `JWT_SECRET` | Secret für Login-Tokens |
| `FINNHUB_API_KEY` | API-Key für echte Aktienkurse |
| `START_BALANCE` | Startguthaben neuer Spieler (Default 10000) |
## Verbindung Trading ↔ Casino
Beide nutzen **denselben Spielgeld-Kontostand**. Gewinne aus dem Casino kannst du
direkt im Trading einsetzen — und umgekehrt. Der erste registrierte User existiert
gleichberechtigt; im Spaßmodus darf jeder eingeloggte Spieler den Markt manipulieren
und Guthaben bearbeiten.
## Projektstruktur
```
server/
index.js Express + Socket.IO + Routen
config.js .env-Loader
db.js SQLite-Schema & Helper
auth.js Register/Login/JWT
market.js Finnhub + Live-Simulation + Manipulation
trading.js Buy/Sell/Short, Portfolio, P&L
games.js Chicken, Mines, Crash, Dice, Coinflip
realtime.js Socket-Broadcast + Feed
public/
index.html, css/styles.css, js/app.js
```