152 lines
4.2 KiB
Markdown
152 lines
4.2 KiB
Markdown
# 🏆 Lara Kiesewetter – Live Schachturnier
|
||
|
||
Live-Überwachung von Lara Kiesewetters Partien bei der **ODJM (Offene Deutsche Jugendmeisterschaft)** 2026. Die App lädt automatisch PGN-Daten von der Deutschen Schachjugend, zeigt das aktuelle Spielbrett an und listet alle Partien von Lara.
|
||
|
||

|
||
|
||
## Features
|
||
|
||
- **Live-Brett** – Visuelle Darstellung der aktuellen Partie mit chessboard.js
|
||
- **Spielerinfo** – Anzeige von Namen, ELO und Schachuhr beider Spieler
|
||
- **Zugliste** – Alle Züge der aktuellen Partie mit Klick-Navigation
|
||
- **Alle Partien** – Übersicht aller Runden mit Lara; Klick zum Wechseln
|
||
- **Live-Erkennung** – Automatische Erkennung laufender (unterminierter) Partien
|
||
- **Auto-Refresh** – Aktualisiert die Daten alle 60 Sekunden
|
||
- **Proxy-Server** – Lokaler Python-Server mit PGN-Caching und CORS-Unterstützung
|
||
|
||
## Projektstruktur
|
||
|
||
```
|
||
├── app.js # Hauptlogik (Brett, UI, Auto-Refresh)
|
||
├── index.html # HTML-Grundgerüst
|
||
├── style.css # Dark-Theme-Styling
|
||
├── pgn-parser.js # PGN-Parser (Header + Züge extrahieren)
|
||
├── server.py # Lokaler Proxy-Server (Python 3)
|
||
├── cache/ # PGN-Cache (wird automatisch angelegt)
|
||
└── lara-chess/ # (optional – reserviert für Erweiterungen)
|
||
```
|
||
|
||
## Setup
|
||
|
||
### Voraussetzungen
|
||
|
||
- **Python 3.6+** für den Proxy-Server
|
||
- **Browser** (Chrome, Firefox, Edge)
|
||
|
||
### Installation & Start
|
||
|
||
1. **Proxy-Server starten:**
|
||
```bash
|
||
python server.py
|
||
```
|
||
Der Server läuft auf `http://localhost:8111`.
|
||
|
||
2. **Öffne die App im Browser:**
|
||
```
|
||
http://localhost:8111
|
||
```
|
||
(Der Server serviert auch die statischen Dateien.)
|
||
|
||
### Ohne Proxy (direkter Dateizugriff)
|
||
|
||
Öffne `index.html` direkt im Browser. Hinweis: Der CORS-Proxy (`server.py`) muss trotzdem laufen, da der PGN-Endpunkt keine CORS-Header setzt.
|
||
|
||
## Technik
|
||
|
||
| Komponente | Technologie |
|
||
| ------------------ | --------------------------------------------------- |
|
||
| Schachbrett | [chessboard.js](https://github.com/oakmac/chessboardjs) |
|
||
| Schachlogik | [chess.js](https://github.com/jhlywa/chess.js) |
|
||
| UI | HTML, CSS, Vanilla JS |
|
||
| Proxy-Server | Python http.server (ohne externe Abhängigkeiten) |
|
||
| PGN-Quelle | deutsche-schachjugend.de (ODJM 2026) |
|
||
|
||
## Deployment
|
||
|
||
Die Anwendung kann als eigenständiger Server betrieben werden.
|
||
|
||
### Produktivbetrieb (systemd – Linux)
|
||
|
||
```bash
|
||
# Service-Datei erstellen
|
||
sudo tee /etc/systemd/system/lara-chess.service <<EOF
|
||
[Unit]
|
||
Description=Lara Kiesewetter Live Schachturnier
|
||
After=network.target
|
||
|
||
[Service]
|
||
Type=simple
|
||
User=www-data
|
||
WorkingDirectory=/opt/lara-chess
|
||
ExecStart=/usr/bin/python3 /opt/lara-chess/server.py
|
||
Restart=always
|
||
RestartSec=10
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
EOF
|
||
|
||
# Aktivieren und starten
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl enable --now lara-chess
|
||
```
|
||
|
||
Die App läuft dann auf `http://SERVER_IP:8111`.
|
||
|
||
### Docker
|
||
|
||
```dockerfile
|
||
# Dockerfile
|
||
FROM python:3-slim
|
||
WORKDIR /app
|
||
COPY . .
|
||
EXPOSE 8111
|
||
CMD ["python", "server.py"]
|
||
```
|
||
|
||
```bash
|
||
docker build -t lara-chess .
|
||
docker run -d --name lara-chess -p 8111:8111 --restart unless-stopped lara-chess
|
||
```
|
||
|
||
### Reverse Proxy (nginx)
|
||
|
||
```nginx
|
||
server {
|
||
listen 80;
|
||
server_name chess.example.com;
|
||
|
||
location / {
|
||
proxy_pass http://127.0.0.1:8111;
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Real-IP $remote_addr;
|
||
}
|
||
}
|
||
```
|
||
|
||
### Umgebungsvariablen (optional)
|
||
|
||
In `server.py` können Port und PGN-URL über Umgebungsvariablen überschrieben werden:
|
||
|
||
| Variable | Default | Beschreibung |
|
||
|---|---|---|
|
||
| `PORT` | `8111` | Server-Port |
|
||
| `PGN_URL` | (siehe server.py) | Quelle der PGN-Daten |
|
||
| `CACHE_TTL` | `30` | Cache-Gültigkeit in Sekunden |
|
||
|
||
## Konfiguration
|
||
|
||
Die wichtigsten Konstanten in `app.js`:
|
||
|
||
```js
|
||
const PGN_URL = 'https://www.deutsche-schachjugend.de/2026/odjm-d/partien/gesamt-utf8.pgn';
|
||
const REFRESH_INTERVAL = 60000; // Auto-Refresh alle 60s
|
||
const PLAYER_NAME = 'Kiesewetter, Lara';
|
||
```
|
||
|
||
Im `server.py` lässt sich der Cache-TTL anpassen:
|
||
|
||
```python
|
||
CACHE_TTL = 30 # Sekunden
|
||
```
|