153c83f7fa50a04d7827c2247202a830a1879d56
NaughtyBulldogs — Streamer Rating App
Rychlý start (Docker)
# 1. Zkopíruj a edituj .env
cp .env.example .env
# 2. Vygeneruj bcrypt hash admin hesla
docker compose run --rm app php -r "echo password_hash('tve_heslo', PASSWORD_BCRYPT);"
# Zkopíruj výstup do .env jako ADMIN_HASH=...
# 3. Spusť
docker compose up -d
# App běží na http://localhost:8080
Při prvním startu entrypoint automaticky:
- Počká na PostgreSQL (healthcheck)
- Vytvoří tabulky a naseeduje všechny streamery ze schema.sql
- Spustí Apache
# Logy
docker compose logs -f app
# Restart
docker compose restart app
# Stop + smazání dat
docker compose down -v
Stack
- Frontend: Vanilla JS (single HTML file, no build step)
- Backend: PHP 8.1+
- Database: PostgreSQL 14+
Struktura souborů
/
├── public/
│ └── index.html ← celý frontend
├── api/
│ ├── db.php ← PDO připojení + helpers (nepřístupné zvenčí)
│ ├── auth.php ← login / logout / session check
│ ├── streamers.php ← CRUD streamerů + hodnocení
│ └── live.php ← live refresh (Twitch + Kick API)
├── config.php ← credentials (NIKDY do gitu!)
├── schema.sql ← PostgreSQL schéma + seed data
├── .htaccess ← routing + security headers
└── .gitignore
Instalace
1. PostgreSQL databáze
# Vytvoř databázi a uživatele
psql -U postgres
CREATE DATABASE streamers_db;
CREATE USER streamers_user WITH ENCRYPTED PASSWORD 'silne_heslo';
GRANT ALL PRIVILEGES ON DATABASE streamers_db TO streamers_user;
\q
# Aplikuj schema
psql -U streamers_user -d streamers_db -f schema.sql
2. config.php
cp config.php config.php
# Edituj hodnoty:
# - DB_HOST, DB_NAME, DB_USER, DB_PASS
# - ADMIN_HASH — vygeneruj: php -r "echo password_hash('tve_heslo', PASSWORD_BCRYPT);"
# - SESSION_SECRET — náhodný string min 32 znaků
# - TWITCH_CLIENT_ID + TWITCH_CLIENT_SECRET (z https://dev.twitch.tv/console/apps)
# - ALLOWED_ORIGIN — tvá doména
3. Twitch API credentials
- Jdi na https://dev.twitch.tv/console/apps
- Vytvoř novou aplikaci
- OAuth Redirect URL:
https://tvadomena.cz - Zkopíruj Client ID a Client Secret do
config.php
4. Nahrání na server
# Nahraj všechny soubory kromě config.php (ten edituj přímo na serveru)
rsync -av --exclude='config.php' ./ user@server:/var/www/streamers/
# Na serveru edituj config.php
ssh user@server
nano /var/www/streamers/config.php
5. PHP session nastavení
Ujisti se, že server má session.cookie_httponly = On a session.cookie_secure = On (pro HTTPS).
API endpoints
| Method | URL | Auth | Popis |
|---|---|---|---|
| GET | /api/streamers |
— | Veřejný seznam (jen ohodnocení) |
| GET | /api/streamers?all=1 |
Admin | Všichni streamers |
| POST | /api/streamers |
— | Navrhnout streamera (divák) |
| POST | /api/streamers?admin=1 |
Admin | Přidat streamera |
| PUT | /api/streamers?id=N |
Admin | Uložit hodnocení |
| DELETE | /api/streamers?id=N |
Admin | Smazat streamera |
| GET | /api/auth?action=check |
— | Zkontrolovat session |
| POST | /api/auth?action=login |
— | Přihlásit admin |
| POST | /api/auth?action=logout |
Admin | Odhlásit |
| GET | /api/live |
Admin | Refresh live statusů |
Live refresh
- Twitch: Helix API, batch po 100 streamerech — Přesný, spolehlivý
- Kick: veřejný endpoint
kick.com/api/v2/channels/{name}— funguje bez auth, ale může se změnit - Cache: výsledky jsou cachované 120s (nastavitelné v
config.phpjakoLIVE_CACHE_TTL) - Refresh se spouští ručně tlačítkem v admin panelu (nebo cron job)
Volitelný cron pro automatický refresh
# Každé 3 minuty refreshuj live statusy (potřebuje admin session — doporučeno CLI script)
*/3 * * * * curl -s -b "PHPSESSID=..." https://tvadomena.cz/api/live > /dev/null
.gitignore
config.php
/tmp/
*.log
Description
Languages
HTML
52.7%
PHP
36.5%
PLpgSQL
5.7%
Shell
4.3%
Dockerfile
0.8%